第 7 课 · 循环进阶

猜数字游戏(完整版)

for 管「知道几次」,while 管「做到条件满足为止」——用它做出能一直猜、直到猜对的完整版猜数字游戏。

120 分钟完整闭环 4 个知识点 5 段示范代码 难度 ★★
🏠 学期课件主页 ← 上一课:重复的力量下一课:嵌套循环 →
01

本课导览

先看这节课教什么、怎么分配 120 分钟,老师心里有底,课堂节奏就不乱。

第7课循环进阶
🎯 趣味项目:猜数字游戏(完整版)
while 循环break 跳出死循环for 与 while 对比
🎯教学目标(学完这节课,学生能…)
  • 掌握 while 循环的语法:while 条件: + 缩进,理解「条件成立就一直做」;
  • 学会使用 break 提前跳出循环,理解它和 if 配合的用法;
  • 理解 for 和 while 的区别,知道什么任务用 while 更合适;
  • 认识「死循环」的危害,知道如何避免(让条件最终能变成假);
  • 能编写一个可多次猜测、带次数统计的完整猜数字游戏。
🔑 教学重点
  • while 语法:while 条件: 下面缩进是循环体
  • break 立刻跳出整个循环;while True 死循环配合 break 是经典组合
🧗 教学难点 / 易卡点
  • 忘记在循环里更新条件(如 n = n - 1),导致死循环
  • break 跳出的是哪一层循环分不清
  • while 循环体没缩进,条件永远成立
🧰课前准备(老师 / 学生)
  • 老师:准备猜数字游戏的现场演示,想好「老师心里想一个数,学生轮流猜」的暖场玩法;提示学生第 10 课才会正式学 random,今天先按「借来用」处理。
  • 学生:打开作品文件夹;今天作品保存为「第7课_猜数字.py」。
  • 口令:老师说「死循环」,全班喊「Ctrl+C 救命」——教学生用 Ctrl+C 强制停止卡住的程序。
⏱️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 段:复习→导入→讲解→示范→上机→练习→检测→小结,每段都有明确产出。

02

情景导入 · 复习热身

先用 5 分钟把上节课的记忆叫醒,再用故事和类比把新知识挂到孩子已有的经验上。

🔁上节回顾 · 快问快答(建议 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:只要条件还成立,就一直做。今天用它做完整版猜数字——猜多少次都行,猜到对为止!

💡生活类比:把新知识挂在旧经验上
🔄

while = 丢手绢的圈

只要「没被抓到」条件成立,就一圈圈跑;条件一假(被抓到/猜对),立刻停下来。

条件成立就一直做
🛑

break = 紧急刹车

就算条件还成立,一踩 break 也立刻跳出循环——像猜到答案后大喊「我中了!」直接出圈。

提前结束
⚖️

for vs while = 跑步 vs 丢手绢

跑步:说好 5 圈(知道次数);丢手绢:追到才停(不知道次数,看条件)。

两种循环分工
⚠️

死循环 = 忘了喊停的转圈

条件永远为真就会无限转圈,程序卡死。解决办法:循环里要有让条件变假的代码。

Ctrl+C 强制停
🗝️本课核心口诀(板书 / 齐读)
核 心 口 诀while 条件一直做,条件变假就下课;
break 一踩就出圈,循环体内要刹车!
03

知识讲解

分小块讲透语法点,每一块都配生活类比 + 要点小结,讲完立刻口头小试。

🔄while 循环——满足条件就一直做

while 条件: 只要条件成立(True),就一遍遍执行缩进的循环体;条件变成假(False)的瞬间,循环结束。

语法和 if 很像:while + 条件 + 英文冒号 :,下面缩进写循环体。区别是:if 只判断一次,while 判断完还会回头再判断。

猜数字游戏就是典型:用户可能猜 3 次,也可能猜 10 次才猜对——循环次数不确定,只能靠「没猜对就继续」这个条件来管。

重要:循环体里一定要有能改变条件的代码(比如 n = n - 1),否则条件永远成立,就变成死循环了。

while 条件: + 缩进循环体条件为假 → 循环结束循环体里要让条件能变假
💡 怎么判断一个任务该用 while?问自己:我知道它要循环几次吗?不知道 → while。
🛑break——提前跳出循环

break 的意思是「打断」:在循环里一遇到 break,立刻跳出整个循环,不管条件还成不成立。

break 常和 if 配合:如果满足某个条件,就 break。比如猜对了,就不必再猜了,break 跳出循环。

有个经典组合:while True: 让条件永远成立,循环看起来停不下来,全靠循环体里的 break 在合适时机「踩刹车」。

猜数字主项目就是这个套路:while True 一直让人猜,猜对 → break,游戏结束。

break 立刻结束循环常写成 if 条件: breakwhile True + break = 经典组合
💡 break 只管跳出一层循环。如果循环还套着循环,它只跳出自己所在的那一层。
⚖️for 和 while 的区别——两种循环怎么选

两种循环都能做重复的事,区别在于「知不知道做几次」:

for 循环适合知道循环次数的任务:打印 1~100、累加求和——次数写在 range 里。

while 循环适合不知道次数、靠条件控制的任务:猜数字(猜几次不知道)、直到用户输入 q 才退出。

用 while 要格外小心死循环:条件永远为真,程序就永远停不下来(按 Ctrl+C 强制停止)。避免的方法就是让条件最终能变成假。

知道次数 → for看条件停 → while防死循环:条件要能变假
💡 同一件事 for 和 while 经常都能做,选你读起来更顺的那个即可。
04

示范代码 · 动手做

老师先带读代码、讲注释,再让学生亲手敲一遍——敲错正好学习调试。

Python示例 1 · 示例 1:用 while 数数 1 到 5
# 第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 这行删掉再运行,看看会发生什么(卡住就按 Ctrl+C)。

🤔 想一想:为什么要写 n = n + 1?如果删掉它,n 永远是 1,条件 n <= 5 永远成立——这就是死循环!

Python示例 2 · 示例 2:break——数到 3 就停
# 用 break 提前跳出循环
n = 1
while n <= 10:
    print(n)
    if n == 3:      # 数到3时……
        print("刹车!不数了")
        break       # 立刻跳出循环
    n = n + 1
print("循环结束")
运 行 结 果
1
2
3
刹车!不数了
循环结束
✍ 把 break 改成删掉试试:这次会不会数到 10?对比一下 break 和没有 break 的差别。

🤔 想一想:循环条件是 n <= 10,可是输出只到 3——这就是 break 的威力:条件还成立,我也先走一步。

Python示例 3 · 示例 3:倒计时(来自教案拓展)
# 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 = 5 改成 n = 10 试试。想一想:如果写成 n = n + 1 会怎样?

🤔 想一想:这里刹车是 n = n - 1(往下减)。条件 n > 0 什么时候变成假?

Python示例 4 · 主项目:猜数字游戏(完整版)
# 第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 之后)

Python示例 5 · 挑战示例:限次版——最多猜 7 次
# 挑战:最多只能猜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次机会
✍ 把「还剩几次」的提示抄对,运行几次看看。while 后面的 else 表示「循环正常结束(没被 break)时执行」。

🤔 想一想:如果 7 次内 break 了,while 的 else 还会执行吗?(提示:break 会让 else 跳过)

05

易错提醒

把最容易翻车的写法先亮出来,见一次、错一次、就会了。

易错点 1

while 死循环——忘记让条件变假

✗ 错误写法
n = 1
while n <= 5:
    print(n)  # 没有 n=n+1
✓ 正确写法
n = 1
while n <= 5:
    print(n)
    n = n + 1
为什么:循环体里必须有一行代码能让条件最终变成假(如 n = n + 1)。没有「刹车」就会无限循环,卡死程序(按 Ctrl+C 强制停止)。
易错点 2

while 循环体忘记缩进

✗ 错误写法
while n > 0:
print(n)
n = n - 1
✓ 正确写法
while n > 0:
    print(n)
    n = n - 1
为什么:和 if 一样,while 下面要重复的代码必须缩进。没缩进 print 只执行一次,n 也不会变,条件永远成立。
易错点 3

把 break 用在循环外

✗ 错误写法
if guess == answer:
    break  # 不在循环里
✓ 正确写法
while True:
    if guess == answer:
        break
为什么:break 只能在循环(for/while)里面用。想「猜对就停」,先要把判断放进循环里,再用 break 跳出。
06

课堂练习(分层)

基础题人人过关,进阶题鼓励尝试,挑战题给学有余力的孩子。参考答案给老师做巡视对照。

A组 · 基础(人人必做)课堂完成,老师巡回指导
  1. 运行猜数字游戏,完整猜中一局,把猜的次数记下来,和同桌比谁猜得少。 (提示:先猜 50 再根据提示折半猜,会更快。)
  2. 用 while 循环打印 1 到 10,每个数字一行。 (提示:n = 1 起步,n <= 10 继续,别忘了 n = n + 1。)
B组 · 进阶(鼓励尝试)课堂完成,老师巡回指导
  1. 把猜数字改成 1~10 的范围,和家人玩一局,看最少几次能中。 (提示:只改 random.randint(1, 100) 一处。)
  2. 用 while 循环让用户不断输入数字并累加,输入 0 时停止,最后输出总和。 (提示:while True + if num == 0: break;累加器记总和。)
C组 · 挑战(学有余力)课堂完成,老师巡回指导
  1. 给猜数字加限制:最多猜 7 次,7 次没猜中就结束并公布答案。 (提示:用 count 计数,循环条件 count < 7;可用 while 的 else 处理失败。)
  2. 写「背单词打卡」:用 while 让用户重复输入单词,输对 3 次就奖励「通关!」。 (提示:设 pass_count = 0,每对一次加 1,到 3 就 break。)
07

闯关小测

收尾前 10 分钟,用口答 / 举手抢答把今天的关键点过一遍。

闯关 1先举手回答,再对答案

while 循环什么时候停下来?

答案:条件变成假(False)时停下来。

💡 每次循环结束都会重新判断条件。

闯关 2先举手回答,再对答案

break 的作用是什么?

答案:立刻跳出整个循环,不再继续。

💡 相当于紧急刹车,常和 if 配合用。

闯关 3先举手回答,再对答案

while True: 是什么?它停得下来吗?

答案:条件永远为真的循环;停不下来,必须靠 break 跳出。

💡 while True + break 是猜数字的经典组合。

闯关 4先举手回答,再对答案

for 和 while 怎么选?

答案:知道循环次数用 for;不知道次数、靠条件停用 while。

💡 两种都能用时就选读着顺的。

闯关 5先举手回答,再对答案

怎么避免死循环?

答案:让循环体里有能改变条件的代码,保证条件最终变假。

💡 没有「刹车」的 while 就是死循环,Ctrl+C 可强制停。

08

小结 · 作业与预告

用一句话带走今天的内容;作业分层布置,作品记得保存进成长档案。

🖍️本课小结(一句话 + 板书核心词)
一句话带走for 管「知道几次」,while 管「做到条件满足为止」——用它做出能一直猜、直到猜对的完整版猜数字游戏。
while 条件:条件假→停止break 跳出while True 组合循环体内要有「刹车」死循环 / Ctrl+Ccount 计数
必做 · 人人过关
  1. 必做题:用 while 循环计算 1 到 10 的乘积(10! = 1×2×…×10),用累乘器。
  2. 把猜数字游戏保存为「第7课_猜数字.py」放进作品文件夹(老师检查)。
选做 · 鼓励挑战
  1. 选做题:写「加法练习器」——电脑出 10 道 100 以内加法题,用户输入答案,做对加 10 分,最后输出总分(提示:random 借来用)。
  2. 选做题:用 while 让用户不断输入数字,输入 0 停止,最后输出所有数字的和与个数。
思考 · 烧脑一下
  1. 思考题:什么是「死循环」?故意写一个死循环运行(按 Ctrl+C 停止),观察电脑卡住的样子,再想想怎么避免。
  2. 想一想:while 后面的 else 什么时候执行?查一查、试一试:被 break 跳出时,while 的 else 会执行吗?
👉 下节课预告:下一课《嵌套循环》:循环里面再套一个循环——外层走一次内层走一轮,用它画出漂亮的圣诞树!