【每天一个 Python 小案例06】Python 实现猜数字小游戏
每天完成一个小案例,把零散的 Python 语法知识慢慢变成真正能写出来的程序。
系列:《每天一个 Python 小案例》
第 6 篇:Python 实现猜数字小游戏
关键词:Python、random 模块、while 循环、条件判断、异常处理、小游戏
一、案例需求
今天实现一个经典的猜数字小游戏。
程序先在 1 到 100 之间随机生成一个数字,玩家不断输入自己猜测的数字。程序会根据猜测结果给出提示:
- 猜小了,提示“猜小了”;
- 猜大了,提示“猜大了”;
- 猜对了,提示玩家一共猜了多少次,并结束游戏。
为了让程序更友好,输入字母、符号或超出范围的数字时,程序不会报错退出,而是提醒玩家重新输入。
通过这个小案例,可以练习 Python 中的随机数、用户输入、类型转换、条件判断、循环和异常处理。
二、思路分析
在写代码前,先把游戏过程拆成几个清晰的步骤:
- 导入 random 模块;
- 使用 random.randint(1, 100) 随机生成一个目标数字;
- 使用 while 循环,让玩家可以不断猜测;
- 读取玩家输入,并将输入内容转换为整数;
- 判断输入是否在 1 到 100 的范围内;
- 将猜测数字与目标数字比较,给出“猜大了”或“猜小了”的提示;
- 如果猜对,输出猜测次数并退出循环。
游戏的核心逻辑可以概括为:
输入数字 → 比较大小 → 给出提示 → 继续猜测或结束游戏
三、Python 代码
importrandom# 在 1 到 100 之间随机生成一个目标数字target_number=random.randint(1,100)# 记录有效猜测次数count=0print("欢迎来到猜数字小游戏!")print("我已经想好了一个 1 到 100 之间的数字。")whileTrue:try:guess=int(input("请输入你猜的数字:"))exceptValueError:print("输入错误,请输入一个整数!")continue# 判断数字是否在规定范围内ifguess<1orguess>100:print("请输入 1 到 100 之间的整数!")continue# 只有有效输入才计入猜测次数count+=1ifguess<target_number:print("猜小了,请继续猜!")elifguess>target_number:print("猜大了,请继续猜!")else:print(f"恭喜你,猜对了!答案就是{target_number}。")print(f"你一共猜了{count}次。")break将代码保存为 guess_number.py,然后在终端中运行:
python guess_number.py每次重新运行程序,target_number 都会重新随机生成,因此每一局的答案都可能不同。
四、运行结果
下面是假设随机数字为 68 时的一次运行示例:
欢迎来到猜数字小游戏! 我已经想好了一个 1 到 100 之间的数字。 请输入你猜的数字:50 猜小了,请继续猜! 请输入你猜的数字:80 猜大了,请继续猜! 请输入你猜的数字:68 恭喜你,猜对了!答案就是 68。 你一共猜了 3 次。如果玩家输入了不符合要求的内容,程序也会给出提示:
请输入你猜的数字:abc 输入错误,请输入一个整数! 请输入你猜的数字:120 请输入 1 到 100 之间的整数!五、知识点总结
1. random 模块
random 是 Python 自带的随机数模块。代码中的:
random.randint(1,100)表示在 1 到 100 之间随机生成一个整数。注意,randint 的两个边界都包含在结果范围内,所以这里可能生成 1,也可能生成 100。
2. input() 函数
input() 用于接收用户在键盘上输入的内容。
guess=input("请输入你猜的数字:")无论用户输入的是数字、字母还是符号,input() 接收到的内容默认都是字符串。因此,本案例需要使用 int() 将字符串转换为整数,才能进行大小比较。
3. while True 循环
whileTrue:表示一直循环执行其中的代码。猜数字游戏不知道玩家第几次才能猜对,所以适合使用循环。
当玩家猜对后,执行:
break就会跳出循环,结束游戏。
4. if、elif 和 else
条件判断用于比较玩家猜测的数字与目标数字:
ifguess<target_number:print("猜小了")elifguess>target_number:print("猜大了")else:print("猜对了")这三种情况正好覆盖了数字比较的所有结果。
5. try 和 except
如果用户输入 abc,直接执行 int(“abc”) 会出现错误。为了让程序不因为一次错误输入而结束,本案例使用了:
try:guess=int(input("请输入你猜的数字:"))exceptValueError:print("输入错误,请输入一个整数!")这就是基础的异常处理。它让程序遇到非数字输入时提示用户重新输入,而不是直接显示报错信息。
六、常见问题与易错点
1. 为什么猜测次数要放在范围判断之后?
本案例只统计有效的猜测。输入字母,或输入 0、120 这类超出范围的数字时,并不算一次正式猜测,所以 count += 1 要放在输入校验之后。
2. 为什么不能直接比较 input() 的结果?
因为 input() 返回的是字符串。字符串之间的比较和数字大小比较不是一回事,所以必须先使用 int() 转换为整数。
3. 为什么程序不会自动结束?
只要没有猜对,while True 就会持续运行。只有进入 else 分支并执行 break 后,游戏才会结束。
4. 每次答案为什么不一样?
答案由 random.randint(1, 100) 随机生成,因此每次运行程序都可能得到不同的目标数字。这也是小游戏更有趣的原因。
七、可以继续扩展的功能
完成基础版本后,还可以尝试给小游戏增加更多功能:
- 限制玩家最多只能猜 7 次;
- 根据猜测次数评价“运气很好”或“再接再厉”;
- 让玩家选择数字范围,例如 1 到 50 或 1 到 1000;
- 猜对后询问是否再来一局;
- 把游戏封装成函数,让代码结构更清晰。
这些扩展不必一次全部完成。先保证基础版本可以正确运行,再逐步加入新功能,是学习编程更稳妥的方式。
八、总结
本篇通过一个猜数字小游戏,练习了多项 Python 基础知识:
- 使用 random 模块生成随机数;
- 使用 input() 接收用户输入;
- 使用 int() 完成字符串到整数的转换;
- 使用 if、elif、else 进行条件判断;
- 使用 while 和 break 控制循环;
- 使用 try、except 处理错误输入。
这个案例的代码不长,但已经包含了一个小程序常见的完整过程:接收输入、处理逻辑、输出结果和处理异常。
坚持把这些小案例写出来、运行起来、再尝试修改一点点功能,Python 的基础语法就会慢慢从“看懂”变成“会用”。
下一篇预告
《每天一个 Python 小案例07:Python 实现石头剪刀布小游戏》
下一篇将继续学习:
- 如何使用 random 让电脑随机出拳;
- 如何用条件判断比较胜负;
- 如何处理玩家输入的无效选项;
- 如何让游戏支持连续多轮对战。
每天完成一个小案例,让 Python 学习更有节奏。