讲解
if 让程序根据条件走不同的路。基本结构是 if 条件: 后面缩进一个代码块,可选地接 elif(注意不是 else if)和 else。条件从上到下依次判断,命中第一个真值就执行对应代码块并跳过后续所有分支。Python 用缩进表达代码块归属,同一块内的语句缩进量必须完全一致——通常用 4 个空格,这也是 PEP 8 的规范,编辑器的 Tab 键一般会自动转成 4 空格。
条件可以是任何表达式,按真假值规则判定。日常建议把条件写成明确的布尔表达式:if count > 0 比 if count 更清楚地表达「有数据」。Python 没有 switch 语句(3.10 引入的 match 是更强大的模式匹配,属于进阶内容),多分支就用 if...elif...else 链条;当分支只是「同一个值的离散翻译」时,用字典查表往往更优雅。
简单二选一的赋值可以用条件表达式(三元写法):label = '及格' if score >= 60 else '不及格'。它适合一行能说清的场景,嵌套使用是公认的坏味道。函数里还推荐「提前返回」风格:先处理异常情况逐个 return,主体逻辑保持在最浅缩进,比层层嵌套的金字塔清晰得多。最后提醒:Python 的条件后面要加冒号,忘记冒号是最常见的语法错误之一。
示例
def grade_label(score):
if score >= 90:
return '优秀'
elif score >= 75:
return '良好'
elif score >= 60:
return '及格'
else:
return '不及格'
for s in [95, 80, 61, 30]:
print(s, '分 ->', grade_label(s))
# 条件表达式:一行二选一
age = 20
ticket = '成人票' if age >= 18 else '儿童票'
print('票种:', ticket)
# 提前返回:压平嵌套
def checkout(user, cart):
if user is None:
return '请先登录'
if len(cart) == 0:
return '购物车是空的'
return f'下单成功,共 {len(cart)} 件商品'
print(checkout(None, ['书']))
print(checkout('小明', []))
print(checkout('小明', ['书', '笔']))
# 字典查表替代长串 elif
role_names = {'admin': '管理员', 'editor': '编辑', 'viewer': '访客'}
role = 'editor'
print('角色:', role_names.get(role, '未知角色'))
常见坑
- 忘记冒号:if score > 60 后面没有冒号直接 SyntaxError。if/elif/else/for/while/def 行尾都要冒号。
- 缩进不一致:同一代码块里混用 2 空格和 4 空格、或混用 Tab 和空格,会报 IndentationError。统一 4 空格。
- 把赋值 = 写进条件:if x = 5 是语法错误(Python 故意禁止)。判断相等用 ==;3.8+ 确实允许 if (x := 5),但那是刻意的海象写法。
- elif 顺序错误:把 score >= 60 放在 score >= 90 前面,90 分永远进不了优秀分支。范围条件要从严到宽排列。
小结
if/elif/else 按序命中,冒号加缩进定义代码块;条件表达式处理简单二选一;函数内提前返回压平嵌套;查表场景用字典。下一节开始循环。