第 5 周,共 8 周
循环
学生不再一行行复制,而是让程序自己重复。他们用 while 循环做一个「猜数字」游戏,一直问到玩家猜中为止,中途还会给出太大、太小的提示。这一周答案是固定的;到第 7 周它会变成随机的。
- 预计时间
- 60 分钟
- 项目
- 猜数字游戏
核心思路
循环会重复执行代码,省得你写一百遍。while 循环只要条件为真就一直跑——特别适合那种「一直问到玩家猜中为止」的游戏。循环里必须有东西最终让条件变为假,否则它会永远跑下去。因为 input() 给回来的是文字,我们用 int() 把猜测变成可以比较的数字。
你将学到什么
- 用 while 循环重复执行代码,直到某个东西发生变化。
- 用循环让玩家想猜多少次就猜多少次。
- 把循环和 if 结合起来,对每一次猜测作出回应。
- 找出并修好一个永远停不下来的循环。
新词汇
- 循环
- 会重复执行、而不是只跑一次的代码。
- while
- 只要条件还为真,就一直重复它下面的那些行。
- int()
- 把输入的文字(比如 "7")变成数字 7,好拿来比较。
- 死循环
- 因为条件永远不会变为假而永远停不下来的循环。
项目:猜数字游戏
编辑下面的初始代码,然后按“运行”看看效果。想回到原始代码,随时点“重置初始代码”。
main.py
终端
运行你的程序来查看输出。
预期输出
猜一个 1 到 10 的数: 4
太小了。
猜一个 1 到 10 的数: 9
太大了。
猜一个 1 到 10 的数: 7
你猜中了!小挑战
加一个次数计数器:先写 tries = 0,在循环里给它加 1,循环结束后打印一共猜了几次。
调试挑战
这个游戏永远结束不了,哪怕玩家输入了 7。答案是数字 7,但 input() 给回来的是文字 "7"。它们为什么不相等?什么能把文字变成数字?
有错误的代码
secret = 7
guess = 0
while guess != secret:
guess = input("猜一个 1 到 10 的数: ")查看答案隐藏答案
用 int() 把输入的文字变成数字:
guess = int(input("猜一个 1 到 10 的数: "))拓展挑战
把范围改成 1 到 100,并且只给玩家 7 次机会。次数用完就跳出循环,并打印「机会用完了!」。
回顾思考
循环让你可以一遍遍地问,而不用重复写自己。在你的结课游戏里,哪一部分可能需要重复——回合、问题,还是每一局?
教师笔记
关键的教学时刻是死循环:循环里必须有东西改变条件所检查的那个变量,否则它永远不会结束。int() 只讲到能比较数字为止就够了。这一周保持答案固定,好让学生能预测并核对程序的行为——随机性要到第 7 周才登场。
要带这节课吗?请查看 教师与图书馆员指南 ,里面有上课流程、常见错误,以及一个不用电脑的备用活动。
这节课完成了吗?标记为已完成,解锁下一周。