04. 循环游乐场
上一章程序学会了"做选择"。但你想过没有——如果让你在屏幕上打印 1 到 100 的所有数字,你会怎么写?复制粘贴 100 行 print()?不不不,我们有更好的办法:循环。
🎡 Python 魔法学院
你发现了一座永不停歇的旋转木马。它不是无序地乱转——而是精确地、一圈又一圈地运行,每转一圈完成一个任务。这就是循环的魔力。
今天你将学会「重复咒」——
for和while。一行咒语,重复千遍。从此告别复制粘贴,让你的代码像水车一样自动运转。
4.1 什么是循环?¶
✍️ 从"抄写课文"到"复印机"¶
想象一下:语文老师罚你把"我要认真写作业"抄写 100 遍。你可以:
笨办法:拿出纸和笔,一个字一个字写,写到手酸 😭
聪明办法:写一遍,然后放到复印机上,按"复印 99 份" 📠
循环,就是编程里的"复印机"。你写一次要做的事情,告诉计算机"重复多少次",计算机就自动帮你做——写一次,运行千百次。
循环就是让一段代码反复执行。就像旋转木马:转到指定的圈数才停下来。
Python 有两种循环:
for 循环:知道要重复多少次
while 循环:不知道次数,满足条件就一直继续
4.2 for 循环:按"清单"办事¶
for 循环会遍历一个序列中的每一个元素:
range() 是 for 循环的最佳拍档——它生成一串数字:
💡
range(start, stop)从 start 开始,到 stop-1 结束。range(1, 6)实际输出 1~5。
💡 常见误区:for 循环最容易踩的三个坑¶
| ❌ 错误写法 | 😢 发生了什么? | ✅ 正确写法 |
|---|---|---|
for i in range(5) 里面的 print(i) 没缩进 | Python 不知道 print(i) 是循环的一部分,只执行了一次! | for i in range(5): 下一行必须有 4 个空格缩进 |
| 缩进不一致(有的 4 格,有的 2 格) | Python 报错 IndentationError,它会困惑"你到底想缩进多少?" | 统一用 4 个空格(按一下 Tab 键) |
for i in 5: — 忘记写 range() | 报错 TypeError: 'int' object is not iterable,整数不能直接遍历! | 必须写 for i in range(5): |
for i in range(1, 10): 以为输出 1~10 | range(1, 10) 实际输出 1~9,不包括 10! | 要输出 1~10 写 range(1, 11) |
🧠 记口诀:for 循环三件套——冒号结尾、缩进一致、range 套数字。一个都不能忘!
4.3 实用案例:for 循环大显身手¶
打印九九乘法表(的一部分)¶
计算 1+2+3+...+100 的总和¶
传说高斯小时候就是用了类似的方法震惊了老师——现在你用一行循环就做到了!
统计字符串中的字母¶
4.4 while 循环:不达目的不罢休¶
while 循环在条件为真时一直执行:
⚠️ 一定要确保条件最终会变成 False,否则程序会变成"永动机"——无限循环!如果你不小心写了
while True而忘记加break,刷新一下页面就好。
🤷 for vs while:什么时候用哪个?¶
每次学循环,大家都会问:"到底用 for 还是 while?"其实很好记:
| 场景 | 用什么 | 例子 |
|---|---|---|
| 你知道要重复多少次 | for | “打印 1~100”、“遍历全班 40 个同学的名字” |
| 你不知道要重复多少次 | while | “不断猜数字直到猜对”、“等用户输入正确的密码” |
| 有明确的"清单"或"范围" | for | for name in ["小明","小红"]、for i in range(10) |
| 条件满足就一直做,条件不满足就停 | while | while not guessed:、while hp > 0: |
🎯 一句话总结:有范围用
for,有条件用while。for 像"把购物清单上的东西全部买完",while 像"一直找直到找到厕所为止"。
4.5 break 和 continue:循环控制器¶
有时候你需要在循环中途"紧急刹车"或"跳过当前回合":
4.6 猜数字游戏升级版¶
用 while 循环 + break,我们来把之前的猜数字做成真正的互动游戏(这次用代码模拟):
💡
for...else是 Python 一个特殊的语法:如果 for 循环是正常结束(没被 break),就会执行 else 部分。
4.7 双重循环:循环里的循环¶
循环里面还能套循环——想象一个旋转木马上每个座位还有自己的旋转杯。
🔍 嵌套循环是怎么执行的?一步步拆解¶
先看一个最简单的 2×3 嵌套循环:
计算机执行时,就像两个齿轮嵌套在一起:
外层 row=0 ──→ 内层 col=0 → print(0, 0)
│ 内层 col=1 → print(0, 1)
│ 内层 col=2 → print(0, 2) ← 内层跑完,退回外层
│
外层 row=1 ──→ 内层 col=0 → print(1, 0)
│ 内层 col=1 → print(1, 1)
│ 内层 col=2 → print(1, 2) ← 内层跑完,外层也跑完,结束!🧠 关键理解:外层循环每跑 1 次,内层循环就要跑完整的一轮。所以总次数 = 外层次数 × 内层次数。就像教室里的座位——每行(外层)有 6 个座位(内层),一共有 8 行,那就是 8 × 6 = 48 个座位。
现在来看实际的代码:
4.8 🎮 趣味挑战:完整九九乘法表¶
之前只打印了3的乘法口诀,现在来一张完整的!
💡 试试看:改
n = 5就打印 5×5 乘法表。你能理解这个双重循环是怎么工作的吗?外层循环控制行(i),内层循环控制列(j)。
4.9 动手练习¶
📋 参考答案(点击展开)
4.10 本章小结¶
| 你学到了什么 | 具体内容 |
|---|---|
| ✅ for 循环 | 遍历序列/range,知道次数用 for |
| ✅ while 循环 | 条件为真就继续,不知道次数用 while |
| ✅ range() | range(n) 生成 0~n-1,range(a,b) 生成 a~b-1 |
| ✅ break | 立即终止循环 |
| ✅ continue | 跳过当前回合,继续下一次 |
| ✅ 嵌套循环 | 循环里面套循环 |
| ✅ for...else | 正常结束(非break)时执行 else |
🚀 下一章预告:单个变量只能存一个值,如果你想存全班同学的名字怎么办?下一章,我们学习列表——Python 最强大的数据收纳工具!
4.11 📚 参考资料¶
| 资源 | 链接 | 说明 |
|---|---|---|
| Python 官方教程 — for/while/range | docs | 官方 for/while 循环和 range 函数详解 |
| Real Python — Python for 循环 | realpython | 从基础到高级的 for 循环完整指南 |
| W3Schools — Python 循环 | w3schools | 交互式循环练习 |
本章内容基于 Python 官方教程 改编,遵循 PSF License 许可。