打开课程目录
Module 3预计 80 分钟

多个分支与组合条件

按正确顺序检查多种结果,并组合多个 Boolean 条件

学习目标

能够使用 if / elif / else 表达多种结果,使用 and、or、not 组合条件,并通过多组测试值定位 Logic error。

开始之前

if / else 适合两种结果,但数据分类常常有三种或更多结果。本课用 elif 增加分支,并学习为什么检查顺序会影响最终结果。

随后使用 and、or、not 组合多个 Boolean 条件,最后把 M2 的输入、转换、表达式和 f-string 连接成一个完整的动态程序。

概念 01

elif 增加分支,顺序决定先匹配哪一条

区间分类不只需要写出所有结果,还必须把条件排成正确顺序,否则程序能运行却会给出错误答案。

else if 的英文全称是 else if,Python 把这个关键字缩写成 elif,中文可理解为“否则再检查”。当程序不只有两种结果时,elif 会在前一个条件为 False 后继续检查新的 Condition。

Python 从上到下检查 if、elif 和 else。一旦某个条件为 True 并执行了对应分支,后面的 elif / else 就不再执行。temperature = 28 时,先检查 >= 30 为 False,再检查 >= 20 为 True,因此输出 Comfortable。

Logic error 的英文全称是 Logic error,中文叫逻辑错误。它表示程序能够运行,也可能没有任何红色错误信息,但结果不是我们想要的。检查顺序错误和边界条件错误都可能造成 Logic error。

例如 score = 95 时,如果先写 score >= 60,再写 elif score >= 90,95 会先匹配 >= 60,Excellent 永远没有机会执行。修复方法是先检查更严格的 >= 90,再检查较宽的 >= 60。

调试 Logic error 时不能只等 Python 报错。要主动输入较低值、边界值和较高值,观察每条路径;也可以临时 print() 变量或比较结果,确认实际数据与 Condition 的 True / False 是否符合预期。

  • elif 是 else if 的 Python 缩写
  • Python 从上到下检查分支
  • 一旦匹配就跳过后续分支
  • Logic error:能运行但结果不符合目标
  • 用多组值和边界值主动测试逻辑

从更严格的温度条件开始检查

28 不满足 >= 30,但满足 >= 20,所以执行第二个分支。把宽条件放在严格条件前面,会让后面的分支失去机会。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:Comfortable

概念 02

Logical operator 组合或反转 Boolean 条件

很多决定同时依赖两项要求,或者允许多种情况中的任意一种;逻辑运算符可以把这些简单条件组合成一个结果。

Logical operator 的英文全称是 Logical operator,中文叫逻辑运算符。Python 使用 and、or、not,把多个 True / False 条件组合成一个新的 Boolean result。它们适合表达“同时满足”“至少满足一个”和“不是某种状态”。

and 的英文可称为 and operator,Python 关键字写成 and。age >= 18 and has_ticket 表示年龄够并且有票;只有左右两边都为 True,整体才是 True。实际可用于同时检查多个资格。

or 的英文可称为 or operator,Python 关键字写成 or。is_weekend or is_holiday 表示周末或假期只要有一个为 True,整体就为 True。实际可用于表达多种允许条件。

not 的英文可称为 not operator,Python 关键字写成 not。not is_closed 会反转一个 Boolean result:True 变 False,False 变 True。实际可用于表达“没有关闭”“不是空闲”等相反状态。

这里不需要背复杂表格。先把每个简单条件读成一句能回答 True / False 的话,再按生活语言理解 and、or、not,最后用不同数据测试组合结果。

  • and:两边都为 True 才是 True
  • or:至少一边为 True 就是 True
  • not:反转 True / False
  • 先分别理解简单条件,再组合

分别观察 and、or 和 not

第一行需要两个条件同时成立;第二行只需其中一个成立;第三行把 is_closed 的 False 反转成 True。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:True / True / True

概念 03

把输入、转换、组合条件和动态输出连起来

真正的初学者程序不是孤立使用一个关键字,而是让输入的数据经过连续步骤,最后产生与当次输入相关的结果。

这个旅行建议程序先用 input() 获取距离和天气文字,再用 float() 转换距离,用 == 把天气文字变成 Boolean。接着,comparison 与 logical operator 组成条件,if / elif / else 选择建议,最后由 f-string 插入动态结果。

完整数据流是:输入 → 转换 → comparison → logical operator → if / elif / else → f-string output。变量 advice 保存被选中的结果,所以最后只有一条 print(),但不同输入仍会显示不同建议。

调试时至少测试三组数据:距离较远且不下雨、距离中等、距离较短但下雨。若某组结果不合理,临时显示 distance、is_raining 或某个比较结果,再检查分支顺序和边界。

  • 先把输入转换成正确类型
  • 简单比较可以产生 Boolean 变量
  • 组合条件之后再选择分支
  • 用 f-string 输出被选择的动态结果
  • 多组测试值用于发现 Logic error

根据距离和天气给出旅行建议

每次输入都会经过同一条数据流。条件不同,advice 保存的字符串不同,f-string 因而显示当次选择的建议。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:输入 12 和 no:Travel advice: Cycle / 输入 2 和 yes:Travel advice: Take transit

常见错误

这些写法为什么不工作

错误不是失败,而是 Python 告诉你“这部分我无法理解”。先找到差异,再一次只改一个问题。

先检查较宽条件,使严格分支永远到不了

95 同时满足 >= 60 和 >= 90,但 Python 从上到下遇到第一个 True 就停止检查。先放更严格的 >= 90,才能保留 Excellent 分支。

score = 95

if score >= 60:
    print("Pass")
elif score >= 90:
    print("Excellent")
else:
    print("Keep learning")
改成
score = 95

if score >= 90:
    print("Excellent")
elif score >= 60:
    print("Pass")
else:
    print("Keep learning")

引导修改

用多组数据找出组合条件的逻辑错误

这不是正式练习。跟着步骤修改已有代码,观察每次改变如何影响程序。

  1. 1先分别用 age = 17 和 age = 20 运行;has_ticket 保持 True,记录两次结果是否符合“两个要求都满足”。
  2. 2临时输出 age >= 18 和 has_ticket,确认两个简单条件各自的 Boolean result。
  3. 3修正组合条件后,再把 has_ticket 改成 False,确认年龄满足但没有票时仍然输出 Entry denied。

完成后:把不符合目标的 or 修正后,只有 age >= 18 与 has_ticket 同时为 True 才输出 Entry allowed。

修改这段代码

先运行,再按左侧步骤逐项修改。你的草稿会保存在这个浏览器中。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

正式练习

现在独立完成 2 道练习

先运行代码观察问题,再点击“检查答案”。检查只关心题目要求的结果,不要求你照抄参考写法。

正式练习

分类实验信号强度

练习 1/2

编写实验信号分类程序。使用 input("Signal: ") 接收动态输入并用 float() 转换。必须使用 if / elif / else,从上到下判断:signal >= 80 输出 High signal;否则 signal >= 50 输出 Medium signal;其余输出 Low signal。请保留这个从严格到宽松的顺序。

10 分钟难度 2/3编写代码
代码编辑器将在滚动到这里时加载
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

需要一点提示?

先自己尝试一次;卡住时再逐级打开提示。

本课总结

本课小结

  • 1elif 是 else if 的 Python 缩写,用来继续检查更多条件;分支按从上到下的顺序匹配。
  • 2and 要求两边都成立,or 要求至少一边成立,not 会反转 Boolean result。
  • 3Logic error 不一定产生异常;要用低值、边界值、高值和不同条件组合主动测试。
  • 4M2 的输入、转换、表达式和 f-string 可以与条件判断连接成完整的动态程序。