if-else 语句
当程序需要在两种互斥的情况中做出选择时,if-else 结构提供了清晰的二选一逻辑:条件为真执行 A,否则执行 B。这种非此即彼的判断是实际编程中最常见的模式之一。
基本结构
if-else 在 if 的基础上增加了 else 子句,else 后面同样跟冒号,其代码块在 if 条件为假时执行:
age = 17
if age >= 18:
print("可以进入网吧")
else:
print("未满 18 岁,禁止进入")
程序先判断 age >= 18,由于 17 不满足该条件,整个 if 代码块被跳过,转而执行 else 下方的代码块。if 和 else 的代码块必须保持各自的缩进一致,且两者处于同一逻辑层级。
二选一逻辑的本质
if-else 保证了两条分支中有且仅有一条会被执行。这种互斥性让它特别适合处理对立状态:
score = 58
if score >= 60:
status = "及格"
else:
status = "不及格"
print(f"成绩状态:{status}")
无论 score 取何值,status 只会被赋值一次,不会出现两条分支都执行或都不执行的情况。
嵌套 if-else
当判断条件具有层次性时,可以在 if 或 else 代码块内部再嵌入新的 if-else,形成嵌套结构:
is_member = True
purchase_amount = 150
if is_member:
if purchase_amount >= 100:
discount = 0.8
else:
discount = 0.9
else:
if purchase_amount >= 200:
discount = 0.95
else:
discount = 1.0
print(f"折扣率:{discount}")
上面的代码先区分会员与非会员,再在各自身份下根据消费金额决定折扣。嵌套层级越深,代码可读性越差,因此当嵌套超过两层时,通常应考虑用 elif 或提前返回等方式重构。
扁平化嵌套
通过逻辑组合,很多嵌套 if-else 可以改写为单层结构:
# 嵌套写法
if x > 0:
if y > 0:
print("第一象限")
else:
print("第四象限")
else:
if y > 0:
print("第二象限")
else:
print("第三象限")
# 扁平化写法
if x > 0 and y > 0:
print("第一象限")
elif x > 0 and y <= 0:
print("第四象限")
elif x <= 0 and y > 0:
print("第二象限")
else:
print("第三象限")
扁平化后的代码虽然条件表达式更长,但结构更清晰,减少了缩进层级。
多条件二选一
有时两种分支各自需要判断多个条件,可以用逻辑运算符整合:
username = "admin"
password = "123456"
if username == "admin" and password == "secret":
print("登录成功")
else:
print("用户名或密码错误")
注意 else 只对应紧邻的 if,如果需要区分"用户名错误"和"密码错误",则应拆分为更多分支或使用 elif。
else 的省略与保留
else 是可选的。如果假分支不需要任何操作,完全可以不写:
value = 10
if value < 0:
value = 0 # 负数归零
# 非负数无需处理,直接继续
print(value)
但在某些场景下,显式写出 else 反而有助于表达意图,即使它里面是 pass:
if user.is_active:
send_email(user)
else:
pass # 静默跳过非活跃用户,逻辑意图明确
边界情况
if-else 处理的是布尔判断,边界值尤其需要仔细测试:
threshold = 60
score = 60
if score >= threshold:
print("及格")
else:
print("不及格")
当 score 恰好等于 60 时,条件为真,输出"及格"。如果需求是"严格大于",条件应写为 score > threshold。边界值的选取直接决定程序行为的正确性。
与条件表达式的关系
对于简单的变量赋值类二选一,Python 提供了更紧凑的条件表达式(三元运算符):
age = 20
status = "成年" if age >= 18 else "未成年"
条件表达式适合嵌入到表达式上下文中,而 if-else 语句更适合包含多条语句的复杂分支。两者功能有重叠,但适用场景不同,条件表达式将在独立文档中详细讨论。
if-else 语句是构建程序决策能力的基础构件,掌握其嵌套规则和扁平化技巧,能够写出既正确又易读的条件逻辑。