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

猜数字游戏代码Bug排查:选择不重玩时陷入无限循环

Python猜数字游戏退出异常修复

你的代码在猜对数字后选择不重玩(输入N/No)时陷入无限循环,原因是quit()函数会抛出SystemExit异常,而代码里的except:捕获了所有异常(包括这个异常),导致程序无法正常退出,反而回到循环开头重复执行,持续输出错误提示。

两种解决方法:

方法1:用break替换quit()(推荐)

直接用break跳出最外层的while True循环,不会触发异常,程序可正常终止:

import random

random_num = random.randint(1, 100)

count = 1
while True:
    try:
        num = int(input("Guess the number? "))

        if num == random_num:
            print("Congrates! you guessed it.")
            print("Tried:", count, "times")

            play = input("Do you want to play again Y/N? ")
            if play.lower() in ['n', 'no']:
                break  # 跳出循环终止程序

            elif play.lower() in ['y', 'yes']:
                random_num = random.randint(1, 100)
                count = 1

            else:
                break  # 输入无效时直接退出

        elif num > random_num:
            print("Not yet, smaller.")
        elif num < random_num:
            print("Not yet, Greater.")
        count += 1
    except ValueError:  # 仅捕获输入非数字的异常
        print("Oops! please enter a valid number.")

方法2:限制except捕获的异常类型

将except:改为只捕获ValueError(即输入无法转为整数的情况),这样quit()抛出的SystemExit异常不会被拦截,程序能正常退出:

import random

random_num = random.randint(1, 100)

count = 1
while True:
    try:
        num = int(input("Guess the number? "))

        if num == random_num:
            print("Congrates! you guessed it.")
            print("Tried:", count, "times")

            play = input("Do you want to play again Y/N? ")
            if play.lower() in ['n', 'no']:
                quit()

            elif play.lower() in ['y', 'yes']:
                random_num = random.randint(1, 100)
                count = 1

            else:
                quit()

        elif num > random_num:
            print("Not yet, smaller.")
        elif num < random_num:
            print("Not yet, Greater.")
        count += 1
    except ValueError:  # 仅捕获int转换失败的异常
        print("Oops! please enter a valid number.")

另外,原代码中num == random_num分支外的else: quit()属于冗余代码,前面的条件已覆盖所有数字对比情况,可直接删除。

内容的提问来源于stack exchange,提问作者abdulshafi99

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:43:12