让程序会做选择
到目前为止你的程序都是一条道走到黑:从上到下,每行都执行。但真实世界需要分叉——"如果下雨就带伞"。
age = int(input("你的年龄:"))
if age >= 18:
print("可以进入")
else:
print("未成年,不可以")
缩进就是语法
看清楚 print 前面的四个空格。在大多数语言里缩进只是好看,在 Python 里它是语法的一部分——缩进的那几行,才属于 if 管辖的范围。
if age >= 18:
print("A") # 属于 if,条件成立才执行
print("B") # 不属于 if,永远执行
规矩就三条:
if那行结尾必须有冒号:- 下一行必须缩进,统一用 4 个空格(别用 Tab,别混用,否则报
IndentationError) - 缩进结束,这个分支就结束了
比较运算符
a == b # 相等(两个等号!一个等号是赋值)
a != b # 不相等
a > b # 大于
a >= b # 大于等于
a < b # 小于
a <= b # 小于等于
= 和 == 混淆是新手第一大笔误。记法:一个等号是"放进去",两个等号是"问一句"。
比较的结果是布尔值:
print(3 > 5) # False
print(3 == 3) # True
多个分支:elif
score = int(input("分数:"))
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("要加油了")
elif 是 else if 的缩写。关键在于从上往下依次检查,命中一个就跳出整段,后面的不再看。
所以 95 分只会打印"优秀"——虽然它也 >= 80,但那一行根本没被执行到。也正因如此,顺序不能乱:如果把 >= 60 写在最前面,那所有及格的人都会被判成"及格"。
组合条件:and / or / not
age = 20
has_ticket = True
if age >= 18 and has_ticket:
print("放行")
if age < 6 or age >= 65:
print("免票")
if not has_ticket:
print("请先买票")
and:两边都成立才算成立(要求严格)or:有一边成立就算成立(要求宽松)not:反过来
Python 还支持一种很自然的写法:if 18 <= age < 65:,和 age >= 18 and age < 65 等价,但更好读。
10 秒自测
x = 5
if x > 3:
print("A")
elif x > 1:
print("B")
输出什么?答案是只有 A。x 确实也大于 1,但 elif 在前一个分支命中后就不再检查了。