Python: 循环结构
最后更新:2026-09-22
写代码时,你经常会遇到这样的场景:重复做同一件事。比如,打印 1 到 100 的数字、处理列表中的每一个元素、或者不断询问用户输入直到得到正确答案。
如果用手写,100 个数字就要写 100 行 print(),显然不现实。这时候就需要 循环 来帮忙了。Python 提供了两种循环方式:
1. for 循环基础
for 循环是 Python 中最常用的循环形式。它的核心思想是:从序列中逐个取出元素,每次都执行一遍相同的代码块。
基本语法:
for 变量 in 序列:
要重复执行的代码
变量会依次被赋值为序列中的每一个元素,然后执行缩进块中的代码。
▶ 示例:遍历列表和字符串(⭐)
▶ 试一试输出:
我喜欢吃 苹果
我喜欢吃 香蕉
我喜欢吃 橙子
我喜欢吃 葡萄
---
P
y
t
h
o
n
fruits,变量就用 fruit;列表是 students,变量就用 student。代码读起来就像自然语言一样顺畅。
2. range() 函数 —— 生成数字序列
当你需要重复执行固定次数时,range() 是最佳搭档。
range() 有三种用法:
| 写法 | 含义 | 示例 | 结果 |
|---|---|---|---|
range(stop) |
0 → stop-1 | range(5) |
0,1,2,3,4 |
range(start, stop) |
start → stop-1 | range(2, 6) |
2,3,4,5 |
range(start, stop, step) |
带步长 | range(1, 10, 2) |
1,3,5,7,9 |
注意:
range()生成的序列不包含 stop 值,和切片规则一致,都是"顾头不顾尾"。
▶ 示例:用 range 控制循环次数(⭐)
▶ 试一试输出:
---
▶ 示例:结合 range 和 len 遍历列表下标(⭐⭐)
▶ 试一试输出:
第 1 号同学:Charlie
第 2 号同学:Diana
第 3 号同学:Eric
第 4 号同学:Grace
enumerate(),我们会在后面的课程中讲到。
3. while 循环
while 循环和 for 循环的区别在于:for 知道要循环多少次,while 只知道什么时候停止。
基本语法:
while 条件:
要重复执行的代码
每次循环开始前,先判断条件是否为 True,如果是就执行代码块,执行完再回来判断……直到条件变成 False。
▶ 示例:猜数字前的准备工作——倒计时(⭐)
▶ 试一试输出:
倒计时:5
倒计时:4
倒计时:3
倒计时:2
倒计时:1
发射!🚀
count -= 1,条件 count > 0 永远为 True,程序就会无限循环下去,直到你强制终止。写 while 循环时,一定要确认循环条件能在某个时刻变成 False。
▶ 示例:while 的典型用法——直到遇到特定值(⭐⭐)
▶ 试一试输出:
# 执行成功
这个例子很好地展示了 while 的优势:我们事先不知道需要循环多少次,只知道什么时候停下来。
4. break 和 continue —— 循环的"刹车"与"跳过"
(1) break —— 立即结束循环
当某个条件满足时,用 break 可以直接跳出整个循环,不再执行后面的循环。
(2) continue —— 跳过本次循环
当某个条件满足时,用 continue 可以跳过本次循环的剩余代码,直接进入下一次循环。
▶ 示例:break 和 continue 对比(⭐)
▶ 试一试输出:
=== break 示例 ===
\n=== continue 示例 ===
▶ 示例:break 的实战——搜索即停止(⭐⭐)
▶ 试一试输出:
列表中没有偶数
▶ 示例:continue 的实战——只处理有效数据(⭐⭐)
▶ 试一试输出:
# 执行成功
5. for-else 和 while-else —— 循环的"正常结束奖励"
这是 Python 一个特有的语法特性,其他很多语言中没有。
else 块在循环正常结束(没有被 break 中断)时执行。可以理解为:"如果循环没有被中途打断,就执行这个奖励代码"。
▶ 示例:检查数字是否为质数(⭐⭐)
▶ 试一试输出:
# 执行成功
在这个例子中:
- 如果找到了一个能整除的
i,break触发,else不执行 - 如果遍历完所有
i都没有整除的,循环正常结束,else执行
for-else 有点反直觉。你可以这样记:else 的意思是 "如果没有 break 的话,就……"。
6. 嵌套循环
循环里面再套循环,就是嵌套循环。外层循环每执行一次,内层循环会完整地执行一轮。
▶ 示例:打印九九乘法表(⭐⭐)
▶ 试一试输出:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
▶ 示例:嵌套循环的 break 只作用于当前层(⭐⭐)
▶ 试一试输出:
(1,1)
(2,1) (2,2)
(3,1) (3,2) (3,3)
7. 综合示例
▶ 示例 1:猜数字游戏(⭐⭐)
系统随机生成一个 1~100 之间的数字,玩家猜测,系统提示"大了"或"小了",直到猜中为止。
import random
# 生成随机目标数字
target = random.randint(1, 100)
attempts = 0
print("🎯 猜数字游戏!我心中有一个 1~100 之间的数字。")
while True: # 无限循环,靠 break 退出
try:
guess = int(input("请输入你的猜测:"))
except ValueError:
print("请输入有效的数字!")
continue
attempts += 1
if guess < target:
print("小了,再大一点!")
elif guess > target:
print("大了,再小一点!")
else:
print(f"🎉 恭喜你猜对了!就是 {target}!")
print(f"你一共猜了 {attempts} 次。")
break # 猜中后退出循环
关键点分析:
while True配合break是 Python 中非常常见的模式try-except捕获非数字输入,用continue让用户重新输入- 猜中后
break退出循环,程序结束
▶ 示例 2:密码强度检测器(⭐⭐⭐)
根据用户输入的密码,逐项检查并给出强度评分。
▶ 试一试运行示例:
请输入密码:Hello123
密码强度评分:3/5
改进建议:
❌ 缺少特殊字符
请输入密码:P@ssw0rd!
密码强度评分:5/5
🎉 密码强度优秀!
这个示例综合运用了 for 循环遍历字符串、sum() 统计布尔值、以及循环中的条件判断。每个字符依次过检,体现了"遍历处理"的编程思维。
8. 常见应用场景
| 场景 | 推荐循环 | 说明 |
|---|---|---|
| 遍历列表/元组/集合 | for |
元素逐个处理 |
| 遍历字典的键值对 | for |
配合 .items() |
| 重复 N 次操作 | for + range() |
次数明确 |
| 直到条件满足才停止 | while |
次数不确定 |
| 读取文件直到末尾 | for / while |
文件对象可迭代 |
| 用户输入验证 | while + break |
直到输入合法 |
| 无限循环(服务器、游戏主循环) | while True |
靠 break 退出 |
❓ 常见问题
for 和 while 到底怎么选?for;知道什么时候停(等待输入/逼近值)用 while。两者往往可以互换,但选对的那一方代码更清晰。for i in range(len(list)) 是 Python 风格吗?for item in list。只有确实需要下标时才用 range(len(...)),这种情况用 enumerate() 更优雅。itertools 简化组合、或重新思考是否有更优的算法。📖 小节
for循环用于遍历序列(列表、字符串、range 等),每次取一个元素执行代码块range(start, stop, step)生成数字序列,不包含 stop 值,步长可正可负while循环用于条件驱动,每次循环前判断条件,注意避免死循环break立即结束整个循环,continue跳过本次循环的剩余部分for-else/while-else是 Python 特有语法,else在循环未被break中断时执行- 嵌套循环中外层每执行一次,内层执行完整一轮,总次数为各层次数乘积
📝 作业
⭐ 第一题:偶数求和
使用 for 循环和 range(),计算 1 到 100 之间所有偶数的和。
提示:range(2, 101, 2) 一步到位。
⭐⭐ 第二题:斐波那契数列
斐波那契数列的定义:前两个数都是 1,从第三个数开始,每个数等于前两个数之和。 即:1, 1, 2, 3, 5, 8, 13, 21, ...
请用 while 循环,输出斐波那契数列中不超过 1000 的所有项。
提示:用三个变量 a, b 表示当前两个数,每次计算 a + b 得到下一个数,然后向前滚动。
⭐⭐⭐ 第三题:简易计算器
编写一个程序,让用户反复输入两个数字和一个运算符(+、-、*、/),输出计算结果。
输入 q 退出程序。
要求:
- 使用
while True和break - 处理除零错误(除数不能为 0)
- 处理无效运算符(打印提示,不退出)
- 使用
continue让程序在输入无效时重新询问,而不是崩溃
示例运行:
输入第一个数字:10
输入运算符(+ - * /):/
输入第二个数字:3
= 3.333...
输入第一个数字:8
输入运算符(+ - * /):%
无效的运算符,请使用 + - * /
输入第一个数字:8
输入运算符(+ - * /):/
输入第二个数字:0
错误:除数不能为 0
输入第一个数字:q
再见!