1. 条件
程序通常不会无论如何都执行同一组操作。我们可以让它先判断当前情况,再决定下一步做什么:成绩达到及格线就提示通过,否则提示继续努力;用户已经登录就显示个人页面,否则跳转到登录页面。
这种「根据条件选择行为」的能力,就是条件语句。
条件语句的核心问题只有一个:条件成立时执行什么,条件不成立时执行什么。
1score = 8223if score >= 60:4print("考试通过")
这段代码中,score >= 60 是条件。它的结果是 True,所以缩进的 print() 会执行。
Python 使用缩进表示代码属于哪个条件分支,不使用大括号包裹代码。通常使用 4 个空格缩进,并且同一个代码块中的缩进必须保持一致。
2. if
最基本的条件语句由 if、条件和冒号组成:
1condition = True23if condition:4print("条件成立时执行")
真实代码中的条件可以是比较表达式,也可以是一个已经保存好的布尔变量:
1is_logged_in = True23if is_logged_in:4print("欢迎回来")
if 后面的冒号不能省略。下一行开始的缩进代码称为一个代码块,只有条件为真时才会执行。
如果条件为假,Python 会跳过这个代码块,继续执行后面的代码:
1has_message = False23if has_message:4print("显示消息")56print("程序继续运行")
这个例子最终只会打印 程序继续运行。if 并不会让程序停在原地等待,而是决定代码块是否参与本轮执行。
3. 分支
当条件不成立时需要执行另一段代码,可以使用 else:
1age = 1623if age >= 18:4print("可以进入")5else:6print("暂时不能进入")
else 不需要再写条件。它表示前面的 if 条件没有成立时执行的默认分支。
如果有多个互斥情况,可以使用 elif:
01score = 820203if score >= 90:04level = "优秀"05elif score >= 60:06level = "及格"07else:08level = "需要继续练习"0910print(level)
Python 会从上到下检查这些分支,遇到第一个成立的条件后就执行对应代码,并跳过剩余分支。因此,分支的顺序很重要:更具体的条件应该放在前面,更宽泛的条件放在后面。
elif 可以出现多次,else 最多出现一次,也可以完全省略:
1temperature = 2823if temperature < 10:4print("天气较冷")5elif temperature > 30:6print("天气较热")
当温度处于 10 到 30 之间时,这段代码不会打印任何提示。这正是省略 else 后的效果。
4. 真值
条件位置最常见的是 True 或 False,但 Python 允许很多对象直接参与条件判断。
下面这些值通常会被当作假:False、None、数字 0、空字符串,以及空列表、空字典等空容器。其他大多数值会被当作真:
01name = ""02topics = []0304if name:05print("已经填写名字")06else:07print("名字还没有填写")0809if not topics:10print("还没有学习主题")
这种写法很适合判断「是否有内容」。如果你的意图是判断一个值是否为 None,应该明确写出 is None,不要把所有假值混在一起:
1result = None23if result is None:4print("还没有得到结果")
比较运算符可以产生布尔条件。多个条件可以用 and、or 和 not 组合:
| 运算符 | 含义 | 示例 |
|---|---|---|
and | 两个条件都成立 | age >= 18 and has_ticket |
or | 至少一个条件成立 | is_admin or is_owner |
not | 反转条件结果 | not is_finished |
1age = 202has_ticket = True3is_banned = False45can_enter = age >= 18 and has_ticket and not is_banned67if can_enter:8print("允许进入")
Python 还支持连续比较。例如,0 <= score <= 100 表示分数同时大于等于 0 且小于等于 100,适合表达范围判断:
1score = 8223if 0 <= score <= 100:4print("分数有效")
5. 嵌套
一个条件分支里面还可以放另一个条件,这叫条件嵌套:
01has_ticket = True02age = 160304if has_ticket:05if age >= 18:06print("可以进入")07else:08print("有票,但年龄不满足要求")09else:10print("请先购买门票")
嵌套能够准确表达判断顺序,但层级太深会让代码难以阅读。两个条件都必须成立时,通常可以用 and 合并:
1has_ticket = True2age = 2034if has_ticket and age >= 18:5print("可以进入")
写条件时,可以先把复杂的判断拆成有意义的变量。这样做不会改变程序逻辑,却能让代码更容易检查:
1has_ticket = True2age = 2034is_adult = age >= 185can_enter = has_ticket and is_adult67if can_enter:8print("可以进入")
不要为了少写几行,把很多业务规则全部塞进一个超长条件中。条件语句首先要让人读懂,其次才是追求代码短。
6. 实例
下面用一个简单的订单例子,把条件语句串起来。订单满 300 元可以打 9 折,会员但未满 300 元可以打 95 折,其他情况不打折:
01amount = 36002is_member = True0304if amount >= 300:05discount = 0.906elif is_member:07discount = 0.9508else:09discount = 11011final_amount = amount * discount12print(f"应付金额:{final_amount:.2f} 元")
这里的 discount 先由分支决定,再参与后面的计算。把「选择折扣」和「计算金额」分成两步,通常比在一行里直接写完整表达式更清楚。
如果只有一个简单的二选一结果,也可以使用条件表达式:
1score = 822result = "通过" if score >= 60 else "未通过"34print(result)
条件表达式适合很短的判断。分支中包含多行代码或多个业务规则时,仍然应该使用普通的 if、elif 和 else。