本篇是《Python 从入门到初级》第 4 / 20 篇。示例使用 Python 3.12 兼容语法,完整目录结构与数据见配套源码包。
程序的价值不仅是做计算,还在于按规则做选择。比如商品满 100 元免运费,否则收 10 元;非指定地区则转人工确认。这些规则可以用条件分支表达。

1. if、elif、else 是一组分支
if 判断第一种情况,elif 继续判断其他情况,else 处理前面都不成立的情况。一组 if/elif/else 中只会进入其中一个分支。
score = 85
if score >= 90:
print("优秀")
elif score >= 60:
print("通过")
else:
print("继续练习")
这里先检查 90,再检查 60,85 会输出“通过”。如果先检查 60,大于 90 的分数也会被前面的分支接住,所以顺序本身就是规则的一部分。
条件语句规则见 官方控制流程说明。
2. 完整示例:订单运费计算
保存为 lesson04.py:
amount_cents = 9900
region = "mainland"
if amount_cents < 0:
print("订单金额不能为负数")
elif region != "mainland":
print("该地区需要人工确认配送费用")
else:
if amount_cents >= 10000:
shipping_cents = 0
else:
shipping_cents = 1000
total_cents = amount_cents + shipping_cents
print(f"商品:{amount_cents / 100:.2f} 元")
print(f"运费:{shipping_cents / 100:.2f} 元")
print(f"应付:{total_cents / 100:.2f} 元")
示例把金额保存为整数分。9900 分未达到 10000 分门槛,所以运费为 1000 分,应付 10900 分,即 109.00 元。
负金额先被拒绝,未指定地区先转人工,其余情况才计算运费。真实业务的地区、价格和配送规则需要另外定义,本例只演示如何把规则写成程序。
3. 缩进决定哪些语句属于这个条件
Python 使用缩进表达代码块,通常每层四个空格。冒号表示后面开始一个代码块。同一层代码保持一致,不要把 Tab 和空格混用。
示例最后三行打印在内部 if/else 结束之后,但仍处于外层 else 里,因此只有可计算的订单才会输出总价。
如果把打印错误地退到最外层,前面被拒绝的订单可能没有计算过 shipping_cents,后面却尝试使用它,进而引发未定义变量错误。
4. 比较、逻辑组合和真假值
== 判断是否相等,!= 判断不相等,>=、<= 判断大小。注意 = 是赋值,== 才是比较。
需要同时满足两条条件,可以使用 and;满足任意一条使用 or;取反使用 not。
stock = 5
quantity = 2
allowed = quantity > 0 and quantity <= stock
print(allowed)
预期为 True。不要写 status == "paid" or "pending" 来表达两种状态;后面的非空字符串本身就是真值。可以写 status in {"paid", "pending"},集合会在下一篇解释。
5. 边界值比随便试一个数字更有用
验证“满 100 元免运费”,至少试 9999、10000、10001 分。预期运费分别是 1000、0、0 分,这能区分 > 和 >= 是否写对。
还要试负数和非指定地区,确认程序按预期拒绝或转人工。程序没有报错,并不意味着业务规则正确。
6. 练习与参考结果
把免运费门槛改为 200 元,普通运费改为 8 元,再把金额设成 19900 分。预期应付 20700 分。
然后写下你的规则表:哪些情况直接拒绝、哪些继续计算、门槛边界是否包含。先写清楚规则再写 if,往往比不断补分支更容易检查。