完整讲解 · 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 |
有些时候判断不止两个分支,比如成绩既要分及格不及格,还要细分优秀、良好。
这时候用 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('良好')输出:
不优秀
良好
💡 复杂条件用括号
()把要先算的部分括起来,可读性最重要。
各位童鞋,如果你用的是 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),它才能真正发挥威力。
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 8while 循环就是「条件为真时一直跑」:
while 条件:
循环体经典例子——计算 1 到 100 所有整数的和:
count = 1
total = 0
while count <= 100:
total = total + count
count = count + 1
print(total)输出:
5050
简单的「跑 N 次」用 for + range;条件型的循环用 while。
光有循环还不够,有时候需要在循环中途跳出或者跳过:
| 语句 | 作用 |
|---|---|
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
读完了?动手练一遍才算真会。
去闯关模式练习 →