前言
前两章解决了两个基础问题:
- 第 1 章:Python 代码怎么运行
- 第 2 章:Python 里有哪些基础数据类型
这一章开始进入"程序为什么会按某种顺序执行"。
所谓流程控制,就是你要告诉程序:
- 什么时候执行这段代码
- 什么时候跳过这段代码
- 什么时候重复执行一段代码
- 什么时候提前结束
如果没有流程控制,程序就只能机械地从上往下一行一行执行,几乎做不了真实任务。
这一章是后面函数、文件处理、接口调用、自动化脚本的基础,因为几乎所有程序都会用到:
- 条件判断
- 循环
- 跳出循环
- 跳过某次循环
- 把多步规则翻译成代码
本章目标
学完后你至少应该能做到:
- 能使用
if / elif / else写条件判断 - 能用
for遍历列表、字符串、范围序列 - 能用
while表达"满足条件就重复执行" - 理解
break、continue、pass的区别 - 能读懂和写出基础的列表推导式
- 能把自然语言步骤翻译成清晰的代码流程
1. 什么是流程控制
可以把程序先想成一条默认路线:
python
print("第一步")
print("第二步")
print("第三步")
这段代码没有任何分支和重复,所以它每次都会按固定顺序执行。
但现实任务通常不是这样简单。
例如:
- 如果年龄满 18 岁,就允许注册
- 如果库存不足,就提示缺货
- 把 100 个用户逐个处理
- 一直重试,直到成功为止
这类需求都离不开流程控制。
2. if / elif / else 条件判断
条件判断的核心问题是:
- 如果条件成立,执行什么
- 如果条件不成立,执行什么
最基础的写法:
python
age = 20
if age >= 18:
print("你已经成年。")
这里:
if表示"如果"age >= 18是条件表达式- 条件为
True时,缩进代码块会执行
缩进非常重要
Python 不用大括号来表示代码块,而是靠缩进。
例如:
python
age = 20
if age >= 18:
print("成年")
print("可以继续下一步")
print("这行不在 if 里面")
前两行 print 在 if 代码块里,最后一行不在里面。
if / else
python
age = 16
if age >= 18:
print("允许注册")
else:
print("未成年,暂不允许注册")
含义是:
- 条件成立,执行
if - 条件不成立,执行
else
if / elif / else
当情况不止两种时,用 elif:
python
score = 85
if score >= 90:
print("优秀")
elif score >= 60:
print("及格")
else:
print("不及格")
执行顺序要注意:
- Python 会从上到下依次判断
- 只要某个分支已经命中,后面的分支就不会再执行
所以顺序很重要。范围大的条件放前面,可能会挡住后面的更精确判断。
错误示例:
python
score = 95
if score >= 60:
print("及格")
elif score >= 90:
print("优秀")
这里 score = 95 会先命中 score >= 60,导致"优秀"分支永远进不去。
3. 条件表达式的常见写法
条件里最常见的是比较运算和逻辑运算。
例如:
python
temperature = 28
is_raining = False
if temperature >= 26 and not is_raining:
print("适合出门")
这表示:
- 温度至少 26 度
- 并且没有下雨
你也可以判断成员是否存在:
python
tags = {"python", "ai", "agent"}
if "python" in tags:
print("包含 python 标签")
4. for 循环
for 用来遍历一个可迭代对象。入门阶段可以先理解成:
- 把一组数据一个一个拿出来处理
遍历列表
python
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
执行过程可以理解为:
- 第一次,
fruit是"apple" - 第二次,
fruit是"banana" - 第三次,
fruit是"orange"
遍历字符串
python
for char in "Python":
print(char)
字符串也可以一个字符一个字符地遍历。
配合 range()
range() 经常用于"按次数循环":
python
for i in range(5):
print(i)
输出是:
python
0
1
2
3
4
要注意:
range(5)不包含5- 它表示从
0开始,到5之前结束
更完整的写法:
python
for i in range(1, 6):
print(i)
这里会输出 1 到 5。
5. while 循环
while 的意思是:
- 只要条件为真,就一直执行
例如:
python
count = 1
while count <= 3:
print(count)
count += 1
这个例子里最重要的一点是:
- 循环变量必须发生变化
如果你忘了修改 count,就可能写出死循环。
错误示例:
python
count = 1
while count <= 3:
print(count)
这会一直输出 1,因为 count 永远没变。
6. break、continue、pass 的区别
这三个关键字初学者很容易混在一起,但它们作用完全不同。
break
break 表示立即结束当前循环。
python
for number in range(1, 10):
if number == 5:
break
print(number)
输出会是:
python
1
2
3
4
因为当 number == 5 时,循环直接结束了。
continue
continue 表示跳过当前这一次,继续下一次循环。
python
for number in range(1, 6):
if number == 3:
continue
print(number)
输出是:
python
1
2
4
5
因为 3 这一次被跳过了,但循环没有结束。
pass
pass 表示"先占一个位置,暂时什么都不做"。
python
if True:
pass
它最常见的用途是:
- 你还没写完逻辑
- 语法上又必须先放一个代码块
7. for 和 while 什么时候用
可以先用最朴素的判断标准:
- 已经知道要循环多少次,或者要遍历一组现成数据:优先
for - 不确定循环几次,只知道"条件满足就继续":优先
while
例如:
- 遍历学生列表:
for - 重试登录直到成功:
while
入门阶段最常见的问题不是"完全不会写",而是明明适合 for,却硬用 while,结果代码又长又容易错。
8. 列表推导式
列表推导式是 Python 里非常常见的一种简洁写法,用来基于已有数据快速生成新列表。
最基础的例子:
python
numbers = [1, 2, 3, 4]
squares = [number * number for number in numbers]
print(squares)
你可以先把它翻译成自然语言:
- 从
numbers里一个一个拿出number - 把每个
number平方 - 把结果组成一个新列表
它等价于更展开的写法:
python
numbers = [1, 2, 3, 4]
squares = []
for number in numbers:
squares.append(number * number)
带条件的列表推导式
python
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [number for number in numbers if number % 2 == 0]
含义是:
- 遍历
numbers - 只保留偶数
入门阶段的建议是:
- 先会写普通
for - 再学列表推导式
- 如果推导式太长、太绕,就宁可写回普通循环
9. 示例 1:条件判断与循环控制
文件:examples/condition_and_loops_demo.py
python
# 条件判断与循环控制示例
temperature = 31
is_raining = False
print("=== 条件判断 ===")
if temperature >= 30 and not is_raining:
print("天气较热且没下雨,适合去买冷饮。")
elif temperature >= 30 and is_raining:
print("天气较热但在下雨,出门记得带伞。")
else:
print("天气不算太热,可以正常安排。")
print("=== for 遍历列表示例 ===")
tasks = ["阅读文档", "运行示例", "做练习"]
for task in tasks:
print(f"当前任务:{task}")
print("=== for + range 按次数循环 ===")
for step in range(1, 4):
print(f"第 {step} 步")
print("=== while 循环 ===")
count = 1
while count <= 3:
print(f"while 第 {count} 次")
count += 1
print("=== break 与 continue ===")
for number in range(1, 8):
if number == 2:
print("遇到 2,跳过这次输出。")
continue
if number == 6:
print("遇到 6,结束循环。")
break
print(f"当前数字:{number}")
print("=== pass 示例 ===")
for item in ["A", "B", "C"]:
if item == "B":
pass
print(f"处理项目:{item}")
代码说明
开头的温度判断:
if / elif / else用来表达多分支逻辑- 条件里组合了比较运算和逻辑运算
- 你可以把它理解成"根据不同情况走不同分支"
任务列表遍历:
for task in tasks表示把列表中的元素逐个取出- 每一轮循环,
task都会变成当前元素
for step in range(1, 4):
- 演示按次数循环
- 这里会输出
1、2、3
while count <= 3:
- 演示基于条件的重复执行
count += 1非常关键,否则循环不会结束
break 和 continue:
- 遇到
2时跳过当前轮次,但循环继续 - 遇到
6时直接终止整个循环
pass 示例:
- 这里只是演示语法本身
- 它不做任何事,只是占位
10. 示例 2:列表推导式与流程拆解
文件:examples/comprehension_demo.py
python
# 列表推导式与流程拆解示例
scores = [56, 72, 89, 91, 64, 100]
print("=== 普通 for 循环筛选及格分 ===")
passed_scores = []
for score in scores:
if score >= 60:
passed_scores.append(score)
print(f"及格分列表:{passed_scores}")
print("=== 列表推导式筛选及格分 ===")
passed_scores_v2 = [score for score in scores if score >= 60]
print(f"及格分列表:{passed_scores_v2}")
print("=== 列表推导式生成等级标签 ===")
grade_labels = ["优秀" if score >= 90 else "合格" for score in scores]
print(f"等级标签:{grade_labels}")
print("=== 流程拆解示例 ===")
for score in scores:
if score >= 90:
print(f"{score} 分:优秀")
elif score >= 60:
print(f"{score} 分:及格")
else:
print(f"{score} 分:不及格")
代码说明
第一段普通 for 循环:
- 先创建一个空列表
passed_scores - 遍历原始成绩列表
- 如果成绩大于等于 60,就追加到新列表
第二段列表推导式:
- 用一行表达了和上面相同的逻辑
- 这是 Python 中很常见的简洁写法
第三段生成等级标签:
- 结合了条件表达式和列表推导式
- 给每个成绩生成一个对应标签
最后一段流程拆解:
- 演示如何把"成绩分类规则"翻译成清晰的多分支结构
- 这是从自然语言走向代码的重要练习方式
11. 怎么把自然语言翻译成代码流程
这是流程控制真正的核心能力。
例如需求是:
"遍历一组成绩。90 分及以上输出优秀,60 分及以上输出及格,否则输出不及格。"
可以拆成三步:
- 先把所有成绩一个一个拿出来
- 对每个成绩做条件判断
- 根据不同结果输出不同内容
对应代码就是:
python
for score in scores:
if score >= 90:
print("优秀")
elif score >= 60:
print("及格")
else:
print("不及格")
入门阶段建议你养成这个习惯:
- 先写中文步骤
- 再写伪代码
- 最后再写正式 Python 代码
这样会比直接盯着空白编辑器硬写稳很多。
12. 常见错误
缩进错误
Python 对缩进非常敏感。下面这种就会有问题:
python
if True:
print("hello")
if 下面的代码块必须正确缩进。
条件顺序写错
python
score = 95
if score >= 60:
print("及格")
elif score >= 90:
print("优秀")
这里顺序错误,会导致高分先被较宽的条件吃掉。
while 忘记更新变量
python
count = 1
while count <= 3:
print(count)
这会导致死循环。
混淆 break 和 continue
break:结束整个循环continue:跳过当前这一次,继续下一次
13. 本章总结
这一章你要真正掌握的是:
- 条件判断是在不同情况之间做分支选择
for适合遍历一组现成数据while适合"条件满足就持续执行"的场景break、continue、pass各自含义不同- 列表推导式本质上是对普通循环的简洁表达
- 好的流程控制代码不是"写出来了",而是别人也能顺着逻辑读懂
如果这些内容已经顺手,下一章进入函数与模块化时,你就能开始把"会写流程"升级成"会组织代码结构"。