Flow Control --- if else / Loops
一、为什么要 Flow Control?
一句话:
让程序“做判断 + 重复执行 + 在条件满足时退出”
三大件:
-
if / elif / else—— 判断 -
for / while—— 循环 -
break / continue / pass—— 控制循环行为
二、if / elif / else(条件判断)
✅ 基本结构
if condition: do_A elif condition2: do_B else: do_C
⚠️ 关键规则(考试很爱)
-
缩进就是逻辑!
-
条件必须是 True / False
-
elif可以有 多个 -
else只能一个,可省略
🔹 条件表达式
x > 0 x == 0 x != 0 x >= 3 and x <= 10 x in [1, 2, 3]
❌ 新手常错
if x = 3: # ❌
✔ 正确:
if x == 3:
三、for 循环(最重要)
✅ 基本形式
for i in iterable: do_something
常见 iterable:
-
range() -
list -
tuple -
string
1️⃣ range()(必考)
range(start, stop, step)
例子:
for i in range(0, 5): print(i)
输出:
0 1 2 3 4
⚠️ stop 不包含!
2️⃣ 累加 / 累乘模板(考试常见)
求和
total = 0 for i in range(1, 6): total += i
求积
product = 1 for i in range(1, 6): product *= i
3️⃣ 遍历容器
nums = [1, 3, 5] for n in nums: print(n)
*for 循环|延伸讲解(进阶心法)
一、for 循环的本质(非常重要)
1️⃣ 本质一句话
for 循环不是“数数”,而是“遍历 iterable”
for x in iterable: ...
Python 在干什么?
-
向
iterable要一个 迭代器 -
每次
next()拿一个元素 -
拿不到了 → 循环结束
📌 所以:
-
能被
for用的东西 → iterable -
不是只有
range
二、range() 的深层理解(考试高频)
2.1 为什么 range 不包含终点?
range(a, b)
👉 实际生成的是:
a, a+1, a+2, ..., b-1
📌 好处:
-
长度 =
b - a -
数学区间对齐
-
不会 off-by-one
2.2 range + 负步长
for i in range(10, 0, -2): print(i)
输出:
10 8 6 4 2
⚠️ 规则:
-
step > 0 → start < stop
-
step < 0 → start > stop
三、for 循环 vs while(什么时候该用谁)
| 场景 | 用谁 | 原因 |
|---|---|---|
| 知道循环次数 | for | 清晰、少 bug |
| 不知道次数,只知道条件 | while | 条件驱动 |
| 数值迭代(Newton) | while | tol 控制 |
| 遍历数组 | for | 天生适配 |
📌 考试偏爱 for,数值方法偏爱 while
四、嵌套 for 的“视觉拆解法”(关键)
你看到这个别慌:
for i in range(3): for j in range(2): print(i, j)
正确眼神 👇
-
先固定 i
-
j 跑完整个 range
-
i 才 +1
脑中画表格:
| i | j |
|---|---|
| 0 | 0 |
| 0 | 1 |
| 1 | 0 |
| 1 | 1 |
| 2 | 0 |
| 2 | 1 |
五、for + 条件(筛选器思维)
for x in range(10): if x % 2 == 0: print(x)
📌 关键:
-
for:提供候选
-
if:筛选
👉 很多题就是在考你这点
六、enumerate() —— for 的“外挂”(你会很常用)
为什么需要它?
nums = [10, 20, 30]
❌ 不推荐:
for i in range(len(nums)): print(i, nums[i])
✅ 正确:
for idx, value in enumerate(nums): print(idx, value)
📌 enumerate = “给 iterable 自动编号”
七、for + 累积变量(工程 / 数值方法核心)
经典模板(必须肌肉记忆)
求和
total = 0 for x in data: total += x
最大值
max_val = data[0] for x in data: if x > max_val: max_val = x
📌 你在 CFD / 数据处理 / Lab report 里会天天用
八、for 循环里的“危险操作”
❌ 在循环中改 iterable
nums = [1, 2, 3] for x in nums: nums.remove(x) # ❌
会出 bug(跳元素)
❌ 忘记缩进层级
for i in range(5): print(i) # ❌
九、for 循环与数值方法的联系(你学过的)
二分法(思想)
for n in range(max_iter): c = (a + b)/2 if abs(f(c)) < tol: break
📌 for:
-
控制 最大迭代次数
-
break:满足 tol 直接停
十、for 循环“看题三步法”(考试救命)
你看到 for,立刻问自己:
1️⃣ iterable 是啥?
2️⃣ 跑多少次?
3️⃣ 循环体有没有修改外部变量?
99% 的题都能解。
四、while 循环(条件驱动)
✅ 基本结构
while condition: do_something
例子:
x = 0 while x < 5: print(x) x += 1
⚠️ 超级重点
一定要改变条件变量!
否则:
while True: print("死循环 😇")
五、break / continue / pass
1️⃣ break —— 直接跳出循环
for i in range(10): if i == 5: break print(i)
输出:
0 1 2 3 4
2️⃣ continue —— 跳过本次循环
for i in range(5): if i == 2: continue print(i)
输出:
0 1 3 4
3️⃣ pass —— 占位(啥也不做)
if x > 0: pass
📌 只在语法需要但逻辑未写时用
六、嵌套循环(Nested Loop)
for i in range(3): for j in range(2): print(i, j)
执行顺序:
👉 外层一次,内层跑完一整轮
七、常见考试题套路
🔥 1️⃣ 预测输出(最爱考)
x = 0 for i in range(3): x += i print(x)
答案:
3
🔥 2️⃣ 循环次数判断
for i in range(2, 10, 3): print(i)
输出:
2 5 8
🔥 3️⃣ break vs continue 区别题
👉 break:结束循环
👉 continue:跳过一次
八、Enumerating the sequece (枚举序列)
1️⃣ 这部分到底在干嘛?
一句话:
在 for 循环中:同时拿“位置 + 元素本身”
也就是:
👉 我不仅要值,还要它是第几个
2️⃣ 没有 enumerate 的“土办法”(不推荐)
nums = [10, 20, 30] for i in range(len(nums)): print(i, nums[i])
问题:
-
啰嗦
-
易错
-
Python 不推荐
3️⃣ 正确做法:enumerate()(重点)
nums = [10, 20, 30] for index, value in enumerate(nums): print(index, value)
输出:
0 10 1 20 2 30
📌 enumerate = 给序列自动编号
4️⃣ enumerate 的本质(你该怎么“看”)
enumerate(nums)
等价于:
(0, nums[0]), (1, nums[1]), (2, nums[2])
👉 所以:
for index, value in enumerate(nums):
是在 “解包 tuple”
5️⃣ 改起始编号(容易被忽略)
for i, v in enumerate(nums, start=1): print(i, v)
输出:
1 10 2 20 3 30
⚠️ 考试爱阴你这一点
6️⃣ enumerate 的典型使用场景(记这 3 个)
✅ 1. 需要 index 做判断
for i, x in enumerate(data): if i % 2 == 0: print(x)
✅ 2. 同时修改列表(安全方式)
for i, x in enumerate(nums): nums[i] = x * 2
✅ 3. 数值方法 / 误差记录
for n, err in enumerate(errors): print(f"Iter {n}: error = {err}")
九、 More loops(更多循环技巧)
这部分其实是 for 循环的“组合技”
一、嵌套循环(Nested loops)
for i in range(3): for j in range(2): print(i, j)
正确眼神 👀
-
外层 i 动一次
-
内层 j 跑完一整轮
输出顺序:
(0,0) (0,1) (1,0) (1,1) (2,0) (2,1)
📌 本质:双重遍历
二、并行遍历:zip()(More loops 常见)
a = [1, 2, 3] b = [4, 5, 6] for x, y in zip(a, b): print(x, y)
输出:
1 4 2 5 3 6
⚠️ zip 规则:
-
走 最短序列
-
不会报错
三、for + else(很容易被忽略)
for x in range(5): if x == 10: break else: print("循环正常结束")
会输出:
循环正常结束
📌 规则:
-
没有 break → 执行 else
-
有 break → 不执行 else
四、循环控制总结表
| 关键字 | 作用 |
|---|---|
break | 直接跳出循环 |
continue | 跳过本轮 |
pass | 占位 |
五、More loops 的考试套路
🔥 1️⃣ enumerate + for
for i, x in enumerate([3, 6, 9]): print(i * x)
输出:
0 6 18
🔥 2️⃣ zip + for
a = [1, 2] b = [10, 20] for x, y in zip(a, b): print(x + y)
输出:
11 22
十 、 List Comprehension(列表推导式)
一句话版本(先刻进脑子)
List Comprehension = 用一行 for + if,生成一个新列表
它是:
-
for 循环
-
if 条件
-
append
的 浓缩形态
一、最基础结构(100%要会)
[expression for item in iterable]
等价于 👇
result = [] for item in iterable: result.append(expression)
二、最简单例子(先别想太多)
例 1:平方
squares = [x**2 for x in range(5)]
等价于:
squares = [] for x in range(5): squares.append(x**2)
输出:
[0, 1, 4, 9, 16]
三、带条件的 List Comprehension(重点)
[x for x in range(10) if x % 2 == 0]
输出:
[0, 2, 4, 6, 8]
结构眼神 👀
[ 做什么 for 谁 在哪里 如果满足条件 ]
四、List Comprehension ≠ for + if(容易混)
⚠️ if 的位置决定含义
1️⃣ 过滤(最常见)
[x for x in nums if x > 0]
👉 先判断,再加入
2️⃣ 条件表达式(进阶,少考)
[x if x > 0 else 0 for x in nums]
👉 每个元素都进来,只是值不同
五、嵌套 List Comprehension(More loops + LC)
[(i, j) for i in range(2) for j in range(3)]
等价于:
result = [] for i in range(2): for j in range(3): result.append((i, j))
输出:
[(0,0), (0,1), (0,2), (1,0), (1,1), (1,2)]
📌 for 顺序 = 嵌套顺序(左慢右快)
六、enumerate + List Comprehension(Notebook 常见)
[(i, x) for i, x in enumerate([10, 20, 30])]
输出:
[(0, 10), (1, 20), (2, 30)]
七、zip + List Comprehension
[x + y for x, y in zip([1,2,3], [4,5,6])]
输出:
[5, 7, 9]
八、List Comprehension 的“使用原则”(很重要)
✅ 什么时候用
-
逻辑 一眼能看懂
-
一层 for(最多两层)
-
简单条件
❌ 什么时候别用
-
嵌套三层以上
-
逻辑复杂
-
需要 debug
👉 可读性 > 炫技
九、考试 & 笔记高频套路
🔥 预测输出题
[x*2 for x in range(4) if x != 2]
输出:
[0, 2, 6]
🔥 错误识别题
[x for x in range(5) if x > 2 else 0]
❌ 语法错误
✔ 正确:
[x if x > 2 else 0 for x in range(5)]
十、和你数值方法 / 工程的联系
errors = [abs(x_new - x_old) for x_old, x_new in zip(xs[:-1], xs[1:])]
本文地址:https://www.yitenyun.com/5156.html








