Appearance
11|条件判断
程序需要根据数据的状态决定执行哪条路径。条件判断让程序具备"分支"能力——满足某个条件时做 A,不满足时做 B。
一、if 语句
python
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(grade) # Bif 后面的条件为真时,执行对应的代码块。elif(else if 的缩写)检查额外条件,else 处理所有不满足的情况。
条件从上到下依次判断,一旦某个条件满足,后续条件不再检查。上面的代码中,score = 85 满足 score >= 80,所以 grade 是 B,不会继续检查 score >= 70。
代码块通过缩进表示。Python 用缩进(通常是 4 个空格)区分代码层级,而不是大括号。缩进不一致会报 IndentationError。
二、比较运算符
python
a == b # 等于
a != b # 不等于
a > b # 大于
a < b # 小于
a >= b # 大于等于
a <= b # 小于等于比较可以链式书写:
python
1 < x < 10 # x 大于 1 且小于 10,等价于 (1 < x) and (x < 10)判断对象身份(是否是同一个对象):
python
a is b # a 和 b 是同一个对象
a is not b # a 和 b 不是同一个对象== 比较值是否相等,is 比较身份是否相同。判断 None 时用 is:
python
if value is None:
print("值为空")三、布尔运算符
python
a > 0 and b > 0 # 两者都满足
a > 0 or b > 0 # 至少一个满足
not a > 0 # 取反,等价于 a <= 0布尔运算符有短路特性:
python
# and:左边为假时,右边不再计算
x = 0
x != 0 and 10 / x > 2 # False,不会触发除零错误
# or:左边为真时,右边不再计算
name = ""
result = name or "default" # 'default',name 为空字符串(假值),取右边短路特性常用于设置默认值:
python
timeout = user_timeout or 30 # user_timeout 为假值时用 30四、真值判断
Python 中以下值在布尔上下文中被视为假(falsy):
False0、0.0、0j""(空字符串)[]、()、{}、set()(空容器)None
其他值都是真(truthy)。
python
name = ""
if name: # 空字符串为假,不执行
print("有名字")
items = []
if items: # 空列表为假,不执行
print("有元素")显式判断空容器:
python
if len(items) == 0: # 可以,但不够 Pythonic
if not items: # 推荐,更简洁五、三元表达式
简单的二选一可以用一行写:
python
status = "通过" if score >= 60 else "未通过"等价于:
python
if score >= 60:
status = "通过"
else:
status = "未通过"三元表达式适合简单的赋值场景。逻辑复杂时,展开成 if-else 更易读。
六、match-case(Python 3.10+)
多个等值判断时,match-case 比连续的 if-elif 更清晰:
python
http_status = 404
match http_status:
case 200:
message = "OK"
case 404:
message = "Not Found"
case 500:
message = "Internal Server Error"
case _:
message = "Unknown"_ 是通配符,匹配所有其他情况。match-case 还支持模式匹配(解构列表、字典等),但基础使用场景主要是替代等值判断的 if-elif 链。
记忆锚点:if-elif-else 从上到下判断,满足即停止;== 比值,is 比身份;and 和 or 有短路特性;空容器、0、空字符串、None 都是假值;三元表达式 A if 条件 else B;match-case 替代等值判断链(Python 3.10+)。