news 2026/9/30 6:49:35

少儿编程教学实录:用Python 写一个猜数字游戏,讲透输入校验与循环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
少儿编程教学实录:用Python 写一个猜数字游戏,讲透输入校验与循环

在青少年编程课上,「猜数字」是我最常用的第一个综合练习。它足够小,一次课就能写完;又足够完整,把输入、类型转换、循环、条件判断、随机数这几件事都串起来了。下面把这节课的完整教学思路整理出来。

一、为什么选这个案例

  • 结果可见:学生写完立刻能玩,成就感来得快;
    • 结构完整:一个程序里同时出现输入、循环、分支、比较;
    • 坑足够多:类型错误、死循环、逻辑写反,这些都是真实会犯的错。

二、完整代码

importrandom target=random.randint(1,100)count=0whileTrue:guess_str=input("猜一个 1~100 的整数:").strip()# 1. 输入校验:必须是整数ifnotguess_str.lstrip('-').isdigit():print("请输入整数,不要输入字母或符号")continueguess=int(guess_str)count+=1# 2. 范围提示ifguess<1orguess>100:print("超出范围了,请输入 1~100 之间的数")continue# 3. 比较判断ifguess>target:print("大了")elifguess<target:print("小了")else:print(f"猜对了!一共用了{count}次")break```## 三、三个教学重点### 1. 输入拿到的是字符串`input()` 返回的永远是字符串。学生第一次写 `ifguess>target` 报 `TypeError`,就是因为忘了 `int()` 转换。这里要强调:**先转类型,再比较**。### 2. 校验写在转换之前直接 `int(guess_str)`,学生输入 `abc` 程序就崩。用 `isdigit()` 先判断,是让孩子第一次接触「防御式编程」:**不要假设用户会按你想的输入**。 注意负数的情况:`'-5'.isdigit()` 是 `False`,所以代码里用了 `lstrip('-')` 处理。### 3. `continue` 与 `break` 的区别-输入不合法 → `continue`:跳过本次循环,重新要输入;--猜对 → `break`:结束整个循环。 这两个关键字是这节课的核心,建议让学生自己改一版错的(比如把 `continue` 换成 `break`),亲眼看到程序怎样立刻退出,理解会更深。## 四、学生最容易犯的三个错|现象|原因|修法||---|---|---||输入字母就崩溃|没做类型校验|先 `isdigit()` 再 `int()`||一直猜不到,程序不结束|忘记 `break`|猜对分支里加 `break`||提示永远说「大了」|比较方向写反|对照目标值检查 `>` 和 `<`|## 五、可以留的延伸练习1.限制次数:最多猜7次,用完还没猜中就结束;2.2.难度分级:让玩家选1~50或1~100的范围;3.3.加计分:次数越少得分越高,最后输出评价。 这三个练习分别练「循环条件设计」「参数化」「状态记录」,顺着做下来,学生对循环的理解会扎实很多。## 小结猜数字这个案例的价值不在于代码多难,而在于它把「输入 → 校验 → 判断 → 反馈」这条最基本的程序流程完整走了一遍。学生自己踩过类型错误和死循环的坑,后面学函数和列表时,调试能力会明显不一样。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!