如果一个程序只能从头到尾按顺序一行行运行,那么它就无法应对现实生活中的各种复杂情况。
例如:
让程序根据条件做出“选择”,或者重复执行某项任务的机制,在编程中被称为控制流 (Control Flow)。本章将带你掌握 Python 中最核心的控制流工具:条件判断 (if) 与 循环结构 (for / while)。
完成本章学习后,你将能够:
理解 Python 依靠缩进区分代码块的作用域规则;
熟练编写 if-elif-else 条件分支判断程序;
掌握 for 循环与 range() 函数,对序列数据或固定次数进行遍历;
掌握 while 条件循环,并学会避免死循环;
灵活运用 break 与 continue 关键字控制循环中断与跳过;
掌握列表推导式的极简语法,提升代码编写效率。
在学习条件判断和循环之前,必须首先理解 Python 最独特、最重要的语法特性 —— 强制缩进 (Indentation)。
在 C/C++ 或 Java 等语言中,大括号 { } 用于包裹属于同一个分支的代码块。而在 Python 中,取消了所有大括号,完全使用空格缩进来表示代码块的层级与归属关系。
: 结尾的行(如 if、else、for、while),下一行必须缩进,标志着一个新的代码块开启;score = 85
if score >= 60:
# 属于 if 分支的代码块,缩进 4 个空格
print("考试通过!")
print("恭喜你!")
# 恢复顶格书写,代表 if 分支结束,属于主程序
print("程序运行完毕。")
在 Python 中,缩进不仅仅是为了排版美观,更是语法的一部分。缩进决定了一行代码究竟属于哪一个分支或哪一层循环。
条件判断语句允许程序根据条件的真假 (True 或 False) 执行不同的代码分支。
# 1. 单分支结构:只有当条件满足时才执行
age = 20
if age >= 18:
print("您已成年。")
# 2. 双分支结构:非此即彼的选择
is_vip = False
if is_vip:
print("欢迎尊贵的 VIP 用户!")
else:
print("欢迎普通用户!")
当需要处理三种或三种以上的不同情况时,使用 elif(else if 的缩写)连接多个判断条件:
score = 82
if score >= 90:
grade = "优秀 (A)"
elif score >= 80:
grade = "良好 (B)"
elif score >= 60:
grade = "合格 (C)"
else:
grade = "不合格 (D)"
print(f"您的成绩等级为: {grade}")
Python 会从上到下依次评估条件:
if 或 elif 的条件评估为 True,系统会立刻执行该分支下的代码块,并跳过后续所有的 elif 和 else 分支;False 时,才会执行最终的 else 分支。React Flow Animation
React Flow 管理节点与连线;切换下一步时,当前连线会流动。
取得分数,准备进入第一个条件判断。
当需要重复执行一段代码固定次数,或者遍历一串数据时,首选 for 循环。
for 循环可以依次取出容器中的每一个元素:
for letter in "Python":
print(f"当前字符: {letter}")
range() 函数生成数字序列内置函数 range() 用于快速生成连续的整数序列,常与 for 循环配合使用:
range(stop):从 0 开始,到 stop - 1 结束(包头不包尾)。例如 range(5) 生成 0, 1, 2, 3, 4;range(start, stop):从 start 开始,到 stop - 1 结束。例如 range(1, 6) 生成 1, 2, 3, 4, 5;range(start, stop, step):指定步长 step。例如 range(1, 10, 2) 生成奇数 1, 3, 5, 7, 9。# 案例:计算 1 到 100 的累加和
total_sum = 0
for i in range(1, 101):
total_sum += i # 等价于 total_sum = total_sum + i
print(f"1 到 100 的累加和为: {total_sum}") # 输出 5050
计算示例:推演 range(1, 10, 2) 生成奇数并求和的过程
range(1, 10, 2) 从 开始,每次步长加 ,不超过 ,生成的数字依次为 [1, 3, 5, 7, 9](共 次循环迭代);total_sum = 0 + 1 = 1;total_sum = 1 + 3 = 4;total_sum = 4 + 5 = 9;total_sum = 9 + 7 = 16;total_sum = 16 + 9 = 25;while 循环会在给定的条件持续为 True 时,反复执行代码块。
# 案例:倒计时发射
count = 5
while count > 0:
print(f"倒计时: {count}")
count -= 1 # 每次循环将计数器减 1
print("发射!")
演示 for 循环遍历 range(1, 6) 序列,计算 1 到 5 累加和的整个过程。
如果在 while 循环体内部忘记更新循环变量,导致判断条件永远为 True,就会触发死循环,导致程序卡死:
# 错误示范:忘记更新 count,会无限打印 1
# count = 1
# while count <= 5:
# print(count)
# (缺少 count += 1,引发死循环)
防范建议:使用
while循环时,必须确保循环体内存在能够让条件最终变为False的修改动作,或者使用break语句中断。
在循环执行过程中,有时需要提前打断循环或跳过部分步骤。
break:强制终止并跳出循环break 关键字用于立刻终止当前整个循环,直接跳出循环体执行后续代码:
# 查找第一个能被 7 整除的数字
for num in range(10, 50):
if num % 7 == 0:
print(f"找到了第一个能被 7 整除的数: {num}")
break # 找到后立刻终止整个循环
continue:跳过本次循环剩余代码continue 关键字用于跳过本次循环后半部分的未执行代码,直接开始下一次循环:
# 打印 1 到 5 之间的数字,但跳过数字 3
for i in range(1, 6):
if i == 3:
continue # 跳过 3,不执行后续的 print
print(f"数字: {i}")
# 输出结果为: 1, 2, 4, 5
| 关键字 | 核心作用 | 直观比喻 |
|---|---|---|
break | 彻底终止并跳出当前层级的整个循环 | 跑步比赛中突然受伤,直接退赛 |
continue | 跳过本次循环剩余代码,直接进入下一次 | 跑步比赛中掉落鞋子,跳过该圈直接跑下一圈 |
在 Python 中,有一种非常优雅且高效的方式可以快速创建列表,这就是列表推导式。
对比传统 for 循环与列表推导式:生成 0 到 4 的平方数列表。
# 方法一:传统的 for 循环写法
squares1 = []
for x in range(5):
squares1.append(x ** 2)
# 方法二:一行列表推导式写法(推荐)
squares2 = [x ** 2 for x in range(5)]
print(squares2) # 输出: [0, 1, 4, 9, 16]
请在下方的代码块中,点击 “运行代码”,体验双重 for 循环与条件筛选:
| 错误现象 / 异常类型 | 常见原因 | 标准排查与处理方式 |
|---|---|---|
IndentationError: expected an indented block | 冒号 : 后面的一行代码忘记写缩进 | 在冒号下一行按 Tab 或手动输入 4 个空格增加缩进 |
IndentationError: unindent does not match... | 同一个代码块内混用了 Tab 与空格,或缩进空格数不一致 | 统一设置编辑器将 Tab 转换为 4 个空格;确保同一作用域缩进对齐 |
SyntaxError: invalid syntax | 在 if、elif、else、for 或 while 行末遗漏了冒号 : | 检查控制流结构行末,补齐英文冒号 : |
| 程序死锁 / 运行框一直显示运行中 | while 循环未更新条件变量引发了死循环 | 在代码框中断运行;检查 while 内部的变量更新逻辑 |
if-elif-else 编写多分支条件判断程序;range(1, 6) 会生成数字 1 到 5(包头不包尾);while 循环中正确更新循环计数器,避免死循环;break(退赛)与 continue(跳过本圈)的不同作用;[x * 2 for x in range(5)] 列表推导式的极简语法。共 4 道精选测试题 · 答题进度已自动保存
恭喜你掌握了程序逻辑的核心:条件判断与循环控制!
下一步我们将深入学习 04. 组合数据类型,掌握列表 (list)、元组 (tuple)、字典 (dict) 与集合 (set) 四大容器,学会如何高效地组织和管理海量数据。