第 03 节:让程序做选择
本节 objectives:
- 写出返回
True/False的条件- 用
if/elif/else表达互斥分支- 用真值测试写出不过度复杂的判断
程序不会“理解情况”,它只检查条件
人会说“如果天气不好就别出门”。程序需要更具体:温度是否低于某个数?雨量是否大于 0?条件就是把模糊判断压成 True 或 False。Python 的 if 语句根据条件真假选择执行哪一块代码1。
分支写得好,程序看起来像一张清楚的决策表,而不是一串猜心术。
讲解
比较产生布尔值。 score >= 60、name == "Ada"、count != 0 都会得到布尔结果。注意判断相等用 ==,赋值用 =。
缩进定义分支范围。 Python 用缩进表示哪些语句属于 if 里面。缩进不是排版偏好,而是语法的一部分1。
elif 表示“否则如果”。 多个互斥等级适合 if/elif/else:先检查第一个条件,不满足才看下一个。顺序会影响结果。
很多值自带真假。 空字符串、空列表、数字 0 通常在条件中被看作假;非空字符串、非空列表、非零数字通常为真。这叫真值测试2。
跟我做一遍(worked example)
写一个成绩标签:
这里先检查最高等级,再检查及格线。若把 score >= 60 放到最前面,95 分也会先被判成 pass,因为程序不会继续猜你是不是想要更精细标签。
换你补全(faded example)
补全判断:当 name 不是空字符串时打招呼,否则提醒输入名字。
答案:
关键判断点是:字符串非空就是真,不必写成 name != ""。
小结 + 通向下一节
分支让程序在几条路中选一条。下一节处理另一种基本控制:同一件事对很多数据重复做。
Footnotes
-
Python Tutorial: More Control Flow Tools — https://docs.python.org/3/tutorial/controlflow.html ↩ ↩2
-
Python Standard Library: Built-in Types — https://docs.python.org/3/library/stdtypes.html ↩
练习
Level 1: 写一个年龄分组。
- 做法:设置
age,输出child、teen或adult。
提示 1
可以用 age < 13、age < 18 这样的递进条件。
Level 2: 常见错误剖析。
- 做法:故意写
if score = 60:并运行,再修复。
提示 2
看错误箭头指向哪一个符号。
看参考答案
条件位置需要一个可判断真假的表达式。