Python基于random.randint的猜数字游戏输入崩溃、猜中无响应求助
猜数字游戏故障修复方案
故障对应的核心根因
- 输入校验未生效的原因:全程直接对
input()结果做int()强转,输入字符等非整数内容时会直接触发ValueError崩溃,无法走到自定义的提示分支;且原代码中承载输入提示的else分支,前置逻辑已经用player != pc、player == pc覆盖了所有整数对比场景,该分支永远无法触发。 - 猜中响应逻辑未生效的原因:
- 胜利输出代码写在
while player != pc的循环内部,若玩家第一次输入就猜中,循环根本不会进入,胜利逻辑永远无法执行 - 每轮循环都重新生成随机目标值
pc,没有固定单次游戏的猜数字目标,玩家根本无法达成猜中条件 - 轮次统计代码写法错误:
attemp = +1是将变量重新赋值为1,并非累加,正确写法应为attemp += 1 - 存在拼写错误的冗余变量
hráč,完全不参与有效逻辑判断
- 胜利输出代码写在
具体修复步骤
- 重构输入校验逻辑:用
try-except捕获非整数输入触发的异常,输入不符合要求时循环提示用户重输,从根源避免程序崩溃 - 调整随机数生成时机:仅在游戏启动时生成一次固定的1-5范围目标数,后续所有猜测都和该固定值对比,不再每轮更换目标
- 调整循环结构:将胜利判断逻辑移到循环外部,只要玩家退出循环(即和目标值相等),就触发胜利输出;移除冗余的、永远无法触发的分支判断
- 修正轮次累加语法,清理冗余错误变量
修复后可运行代码
import random print("guess number 1-5") # 游戏启动时固定生成目标随机数,全程不更换 pc = random.randint(1, 5) attemp = 1 # 封装带校验的整数输入方法 def get_valid_guess(): while True: try: player_guess = int(input("type guess: ")) # 额外校验输入范围符合1-5的游戏规则 if 1 <= player_guess <= 5: return player_guess else: print("please type int num between 1-5 only") except ValueError: # 捕获非整数输入异常,触发提示分支 print("please type int num only") player = get_valid_guess() while player != pc: attemp += 1 print("your guess", player, "pc", pc) player = get_valid_guess() # 退出循环即代表猜中,执行胜利输出 print( "you win with number", player, "you had", attemp, "attempts", )
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

