02 流程控制:条件判断、模式匹配与循环
学习方式:对照黑马 Python+AI 讲义第 2 章第 2 节(流程控制语句)边看边敲,代码验证文件 02.py。已有 C++/Java 基础,重点记录 Python 与它们的写法差异。
一、if 条件判断
1.1 if…else 基本用法
1 2 3 4 5
| a = 17 if a >= 18: print('你已经成年') else: print('你未成年')
|
条件不需要括号(C++/Java 需要 if (a >= 18)),代码块靠缩进区分,没有大括号,也没有分号。
1.2 if…elif…else 多分支
1 2 3 4 5 6 7
| a = -5 if a > 0: print("a>0") elif a == 0: print("a==0") else: print("a<0")
|
Python 没有 else if,多分支用 elif。执行顺序从上到下,满足第一个分支就不再往下判断,else 放最后兜底。
1.3 语法要点与坑
- 缩进是语法不是风格:同一代码块缩进必须一致,混用 Tab 和空格直接报错。
- 条件不用加括号,组合条件用
and/or(不是 &&/||)。
- 多分支顺序很重要:成绩等级这类要先写高分条件再写低分,顺序反了会提前命中。
- 换行续写用
\:
1 2 3
| if (account == "admin" and password == "666888") or \ (account == "root" and password == "547527"): print("登录成功")
|
二、match 模式匹配(Python 3.10+)
针对同一个变量的多个固定值分支,比 if-elif 简洁。case 值1 | 值2 表示或,case _ 是默认兜底:
1 2 3 4 5 6 7 8 9 10
| a = 3 match a: case 10: print('10') case 5: print('5') case 2 | 4: print('2|4') case _: print('Error')
|
选择原则:
- 固定值分支(星期、运算符、指令)→
match...case;
- 范围判断、组合条件(
score >= 85)→ if...elif。
三、while 循环
3.1 基本用法与 while…else
1 2 3 4 5 6
| i = 0 while i < 10: print(f'我爱python :{i}') i += 1 else: print("循环结束")
|
- while 靠条件控制是否继续,条件结果必须是布尔。
- 可带
else:循环正常结束(条件变 False)时执行;被 break 跳出则不执行。
- 必须规划终止条件,否则死循环卡死。
3.2 死循环 + break 模式
“直到满足才退出”的标准写法(登录重试、猜数字):
1 2 3 4 5 6 7 8 9 10 11 12
| import random target = random.randint(1, 100)
while True: guess = int(input("请输入你猜的数字:")) if guess == target: print("猜对了") break elif guess > target: print("猜大了") else: print("猜小了")
|
四、for 循环与 range
4.1 遍历机制
for 本质是遍历(对数据集逐个处理),不是 C++ 那种计数循环。遍历字符串:
1 2 3 4 5
| s = 'hello world' for i in s: print(i) else: print("循环结束")
|
4.2 range 生成数字序列
三种写法,都不含结束值。实际运行结果(02.py):
1 2 3 4 5 6 7 8
| for i in range(10): print(i, end=' ')
for i in range(3, 8): print(i, end=' ')
for i in range(3, 10, 2): print(i, end=' ')
|
4.3 while 与 for 怎么选
while:条件满足就一直循环,次数通常未知,关注循环条件。
for:遍历已知数据集或已知次数的循环,关注每个元素。
五、嵌套循环:99 乘法表
用 while 和 for 各写了一遍,{y:>2} 是 f-string 右对齐占 2 位,让输出对齐。
5.1 while 版本(完整运行结果)
1 2 3 4 5 6 7 8 9
| x = 1 while x < 10: y = 1 while y < 10: if x >= y: print(f'{y:>2} *{x:>2}={x*y:>2}', end=" ") y += 1 print() x += 1
|
1 2 3 4 5
| 1 * 1= 1 1 * 2= 2 2 * 2= 4 1 * 3= 3 2 * 3= 6 3 * 3= 9 ... 1 * 9= 9 2 * 9=18 3 * 9=27 ... 9 * 9=81
|
5.2 for 版本(两版写法)
1 2 3 4 5 6 7 8 9 10 11 12
| for x in range(1, 10): for y in range(1, 10): if y <= x: print(f'{y:>2} *{x:>2} = {x*y:>2}', end=' ') print()
for x in range(1, 10): for y in range(1, x + 1): print(f'{y:>2} *{x:>2} = {x*y:>2}', end=' ') print()
|
要点:外层循环控制行(第二个数),内层循环控制列(第一个数);写法二用 range(1, x+1) 天然限定三角范围,比写法一更简洁。
六、补充知识点与易踩坑
6.1 三元表达式
对应 C++ 的 cond ? a : b,Python 写法是 a if cond else b:
1 2 3
| a = 66 s = '好' if a == 67 else '坏' print(s)
|
6.2 enumerate():遍历同时拿索引和值
1 2 3
| a = ['a', 'b', 'c'] for i, x in enumerate(a): print(i, x)
|
6.3 break/continue 与 for-else 的坑
break:结束整个循环;continue:跳过本次进入下一次。
- for-else / while-else 的坑:只有循环”自然跑完”才执行 else,被
break 跳出时 else 不执行:
1 2 3 4 5
| for i in range(5): if i == 3: break else: print("循环正常结束")
|
6.4 短路运算、pass、in
1 2 3 4 5 6 7 8 9 10 11 12 13
| print(0 and "abc") print(1 and "abc") print(0 or "abc")
if a > 100: pass
print("a" in "abc") print(5 in [1, 2, 3])
|
今日总结
| 模块 |
核心要点 |
| if 判断 |
无括号无大括号,缩进即代码块;多分支用 elif;条件组合用 and/or |
| match…case |
3.10+ 新语法,固定值分支专用;case 值|值、case _ 兜底 |
| while 循环 |
条件控制,可带 else(正常结束才执行);死循环用 while True + break |
| for 循环 |
遍历机制不是计数;range(start, end, step) 不含结束值 |
| 嵌套循环 |
外层控制行、内层控制列;内层范围可用外层变量限定(99 乘法表) |
| 补充 |
三元 a if c else b;enumerate 拿索引;break 跳出时 else 不执行;and/or 短路;pass 占位;in 判断 |