系列 · Python 零基础到简单脚本 第 4 篇 / 共 11 篇 教程

Python 条件分支图解:为什么代码只走一条路

用库存判断逐步看清条件怎样得到 True 或 False,if、elif、else 怎样从上到下检查,以及错误顺序为什么会让结果失真。

作者:黄撑 更新于 2026-08-27
本文目录 5 节 · 点击展开

代码读到一条库存记录后,往往需要自己决定下一步:库存不足就提醒补货,已经缺货就立刻标记,其他情况继续销售。条件分支就是这道“决策门”。

它不是同时试走所有路线,而是按顺序完成三件事:先把条件算成 TrueFalse,再选择一条路线,最后只执行被选中的代码。

条件会先得到一个布尔值

先看最小库存判断:

stock = 3

if stock < 5:
    print("需要补货")

Python 到达第 3 行时,不会直接猜应该做什么。它先取出 stock 当前保存的 3,代入 stock < 5,计算出 True,然后才进入缩进的第 4 行。

条件求值观察台stock < 5 先得到真假,再决定去向
输入 · 01当前库存stock → 3
当前行 · 02代入条件3 < 5 → True
结果 · 03选择 True 路线进入 if
True 路线 · 本次命中执行缩进代码输出:需要补货
False 路线 · 本次未走跳过缩进代码没有这行输出

把输入改成 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 可以读成一列从上到下的检查站:

  1. 先检查 if
  2. 如果结果为 False,才检查下一个 elif
  3. 前面都没有命中,才进入 else
  4. 一旦某个条件得到 True,本次判断立即选定路线,后面不再检查。
顺序命中轨迹同一段代码输入不同库存,仍然只会选中一个结果
运行 Astock = 3
  1. 检查 013 == 0False继续向下
  2. 检查 02 · 命中3 < 5Truelevel = “库存偏低”
  3. 检查 03 · 关闭else不再检查前面已经命中
最终输出:库存偏低
运行 Bstock = 8
  1. 检查 018 == 0False继续向下
  2. 检查 028 < 5False继续向下
  3. 检查 03 · 命中else兜底路线level = “库存正常”
最终输出:库存正常

else 没有自己的条件。它的含义是“前面的条件都不成立时走这里”,所以必须放在最后。

andornot 怎样组合真假

真实业务判断常常需要同时看多个字段。不要只背“并且、或者、取反”,把真实值代进去就会清楚很多:

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
真假组合台先分别求值,再让逻辑词组合结果
and · 两边都要 True
status == “已支付”True
and
amount > 100True
True → 优先处理
or · 至少一边 True
status == “已退款”False
or
status == “已关闭”False
False → 订单未关闭
not · 把结果反过来
is_refundedFalse
not
not FalseTrue
True → 可以发货

条件变长时,先给中间结果起名字,比把所有判断塞进一行更容易检查:

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,第一条路线立即命中,专门处理缺货的第二条条件根本没有机会运行。

错误顺序定位板问题发生在第一个条件过早命中
错误顺序
  1. 0 < 5True · 立即命中
  2. 0 == 0不再检查
实际结果:库存偏低
正确顺序
  1. 0 == 0True · 立即命中
  2. 0 < 5不再检查
期望结果:缺货

排序原则:先放范围更窄、更特殊的条件,再放范围更宽的一般条件,最后用 else 兜底。

正确代码是:

stock = 0

if stock == 0:
    level = "缺货"
elif stock < 5:
    level = "库存偏低"
else:
    level = "库存正常"

print(level)

这类问题通常不会报错,因为每一行语法都合法;它属于逻辑错误。定位时不要只看最终输出,要沿着顺序找到“第一条得到 True 的条件”。

动手验证三组库存

复制下面代码,依次把 stock 改成 038。运行前先预测每次会检查到哪一行、后面的哪些分支不会再检查。

stock = 0

if stock == 0:
    level = "缺货"
elif stock < 5:
    level = "库存偏低"
else:
    level = "库存正常"

print("库存:", stock)
print("结果:", level)

预期对应关系:

输入第一个命中的分支输出结果
0stock == 0缺货
3stock < 5库存偏低
8else库存正常