体育课玩「贴人」游戏,老师吹哨子让大家跑。跑了 5 圈,老师说停,大家就停——这是「跑 5 圈」的 for 循环。
可「丢手绢」不一样:大家围着圈一直跑,直到手绢丢到你身后、你发现追上去为止——跑几圈?没人知道。
小刚明白了:有的任务天生不知道要重复几次,只知道自己做事的条件。比如猜数字:谁知道要猜几次才中?但知道——没猜对就得继续猜。
Python 里专门管这种情况的循环叫 while:只要条件还成立,就一直做。今天用它做完整版猜数字——猜多少次都行,猜到对为止!
for 管「知道几次」,while 管「做到条件满足为止」——用它做出能一直猜、直到猜对的完整版猜数字游戏。
先看这节课教什么、怎么分配 120 分钟,老师心里有底,课堂节奏就不乱。
| 时间 | 环节 | 做什么 / 师生互动要点 |
|---|---|---|
| 0–5 | 候课 · 设备检查 | 开机 → 打开编辑器 → 确认作品文件夹就位。 |
| 5–12 | 上节回顾 · 快问快答 | range(1,11) 生成几到几?累加器怎么写?九九乘法表谁打印出来了? |
| 12–20 | 情景导入 | 玩「心里想个数你来猜」:猜几次不一定——昨天学的 for 是「定次数」,今天学的 while 是「猜到对为止」。 |
| 20–35 | 知识讲解 | while 语法 → while True 死循环与 break → for/while 对比 → 死循环怎么避免。 |
| 35–55 | 示范代码 + 上机(示例1~3) | while 数数 1~5 → break 提前停 → 倒计时(含 n = n - 1 防死循环)。 |
| 55–75 | 主项目:猜数字游戏 | 老师带读 import random(借来用)→ 完整代码逐行讲 → 学生敲 → 玩几局看谁猜得少。 |
| 75–88 | 课堂练习 A/B | 练习 1 体验多次猜测;练习 2 用 while 打印 1~10;投屏找茬(重点看死循环)。 |
| 88–98 | 挑战练习 C | 给猜数字限次:最多猜 7 次;学有余力的同学加「猜大猜小提示」的美化。 |
| 98–106 | 闯关小测 | while 什么时候停?break 干什么?for 和 while 怎么选?怎么防死循环?…… |
| 106–115 | 总结 · 保存作品 | 齐读口诀;保存「第7课_猜数字.py」;强调 while 循环体里一定要有「让条件变假」的代码。 |
| 115–120 | 布置作业 · 预告 | 布置必做/选做/思考;预告第 8 课:嵌套循环画圣诞树——循环里再套循环。 |
时间轴把 2 小时切成 8 段:复习→导入→讲解→示范→上机→练习→检测→小结,每段都有明确产出。
先用 5 分钟把上节课的记忆叫醒,再用故事和类比把新知识挂到孩子已有的经验上。
问 1:for 循环适合什么情况?它靠什么控制次数?
→ 适合知道要循环几次的任务,靠 range() 给的数控制次数(for i in range(n),次数写在 range 里)。
问 2:range(1, 6) 输出 1 到几?为什么?
→ 到 5——range「顾头不顾尾」,结束值 6 轮不到。想要 1~10 得写 range(1, 11)。
问 3:累加器求和的固定两行是什么?
→ 循环前 total = 0;循环里 total = total + i。先清空罐子,再每轮加一次。
体育课玩「贴人」游戏,老师吹哨子让大家跑。跑了 5 圈,老师说停,大家就停——这是「跑 5 圈」的 for 循环。
可「丢手绢」不一样:大家围着圈一直跑,直到手绢丢到你身后、你发现追上去为止——跑几圈?没人知道。
小刚明白了:有的任务天生不知道要重复几次,只知道自己做事的条件。比如猜数字:谁知道要猜几次才中?但知道——没猜对就得继续猜。
Python 里专门管这种情况的循环叫 while:只要条件还成立,就一直做。今天用它做完整版猜数字——猜多少次都行,猜到对为止!
只要「没被抓到」条件成立,就一圈圈跑;条件一假(被抓到/猜对),立刻停下来。
条件成立就一直做就算条件还成立,一踩 break 也立刻跳出循环——像猜到答案后大喊「我中了!」直接出圈。
提前结束跑步:说好 5 圈(知道次数);丢手绢:追到才停(不知道次数,看条件)。
两种循环分工条件永远为真就会无限转圈,程序卡死。解决办法:循环里要有让条件变假的代码。
Ctrl+C 强制停分小块讲透语法点,每一块都配生活类比 + 要点小结,讲完立刻口头小试。
while 条件: 只要条件成立(True),就一遍遍执行缩进的循环体;条件变成假(False)的瞬间,循环结束。
语法和 if 很像:while + 条件 + 英文冒号 :,下面缩进写循环体。区别是:if 只判断一次,while 判断完还会回头再判断。
猜数字游戏就是典型:用户可能猜 3 次,也可能猜 10 次才猜对——循环次数不确定,只能靠「没猜对就继续」这个条件来管。
重要:循环体里一定要有能改变条件的代码(比如 n = n - 1),否则条件永远成立,就变成死循环了。
break 的意思是「打断」:在循环里一遇到 break,立刻跳出整个循环,不管条件还成不成立。
break 常和 if 配合:如果满足某个条件,就 break。比如猜对了,就不必再猜了,break 跳出循环。
有个经典组合:while True: 让条件永远成立,循环看起来停不下来,全靠循环体里的 break 在合适时机「踩刹车」。
猜数字主项目就是这个套路:while True 一直让人猜,猜对 → break,游戏结束。
两种循环都能做重复的事,区别在于「知不知道做几次」:
for 循环适合知道循环次数的任务:打印 1~100、累加求和——次数写在 range 里。
while 循环适合不知道次数、靠条件控制的任务:猜数字(猜几次不知道)、直到用户输入 q 才退出。
用 while 要格外小心死循环:条件永远为真,程序就永远停不下来(按 Ctrl+C 强制停止)。避免的方法就是让条件最终能变成假。
老师先带读代码、讲注释,再让学生亲手敲一遍——敲错正好学习调试。
# 第7课:while 示例——数数1到5
n = 1 # 从1开始
while n <= 5: # 只要n不超过5,就一直做
print(n)
n = n + 1 # 让n变大——这行是"刹车",没有它会死循环
print("数完啦!")1
2
3
4
5
数完啦!🤔 想一想:为什么要写 n = n + 1?如果删掉它,n 永远是 1,条件 n <= 5 永远成立——这就是死循环!
# 用 break 提前跳出循环
n = 1
while n <= 10:
print(n)
if n == 3: # 数到3时……
print("刹车!不数了")
break # 立刻跳出循环
n = n + 1
print("循环结束")1
2
3
刹车!不数了
循环结束🤔 想一想:循环条件是 n <= 10,可是输出只到 3——这就是 break 的威力:条件还成立,我也先走一步。
# while 倒计时:5,4,3,2,1,时间到!
n = 5
while n > 0:
print(str(n) + "...")
n = n - 1 # 刹车:每次减1,迟早变成0
print("时间到!")5...
4...
3...
2...
1...
时间到!🤔 想一想:这里刹车是 n = n - 1(往下减)。条件 n > 0 什么时候变成假?
# 第7课主项目:猜数字游戏(完整版)
# 功能:电脑想一个1~100的数,你一直猜,直到猜对
import random # 借来用:第10课正式学随机数
answer = random.randint(1, 100) # 电脑想好答案
count = 0 # 记录猜了几次
print("=== 猜数字游戏 ===")
print("我想了一个1到100之间的数字,你来猜猜看!")
while True:
guess = int(input("请输入你猜的数字:"))
count = count + 1 # 猜一次,计数加1
if guess == answer:
print("恭喜你,猜对了!")
print("你一共猜了" + str(count) + "次。")
break # 猜对就跳出循环
elif guess > answer:
print("猜大了,往小了试试!")
else:
print("猜小了,往大了试试!")
print("游戏结束!")=== 猜数字游戏 ===
我想了一个1到100之间的数字,你来猜猜看!
请输入你猜的数字:50
猜大了,往小了试试!
请输入你猜的数字:25
猜小了,往大了试试!
请输入你猜的数字:37
恭喜你,猜对了!
你一共猜了3次。
游戏结束!🤔 想一想:count = count + 1 是什么?为什么猜对后 break 前面的 print 还会执行?(提示:break 在 print 之后)
# 挑战:最多只能猜7次,超了就结束
import random
answer = random.randint(1, 100)
count = 0
print("=== 猜数字(限7次)===")
while count < 7:
guess = int(input("请输入你猜的数字:"))
count = count + 1
if guess == answer:
print("恭喜!你用了" + str(count) + "次猜中!")
break
elif guess > answer:
print("猜大了!还剩" + str(7 - count) + "次机会")
else:
print("猜小了!还剩" + str(7 - count) + "次机会")
else:
print("7次都没猜中,答案是" + str(answer) + "。下次加油!")=== 猜数字(限7次)===
请输入你猜的数字:50
猜小了!还剩6次机会
请输入你猜的数字:80
猜大了!还剩5次机会🤔 想一想:如果 7 次内 break 了,while 的 else 还会执行吗?(提示:break 会让 else 跳过)
把最容易翻车的写法先亮出来,见一次、错一次、就会了。
n = 1
while n <= 5:
print(n) # 没有 n=n+1n = 1
while n <= 5:
print(n)
n = n + 1while n > 0:
print(n)
n = n - 1while n > 0:
print(n)
n = n - 1if guess == answer:
break # 不在循环里while True:
if guess == answer:
break基础题人人过关,进阶题鼓励尝试,挑战题给学有余力的孩子。参考答案给老师做巡视对照。
收尾前 10 分钟,用口答 / 举手抢答把今天的关键点过一遍。
while 循环什么时候停下来?
💡 每次循环结束都会重新判断条件。
break 的作用是什么?
💡 相当于紧急刹车,常和 if 配合用。
while True: 是什么?它停得下来吗?
💡 while True + break 是猜数字的经典组合。
for 和 while 怎么选?
💡 两种都能用时就选读着顺的。
怎么避免死循环?
💡 没有「刹车」的 while 就是死循环,Ctrl+C 可强制停。
用一句话带走今天的内容;作业分层布置,作品记得保存进成长档案。