You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 08:06:06