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

Python猜数字游戏try except不生效、获胜后循环无法跳出问题

问题原因定位
  • 异常捕获不生效的原因:int(input("Guess: ")) 这行代码写在了try代码块之外,输入非数字时触发的ValueError不在捕获范围内,所以直接抛出异常终止程序。同时原异常分支只对异常变量e赋值,没有打印提示信息,用户无法看到报错提示。
  • 猜对后无法结束游戏的原因:内层循环的break仅能跳出当前所在的内层while循环,外层while True属于死循环,没有退出逻辑,所以会重新初始化猜数次数、隐藏数字,开启新一轮游戏。同时原代码中else: print("You lose!")的分支逻辑永远无法触发,因为guess和hidden_num的关系只有小于、大于、等于三种,不存在其他情况,达到最大猜数次数的提示逻辑缺失。
修复方案
  • 将输入和int转换逻辑移入try代码块内,确保非数字输入的异常可以被捕获,异常分支添加提示打印逻辑
  • 新增全局标记变量控制外层循环,猜对后修改标记变量同时跳出内层循环,即可终止整个程序
  • 补充达到最大猜数次数后的失败提示逻辑,放在内层循环之外
修复后完整代码
# 新增外层循环控制标记
game_over = False
while not game_over:
    num_of_guess = 0
    max_guess = 9
    hidden_num = 13
    while num_of_guess < max_guess:
        try:
            # 输入和类型转换移入try块内
            guess = int(input("Guess: "))
            num_of_guess += 1
            if guess < hidden_num:
                print("Too low!")
            elif guess > hidden_num:
                print("Too high!")
            elif guess == hidden_num:
                print("You win!")
                # 修改标记变量,触发外层循环退出
                game_over = True
                break
        except ValueError:
            # 精准捕获类型转换异常,打印提示,不消耗猜数次数
            print("Please enter a number!")
            continue
    # 内层循环结束后判断是否用完次数还没猜对
    if not game_over and num_of_guess >= max_guess:
        print(f"You lose! The hidden number is {hidden_num}")
        game_over = True

内容的提问来源于stack exchange,提问作者Pratham S. Gorawala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:54:01