开始之前
M2 的程序已经能够接收输入、转换数据、完成计算并输出结果,但无论输入是什么,它都会执行同一组步骤。本课让程序第一次根据数据选择不同的行动。
学习顺序是:先用 Comparison 比较数据并得到 Boolean result,再把这个结果作为 Condition,最后用 if / else 写出两条执行路径。
概念 01
Comparison 产生可以判断的 Boolean result
程序需要先把“是否达到目标”变成明确的 True 或 False,才能决定下一步做什么。
Comparison 的英文全称是 Comparison,中文叫比较。Comparison 会把两个值放在一起检查,例如 score >= 60 检查分数是否至少为 60。它的实际用途包括检查实验温度、行李重量或运动目标是否达到要求。
Comparison operator 的英文全称是 Comparison operator,中文叫比较运算符。Python 写法包括 >(大于)、<(小于)、>=(大于或等于)、<=(小于或等于)、==(等于)和 !=(不等于)。这些符号说明 Python 应该怎样比较两边的值。
Boolean result 的英文全称是 Boolean result,中文叫布尔结果。每次比较只会产生 M1 学过的 Boolean / bool 值 True 或 False。例如 age < 18 可能得到 True,temperature == 25 可能得到 False。这个结果很有用,因为程序可以据此选择行动。
Condition 的英文全称是 Condition,中文叫条件。Condition 是程序需要检查的 True / False 问题,例如 score >= 60。条件成立时结果是 True,不成立时结果是 False;后面的 if 会根据这个结果决定是否执行代码。
要特别区分 = 和 ==:= 是 M1 学过的 assignment(赋值),把右边的值保存到左边变量;== 是 comparison operator,询问两边是否相等。status = "ready" 保存文字,status == "ready" 则产生 True 或 False。
- Comparison:比较两个值
- Comparison operator:>、<、>=、<=、==、!=
- Boolean result:比较产生 True 或 False
- Condition:供程序检查的 True / False 问题
- = 保存值,== 比较是否相等
观察三个比较产生的 Boolean 结果
每一行比较都是一个 Condition,并产生一个 Boolean result。数据没有被修改;Python 只是回答每个问题是否成立。
点击“运行”后,程序输出会显示在这里。
概念 02
if statement 在条件为 True 时执行代码
if 让程序不再机械地执行全部代码,而能只在条件成立时完成某个动作。
if statement 的英文全称是 if statement,中文叫 if 条件语句,Python 关键字写成 if。它是一条“如果条件成立,就执行下面代码”的指令。基本写法是 if condition:,实际可用于达标提示、限制检查和数据分类。
在 if score >= 60: 中,if 表示开始判断,score >= 60 是 Condition,末尾冒号 : 表示下面将出现属于这次判断的代码。冒号不能省略。
Indentation 的英文全称是 Indentation,中文叫缩进,Python 写法是在行首加入空格。本课程统一使用 4 个空格。缩进告诉 Python 哪些行属于 if;这不是装饰,而是代码结构的一部分。
下面的错误代码没有缩进 print()。Python 读到 if 后期待一个向右缩进的代码块,却在下一行找不到,所以报告 IndentationError。错误中的 line 3 指向 Python 停止读取的位置;先看错误类型和行号,再检查该行是否应该属于上面的 if。
- if condition: 表示开始条件判断
- 冒号表示下面有一段分支代码
- Indentation 使用 4 个空格表示代码归属
- IndentationError 时先看行号和相邻代码
运行缺少缩进的 if 代码
print() 本应属于 if,却没有向右缩进 4 个空格。Python 在 line 3 无法建立 if 的代码块,因此停止执行。
点击“运行”后,程序输出会显示在这里。
概念 03
else 补上 Condition 为 False 时的路径
真实判断通常需要同时说明“达到要求”和“尚未达到要求”两种结果,而不是让其中一种情况什么也不发生。
else 的英文名称和 Python 关键字都是 else,中文可理解为“否则”。当 if 的 Condition 为 False 时,Python 会跳过第一条路径,执行 else 下方缩进的另一条路径。else 后面也要写冒号。
两条路径可以读成:Condition → True → 执行 if 分支;Condition → False → 执行 else 分支。一次判断只会选择其中一条路径,完成后再继续执行 if / else 后面的代码。
完整数据流如下:input() 先产生 score_text,float(score_text) 产生可比较的 score,score >= 50 产生 Boolean result,if / else 根据它选择输出。输入 68 会走 Pass 路径,输入 42 会走 Not yet 路径。
- else 处理 if 条件为 False 的情况
- if / else 表达互斥的两条路径
- 两条分支都需要正确缩进
- 输入 → 转换 → 比较 → 分支 → 输出
把 M2 数据流连接到 if / else
input() 返回 str,float() 产生数字,comparison 产生 True / False。if / else 只执行与该结果对应的一条路径。
点击“运行”后,程序输出会显示在这里。
常见错误
这些写法为什么不工作
错误不是失败,而是 Python 告诉你“这部分我无法理解”。先找到差异,再一次只改一个问题。
把应该包含的边界值排除在外
目标写着“至少 10”,所以 10 本身也应该成立。只写 > 10 会排除边界值;使用 >= 并主动测试 9.9、10 和 10.1,才能确认条件与文字要求一致。
distance = 10
if distance > 10:
print("Target reached")distance = 10
if distance >= 10:
print("Target reached")if 下方代码没有向右缩进
冒号后的代码必须缩进 4 个空格,表示它属于 if。IndentationError 的行号通常会把你带到 Python 期待代码块但没有找到的位置。
temperature = 38
if temperature >= 37.5:
print("Target reached")temperature = 38
if temperature >= 37.5:
print("Target reached")引导修改
修改徒步目标的两条路径
这不是正式练习。跟着步骤修改已有代码,观察每次改变如何影响程序。
- 1先分别输入 8 和 12,确认两个数字会进入不同分支。
- 2把目标从 10 公里改成 15 公里,并把两条输出改成 Target reached 和 Keep going。
- 3用 14.5、15 和 18 三个值测试,特别观察边界值 15 会进入哪条路径。
完成后:修改后,14.5 输出 Keep going,15 和 18 输出 Target reached;这说明 >= 包含边界值 15。
修改这段代码
先运行,再按左侧步骤逐项修改。你的草稿会保存在这个浏览器中。
点击“运行”后,程序输出会显示在这里。
正式练习
现在独立完成 2 道练习
先运行代码观察问题,再点击“检查答案”。检查只关心题目要求的结果,不要求你照抄参考写法。
正式练习
检查实验温度目标
编写程序:使用 input("Measured temperature: ") 接收动态输入,并使用 float() 转换为数字。使用 if / else 判断温度是否大于或等于 37.5:达到目标时输出 Target reached,否则输出 Below target。必须使用 if 和 else;不要写死测试结果。
点击“运行”后,程序输出会显示在这里。
需要一点提示?
先自己尝试一次;卡住时再逐级打开提示。
本课总结
本课小结
- 1Comparison operator 比较两个值,并产生 Boolean result:True 或 False。
- 2Condition 是程序检查的 True / False 问题;= 用于赋值,== 用于比较是否相等。
- 3if 在条件为 True 时执行第一条路径,else 在条件为 False 时执行另一条路径。
- 4冒号和 4 个空格的 Indentation 共同说明哪些代码属于分支。