Python 条件分支图解:为什么代码只走一条路
用库存判断逐步看清条件怎样得到 True 或 False,if、elif、else 怎样从上到下检查,以及错误顺序为什么会让结果失真。
本文目录 5 节 · 点击展开
代码读到一条库存记录后,往往需要自己决定下一步:库存不足就提醒补货,已经缺货就立刻标记,其他情况继续销售。条件分支就是这道“决策门”。
它不是同时试走所有路线,而是按顺序完成三件事:先把条件算成 True 或 False,再选择一条路线,最后只执行被选中的代码。
条件会先得到一个布尔值
先看最小库存判断:
stock = 3
if stock < 5:
print("需要补货")
Python 到达第 3 行时,不会直接猜应该做什么。它先取出 stock 当前保存的 3,代入 stock < 5,计算出 True,然后才进入缩进的第 4 行。
stock < 5 先得到真假,再决定去向stock → 33 < 5 → True进入 if把输入改成 stock = 8,条件会变成 8 < 5 → False。Python 跳过缩进代码,因此终端不会显示“需要补货”。如果两种结果都要明确处理,可以补上 else:
stock = 8
if stock < 5:
print("需要补货")
else:
print("库存正常")
输出是:
库存正常
这里有两个不能省略的结构信号:条件后面有冒号 :,属于这个分支的代码需要缩进。缩进不是排版,它划出了“这条路线里要执行的代码”。
多条分支怎样从上到下检查
库存不只有“不足”和“正常”两种状态。下面这段代码把 0 单独标成“缺货”:
stock = 3
if stock == 0:
level = "缺货"
elif stock < 5:
level = "库存偏低"
else:
level = "库存正常"
print(level)
if / elif / else 可以读成一列从上到下的检查站:
- 先检查
if。 - 如果结果为
False,才检查下一个elif。 - 前面都没有命中,才进入
else。 - 一旦某个条件得到
True,本次判断立即选定路线,后面不再检查。
stock = 3- 检查 01
3 == 0False继续向下 - 检查 02 · 命中
3 < 5Truelevel = “库存偏低” - 检查 03 · 关闭
else不再检查前面已经命中
stock = 8- 检查 01
8 == 0False继续向下 - 检查 02
8 < 5False继续向下 - 检查 03 · 命中
else兜底路线level = “库存正常”
else 没有自己的条件。它的含义是“前面的条件都不成立时走这里”,所以必须放在最后。
and、or、not 怎样组合真假
真实业务判断常常需要同时看多个字段。不要只背“并且、或者、取反”,把真实值代进去就会清楚很多:
status = "已支付"
amount = 129.0
is_refunded = False
is_priority = status == "已支付" and amount > 100
is_closed = status == "已退款" or status == "已关闭"
can_ship = not is_refunded
print(is_priority)
print(is_closed)
print(can_ship)
完整输出:
True
False
True
status == “已支付”Trueamount > 100Truestatus == “已退款”Falsestatus == “已关闭”Falseis_refundedFalsenot FalseTrue条件变长时,先给中间结果起名字,比把所有判断塞进一行更容易检查:
is_paid = status == "已支付"
is_large_order = amount > 100
if is_paid and is_large_order:
print("进入高金额已支付订单")
另外,检查一个值是否属于某组状态时,可以使用 in:
status = "已退款"
closed_statuses = ["已退款", "已关闭", "已取消"]
if status in closed_statuses:
print("订单已结束")
这里的条件是 status in closed_statuses,它同样先得到 True,然后代码才进入缩进部分。
条件都写对了,顺序仍可能让结果错
下面两条条件单独看都没有语法错误,但排列顺序有问题:
stock = 0
if stock < 5:
level = "库存偏低"
elif stock == 0:
level = "缺货"
else:
level = "库存正常"
print(level)
人可能注意到 stock == 0,期望结果是“缺货”;Python 却严格从上到下。0 < 5 已经是 True,第一条路线立即命中,专门处理缺货的第二条条件根本没有机会运行。
0 < 5True · 立即命中0 == 0不再检查
0 == 0True · 立即命中0 < 5不再检查
排序原则:先放范围更窄、更特殊的条件,再放范围更宽的一般条件,最后用 else 兜底。
正确代码是:
stock = 0
if stock == 0:
level = "缺货"
elif stock < 5:
level = "库存偏低"
else:
level = "库存正常"
print(level)
这类问题通常不会报错,因为每一行语法都合法;它属于逻辑错误。定位时不要只看最终输出,要沿着顺序找到“第一条得到 True 的条件”。
动手验证三组库存
复制下面代码,依次把 stock 改成 0、3、8。运行前先预测每次会检查到哪一行、后面的哪些分支不会再检查。
stock = 0
if stock == 0:
level = "缺货"
elif stock < 5:
level = "库存偏低"
else:
level = "库存正常"
print("库存:", stock)
print("结果:", level)
预期对应关系:
| 输入 | 第一个命中的分支 | 输出结果 |
|---|---|---|
0 | stock == 0 | 缺货 |
3 | stock < 5 | 库存偏低 |
8 | else | 库存正常 |