完整讲解 · 7 段教学·配 7 道练习题·预计 35 分钟
本页是本章的通读版,可直接读完全部讲解。想动手写代码、跑判分,去 闯关模式。
前面学的都是「数据怎么存」,这一节学「程序怎么走」——
if / elif / else):根据情况走不同分支for / while):让计算机帮你重复跑match / case:结构化模式匹配——比一长串 elif 优雅得多Python 中,if 语句的基本形式如下:
if 判断条件:
执行语句……
else:
执行语句……⚠️ 别忘了冒号
:和缩进——Python 没有大括号{},靠缩进来表示「这一段属于 if 的代码块」。
if 语句的判断条件可以用 >(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系。
例子:
results = 59
if results >= 60:
print('及格')
else:
print('不及格')输出:
不及格
Python 程序语言指定任何非 0 和非空(null)值为 True,0 或者 null 为 False。
num = 6
if num:
print('Hello Python')输出:
Hello Python
如果换成空字符串:
num = ''
if num:
print('Hello Python')什么都不会打印——空字符串被当作 False,条件不成立。
可以这样总结「假值」(其它都是真值):
| 类型 | 假值 |
|---|---|
| 数字 | 0、0.0 |
| 字符串 | '' |
| 容器 | []、()、{}、set() |
| 特殊 | None、False |
已经给你定义了 score = 75。
请用 if / else 判断:
score >= 60:print('及格')print('不及格')输出应该是:
及格
if 后面要冒号,下一行缩进 4 个空格
完整代码:
score = 75
if score >= 60:
print('及格')
else:
print('不及格')
有些时候判断不止两个分支,比如成绩既要分及格不及格,还要细分优秀、良好。
这时候用 elif:
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……例子:
results = 89
if results > 90:
print('优秀')
elif results > 80:
print('良好')
elif results > 60:
print('及格')
else:
print('不及格')输出:
良好
要求 java 和 python 两科都 > 80 才算优秀,怎么写?
用 and(与) 和 or(或):
or 表示两个条件有一个成立就 Trueand 表示两个都成立才 Truejava = 86
python = 68
if java > 80 and python > 80:
print('优秀')
else:
print('不优秀')
if (java >= 80 and java < 90) or (python >= 80 and python < 90):
print('良好')输出:
不优秀
良好
💡 复杂条件用括号
()把要先算的部分括起来,可读性最重要。
已经给你定义了 score = 85。
请用 if / elif / else 按下面的规则打印等级:
>= 90:'优秀'>= 80:'良好'>= 60:'及格''不及格'输出应该是:
良好
elif 是 else if 的简写
判断从严到松:>= 90 → >= 80 → >= 60 → else
完整代码:
score = 85
if score >= 90:
print('优秀')
elif score >= 80:
print('良好')
elif score >= 60:
print('及格')
else:
print('不及格')
已经给你定义了:
age = 22
has_id = True
请用 and 判断:当 age >= 18 而且 has_id 为 True,打印 '可以进入',否则打印 '谢绝入内'。
输出应该是:
可以进入
两个条件都成立才行:用 and 把它们连起来
has_id 已经是 bool,直接 has_id 即可,不用 has_id == True
完整代码:
age = 22
has_id = True
if age >= 18 and has_id:
print('可以进入')
else:
print('谢绝入内')
各位童鞋,如果你用的是 Python 3.10 或者更新的版本,那么除了 if / elif / else 之外,还多了一个更直观的家伙—— match / case,叫做「结构化模式匹配」(structural pattern matching)。
我们先看一个需求,假设水哥想根据后台返回的「指令字符串」做不同的事情:
command = 'start'
if command == 'start':
print('启动')
elif command == 'stop':
print('停止')
elif command == 'pause':
print('暂停')
else:
print('未知指令')这样写没毛病,但是当分支多起来,一长串 elif 就显得啰嗦。我们用 match / case 重写:
command = 'start'
match command:
case 'start':
print('启动')
case 'stop':
print('停止')
case 'pause':
print('暂停')
case _:
print('未知指令')case _ 就是兜底分支,相当于 else,下划线 _ 是个通配符。
它不只是值比较——还能匹配数据的「形状」并把变量解包出来:
point = [10, 20]
match point:
case [0, 0]:
print('原点')
case [x, 0]:
print(f'在 x 轴上,x = {x}')
case [0, y]:
print(f'在 y 轴上,y = {y}')
case [x, y]:
print(f'普通点,x = {x},y = {y}')
case _:
print('不是二维坐标')输出:
普通点,x = 10,y = 20
也能匹配 dict:
response = {'status': 'ok', 'data': [1, 2, 3]}
match response:
case {'status': 'ok', 'data': data}:
print(f'成功,拿到数据 {data}')
case {'status': 'error', 'message': msg}:
print(f'失败:{msg}')
case _:
print('未知响应')💡
match / case不是用来取代if / elif。简单的值比较,写if反而更清楚;只有当你要根据「数据的结构」来分发逻辑时(如解析 JSON / 处理 AST),它才能真正发挥威力。
已经给你定义了 command = 'pause'。
请用 match / case 按下面规则 print:
'start' → '启动''stop' → '停止''pause' → '暂停''未知指令'输出应该是:
暂停
match 后面是要匹配的变量;每个 case 后面是要匹配的值(match 语法需要 Python 3.10+,这里的运行环境是 3.12,放心用)
case _ 是兜底,相当于 else
完整代码:
command = 'pause'
match command:
case 'start':
print('启动')
case 'stop':
print('停止')
case 'pause':
print('暂停')
case _:
print('未知指令')
for 循环的基本语法:
for 变量 in 可迭代对象:
循环体可迭代对象就是「可以一个一个拿出来」的东西——字符串、list、tuple、dict、set 都可以。
例子:
for letter in 'Hello':
print(letter)输出:
H
e
l
l
o
遍历 dict 默认拿到的是 key:
d = {'一点水': '小学生', '两点水': '初中生'}
for k in d:
print(k)输出:
一点水
两点水
for i in range(3):
print(i)输出:
0
1
2
range(x) 生成 0 到 x-1 的整数序列(左闭右开)。
range(a, b) 生成 a 到 b-1:
for i in range(2, 5):
print(i)
# 2 3 4range(a, b, step) 加上步长:
for i in range(0, 10, 2):
print(i)
# 0 2 4 6 8用 for 循环加 range 算 1 到 10 的和(包含 10),赋给变量 total,然后 print(total)。
输出应该是:
55
range(1, 11) 生成 1 到 10(左闭右开,要写 11 才包含 10)
在循环里累加:total = total + n
完整代码:
total = 0
for n in range(1, 11):
total = total + n
print(total)
while 循环就是「条件为真时一直跑」:
while 条件:
循环体经典例子——计算 1 到 100 所有整数的和:
count = 1
total = 0
while count <= 100:
total = total + count
count = count + 1
print(total)输出:
5050
简单的「跑 N 次」用 for + range;条件型的循环用 while。
用 while 循环从 5 倒数到 1(含 1),每个数 print 一行。
输出应该是:
5
4
3
2
1
条件:while n >= 1
循环体里要 n = n - 1,否则会死循环
完整代码:
n = 5
while n >= 1:
print(n)
n = n - 1
光有循环还不够,有时候需要在循环中途跳出或者跳过:
| 语句 | 作用 |
|---|---|
break | 立刻跳出整个循环 |
continue | 跳过本次循环剩下的代码,进入下一次 |
例子——累加 1+2+3+...,一旦总和超过 1000 就停下来:
total = 0
for n in range(1, 1000):
total = total + n
if total > 1000:
break
print(total)输出:
1035
break 让循环立刻结束,不再继续往后跑。
例子——统计 1 到 10 中奇数的和(偶数跳过):
total = 0
for n in range(1, 11):
if n % 2 == 0:
continue # 偶数:跳过下面的累加,直接进入下一轮
total = total + n
print(total)输出:
25
1+3+5+7+9 = 25 ✓
循环可以嵌套——一个 for 里再写一个 for / while。break / continue 只对最近的那一层循环生效。
for i in range(3):
for j in range(3):
if j == 2:
break # 只跳出 j 那层
print(i, j)输出:
0 0
0 1
1 0
1 1
2 0
2 1
用 for + range 遍历 1 到 10。遇到偶数用 continue 跳过,把奇数加起来赋给 total,最后 print(total)。
输出应该是:
25
(1 + 3 + 5 + 7 + 9 = 25)
n % 2 == 0 表示 n 是偶数(除以 2 余 0)
continue 让本次循环到此为止,进入下一轮
完整代码:
total = 0
for n in range(1, 11):
if n % 2 == 0:
continue
total = total + n
print(total)
读完了?动手练一遍才算真会。
去闯关模式练习 →