开始之前
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,所以执行第二个分支。把宽条件放在严格条件前面,会让后面的分支失去机会。
点击“运行”后,程序输出会显示在这里。
概念 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。
点击“运行”后,程序输出会显示在这里。
概念 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 告诉你“这部分我无法理解”。先找到差异,再一次只改一个问题。
先检查较宽条件,使严格分支永远到不了
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先分别用 age = 17 和 age = 20 运行;has_ticket 保持 True,记录两次结果是否符合“两个要求都满足”。
- 2临时输出 age >= 18 和 has_ticket,确认两个简单条件各自的 Boolean result。
- 3修正组合条件后,再把 has_ticket 改成 False,确认年龄满足但没有票时仍然输出 Entry denied。
完成后:把不符合目标的 or 修正后,只有 age >= 18 与 has_ticket 同时为 True 才输出 Entry allowed。
修改这段代码
先运行,再按左侧步骤逐项修改。你的草稿会保存在这个浏览器中。
点击“运行”后,程序输出会显示在这里。
正式练习
现在独立完成 2 道练习
先运行代码观察问题,再点击“检查答案”。检查只关心题目要求的结果,不要求你照抄参考写法。
正式练习
分类实验信号强度
编写实验信号分类程序。使用 input("Signal: ") 接收动态输入并用 float() 转换。必须使用 if / elif / else,从上到下判断:signal >= 80 输出 High signal;否则 signal >= 50 输出 Medium signal;其余输出 Low signal。请保留这个从严格到宽松的顺序。
点击“运行”后,程序输出会显示在这里。
需要一点提示?
先自己尝试一次;卡住时再逐级打开提示。
本课总结
本课小结
- 1elif 是 else if 的 Python 缩写,用来继续检查更多条件;分支按从上到下的顺序匹配。
- 2and 要求两边都成立,or 要求至少一边成立,not 会反转 Boolean result。
- 3Logic error 不一定产生异常;要用低值、边界值、高值和不同条件组合主动测试。
- 4M2 的输入、转换、表达式和 f-string 可以与条件判断连接成完整的动态程序。