Skip to content

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)   # B

if 后面的条件为真时,执行对应的代码块。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):

  • False
  • 00.00j
  • ""(空字符串)
  • [](){}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 比身份;andor 有短路特性;空容器、0、空字符串、None 都是假值;三元表达式 A if 条件 else Bmatch-case 替代等值判断链(Python 3.10+)。