
在青少年编程课上「猜数字」是我最常用的第一个综合练习。它足够小一次课就能写完又足够完整把输入、类型转换、循环、条件判断、随机数这几件事都串起来了。下面把这节课的完整教学思路整理出来。一、为什么选这个案例结果可见学生写完立刻能玩成就感来得快结构完整一个程序里同时出现输入、循环、分支、比较坑足够多类型错误、死循环、逻辑写反这些都是真实会犯的错。二、完整代码importrandom targetrandom.randint(1,100)count0whileTrue:guess_strinput(猜一个 1~100 的整数).strip()# 1. 输入校验必须是整数ifnotguess_str.lstrip(-).isdigit():print(请输入整数不要输入字母或符号)continueguessint(guess_str)count1# 2. 范围提示ifguess1orguess100:print(超出范围了请输入 1~100 之间的数)continue# 3. 比较判断ifguesstarget:print(大了)elifguesstarget:print(小了)else:print(f猜对了一共用了{count}次)break## 三、三个教学重点### 1. 输入拿到的是字符串input() 返回的永远是字符串。学生第一次写 ifguesstarget 报 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.加计分次数越少得分越高最后输出评价。 这三个练习分别练「循环条件设计」「参数化」「状态记录」顺着做下来学生对循环的理解会扎实很多。## 小结猜数字这个案例的价值不在于代码多难而在于它把「输入 → 校验 → 判断 → 反馈」这条最基本的程序流程完整走了一遍。学生自己踩过类型错误和死循环的坑后面学函数和列表时调试能力会明显不一样。