跳到主要内容

第 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 周才登场。

要带这节课吗?请查看 教师与图书馆员指南 ,里面有上课流程、常见错误,以及一个不用电脑的备用活动。

这节课完成了吗?标记为已完成,解锁下一周。