如何修复1-50数字猜谜游戏:重玩功能与首次判断失效问题
修复后的猜数字游戏代码
import random play = True while play: # 每局游戏重新初始化变量 random_num = random.randrange(1, 51) # 生成1到50的随机数(包含50) guesses = 0 print("欢迎来玩猜数字!输入1-50的数,输0直接退出") while True: num = int(input("请输入你的猜测:")) guesses += 1 if num == 0: print("游戏结束") break elif num < 1 or num > 50: print("猜的数得在1到50之间啊!") guesses -= 1 # 这种无效猜测不算次数 elif num == random_num: print(f"牛啊!猜对了,你一共猜了{guesses}次。") break elif num > random_num: print("猜高了,再小点儿!") else: print("猜低了,再大点儿!") # 询问是否重玩 while True: letter = input("再来一局不?(Y/N)").strip().upper() if letter in ['Y', 'N']: break print("别瞎输,就输Y或者N!") play = letter == 'Y'
问题原因与修复说明
1. 重玩功能失效
原代码仅定义了play = True变量,但未用循环包裹整个游戏逻辑,导致一局结束后直接退出,无法触发重玩。修复时将所有游戏流程放入while play循环内,每局结束后根据用户输入更新play的值,实现重玩逻辑。
2. 首次输入未判断高低
- 原代码输入顺序颠倒:先获取用户输入再打印提示,不符合正常交互逻辑;
- 首次输入仅处理了范围校验和猜中场景,缺少过高/过低的判断分支。修复时采用
while True循环统一处理所有输入,让首次猜测和后续猜测走完全相同的判断逻辑,避免遗漏分支。
额外优化细节:
- 无效范围的猜测不计数,提升游戏合理性;
- 重玩时增加输入校验,避免用户输入无效字符;
- 修正随机数范围为
1,51,确保能生成50这个数字; - 用f-string简化输出格式,提升可读性。
内容的提问来源于stack exchange,提问作者EliKhan
相关产品推荐
相关产品推荐

