03. 选择迷宫
上一章我们学会了用变量存储数据。但现实世界不只是"存东西"——你每天都在做选择:下雨就带伞,肚子饿就吃饭,周末就睡懒觉。程序也一样,需要学会"看情况行事"。
🗺️ Python 魔法学院
你站在一座巨大的迷宫入口。前方有三条岔路——每条路通往不同的命运。左边是宝藏,右边是陷阱,中间是未知。
今天你将学习「抉择术」——用
if/elif/else让程序在岔路口做出判断。每个条件都是一把钥匙,只有正确的判断才能打开通往下一关的大门。
3.1 如果……就……:if 语句¶
🗺️ 程序的选择流程图¶
在写代码之前,先看看程序是怎么"做选择"的。以"下雨天出门"为例,程序的大脑里会经历这样一个过程:
┌──────────┐
│ 开始 │
└────┬─────┘
│
▼
┌─────────────┐
│ 天气是下雨吗?│
└──┬───────┬──┘
│ │
是 │ │ 否
│ │
▼ ▼
┌────────┐ ┌──────┐
│ 带伞出门 │ │直接出门│
└───┬────┘ └──┬───┘
│ │
└────┬─────┘
│
▼
┌────────┐
│ 结束 │
└────────┘这个图就是流程图——编程里最经典的工具。菱形是"判断",矩形是"行动",箭头是"走向"。计算机每次走到菱形那里,就会像一个交警一样:“停下!先判断,再决定走哪条路。”
Python 最基本的判断结构叫 if。它的逻辑和日常生活一模一样:
如果 天气 == "下雨":
带伞出门写成 Python 代码:
注意两个关键细节:
if那一行末尾有冒号:print那一行前面有4 个空格(这叫"缩进",表示"这是 if 管辖的范围")
3.2 比较运算符:判断的依据¶
想让程序"判断",你得告诉它判断什么。Python 提供了一套比较运算符:
| 运算符 | 含义 | 例子 | 结果 |
|---|---|---|---|
== | 等于 | 5 == 5 | True |
!= | 不等于 | 5 != 3 | True |
> | 大于 | 5 > 3 | True |
< | 小于 | 5 < 3 | False |
>= | 大于等于 | 5 >= 5 | True |
<= | 小于等于 | 3 <= 5 | True |
💡 最容易搞混:
=是赋值,==是"等于吗?"。if x = 5会报错,要写if x == 5。
🎮 动手做:改一下符号看看结果怎么变¶
试试把上面那个代码块的 >= 改成 <,看看结果怎么变?再把 60 改成 90?先猜一猜,再动手改!
🧪 实验精神:编程最好的学习方式就是"改一个东西,看看会发生什么"。大胆改,不会把电脑弄坏的!如果报错了,看看错误提示——每条报错信息都在教你一个知识点。
3.3 否则怎么办:else¶
只有 if 是"单向选择"。加入 else,你就能处理"如果不是这样,那就那样":
3.4 多重选择:elif¶
🤔 为什么还需要 elif?¶
前面学了 if(一种情况)和 else(两种情况),它们已经能处理"及格/不及格"的问题了。但如果成绩要分 A/B/C/D/F 五种等级呢?
让我们看看这个难题是怎么一步步解决的:
第一步:只用 if — 能判断一种情况
if score >= 90: # 只能判断"是不是 A"
print("A")第二步:加 else — 能判断两种情况
if score >= 60: # 及格一种
print("及格")
else: # 不及格一种
print("不及格")→ 这只能分两种!如果我想分五种(A/B/C/D/F),怎么办?🤯
第三步:用多个 if 串联 — 能判断多种了,但有 bug!
→ 如果 score = 95,它会打印 A、B、C 全出来!因为 95 同时满足三个条件!
第四步:加 elif — 完美解决! ✅
if score >= 90: print("A")
elif score >= 80: print("B")
elif score >= 70: print("C")→ elif 是 “else + if” 的缩写,意思是"否则,如果……"。一旦某个条件满足了,后面的 elif 全部跳过,不会重复执行!
现实中的选择往往不止两种。比如考试成绩分 A/B/C/D/F 五个等级。这时用 elif(else + if):
💡 执行顺序很重要:Python 从上往下检查,只要碰到第一个满足的条件,就会执行并跳过后面所有条件。
3.5 逻辑运算符:组合多个条件¶
有时候一个条件不够,需要"同时满足"或"满足其中一个":
| 运算符 | 含义 | 例子 |
|---|---|---|
and | 两边都要为 True | age >= 18 and age <= 60 |
or | 只要一边为 True | score == 100 or score == 99 |
not | 取反 | not is_raining |
🧠 真相表:and 和 or 到底怎么判断?¶
下面这个表叫真值表(Truth Table),它列出了所有可能的情况。把它当成"and/or 的说明书":
and(与):两边都要 True,结果才是 True
| 条件 A | 条件 B | A and B 结果 | 生活例子 |
|---|---|---|---|
True | True | ✅ True | 有票 且 满 12 岁 → 能进电影院 |
True | False | ❌ False | 有票 但 没满 12 岁 → 不能进 |
False | True | ❌ False | 没票 但 满 12 岁 → 不能进 |
False | False | ❌ False | 没票 且 没满 12 岁 → 不能进 |
💡 记口诀:
and像"挑剔的家长"——两个都要好,差一个都不行!
or(或):只要一边 True,结果就是 True
| 条件 A | 条件 B | A or B 结果 | 生活例子 |
|---|---|---|---|
True | True | ✅ True | 爸爸或妈妈来接 → 都来了,当然行 |
True | False | ✅ True | 爸爸来接或妈妈没来 → 爸爸来了就行 |
False | True | ✅ True | 爸爸没来或妈妈来接 → 妈妈来了就行 |
False | False | ❌ False | 爸爸没来 且 妈妈也没来 → 没人接 😢 |
💡 记口诀:
or像"大方的朋友"——两个有一个就行,只有两个都差才不行!
3.6 小挑战:猜数字¶
让我们用刚学的 if/elif/else 写个小游戏 —— 你心里想一个数字,让程序猜:
试着改一下 guess 的值,看看程序会怎么反应。这其实就是二分查找的雏形!
3.7 嵌套判断:选择中的选择¶
判断里还可以套判断——就像"如果下雨,再判断有没有伞":
⚠️ 嵌套不要太深(最多 3 层),否则代码变成"千层饼",谁也看不懂。
3.8 🎮 趣味挑战:智能评分系统¶
改一下分数,看看系统给你什么评价:
💡 试试看:把上面的四科成绩改成你想要的分数,看看系统怎么评价你。把某一科改成低于 60 分,会有什么不同的评语?
3.9 动手练习¶
📋 参考答案(点击展开)
3.10 本章小结¶
| 你学到了什么 | 具体内容 |
|---|---|
| ✅ if 语句 | 基本的"如果……就……"判断结构 |
| ✅ 比较运算符 | == != > < >= <= |
| ✅ else | 不满足 if 时的备选方案 |
| ✅ elif | 处理三种及以上情况 |
| ✅ 逻辑运算符 | and(与)、or(或)、not(非) |
| ✅ 嵌套判断 | 判断里面套判断(但别套太深) |
🚀 下一章预告:选择让程序变聪明,但如果你想让程序重复做一件事呢?下一章,我们进入循环的世界——让计算机帮你自动"打工"!
3.11 📚 参考资料¶
| 资源 | 链接 | 说明 |
|---|---|---|
| Python 官方教程 — 控制流 | docs | 官方 if/for/while 等控制流详解 |
| Real Python — 条件语句 | realpython | 深入理解 Python 条件和逻辑运算 |
| Python 布尔与逻辑运算 | realpython | Python 中的布尔类型与逻辑运算详解 |
本章内容基于 Python 官方教程 改编,遵循 PSF License 许可。