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

Python猜数字游戏无法退出循环,调用quit()报错求助

解决猜数字游戏中quit()报错与无法退出循环的问题

问题根源

你的代码存在三个核心问题:

  1. 递归调用触发异常:每次选择"再玩一次"时递归调用game(),函数栈持续叠加,当在递归层级内调用quit()时,会触发SystemExit异常,在线编辑器/repl环境无法正常处理,导致进程崩溃或报错。
  2. 无限循环无终止逻辑:Next_Try对应的while循环没有终止条件,即使选择退出,也可能因流程混乱陷入循环;递归调用后上层函数的循环仍在等待,逻辑链断裂。
  3. quit()/exit()误用:这两个函数更适合交互式环境的顶层操作,在函数内部使用容易触发异常,应通过流程控制语句实现自然退出。

修复方案

  • 改用外层循环替代递归,控制游戏整体运行流程,避免函数栈嵌套。
  • 移除函数内的quit(),用break和return配合循环实现正常退出。
  • 增加输入校验,处理用户输入非"1"/"2"的情况,避免无效输入导致死循环。

修复后的完整代码

import random
import time

name = input("Hello there! What is your name? ")
print(f"Hi {name}! Welcome to the guessing game. I'm going to pick a number between 1 and 100")

def play_game():
    time.sleep(2)
    print('picking ...')
    time.sleep(2)

    guess = int(input("Alright! What is your guess?: "))
    correct_number = random.randint(1, 100)  # 原代码写的1-2,这里改回你描述的1-100,可按需调整
    guess_count = 1

    while guess != correct_number:
        guess_count += 1
        if guess < correct_number:
            guess = int(input("Nope. Try higher. What is your guess?: "))
        else:
            guess = int(input("Nope. Try lower. What is your guess?: "))

    # 优化猜测次数的单复数显示
    guess_text = "guesses" if guess_count > 1 else "guess"
    print(f"Congrats {name}! The right answer was {correct_number}. It took you {guess_count} {guess_text}.")

# 外层循环控制游戏整体流程
while True:
    play_game()
    time.sleep(3)
    
    # 内层循环处理继续/退出的输入校验
    while True:
        next_try = input('''
            Wanna Try again?
          1: Yes!
          2: No thanks
        ''').strip()
        if next_try == "1":
            print("\nStarting a new game...")
            break
        elif next_try == "2":
            time.sleep(2)
            print("Thanks for Playing!")
            # 顶层环境使用exit()无异常,也可改用break后自然结束
            exit()
        else:
            print("Invalid input, please enter 1 or 2.")

关键修改说明

  1. 拆分逻辑与流程:将游戏核心逻辑封装到play_game(),用外层while True循环控制重启,彻底避免递归调用带来的栈问题。
  2. 输入校验:增加内层循环处理"继续/退出"的输入,确保只有有效指令才会执行,杜绝无效输入导致的死循环。
  3. 自然退出:在顶层循环中使用exit()(或改用双层break让程序自然结束),避免在函数内部触发异常。
  4. 细节优化:修复了猜测次数的单复数显示问题,还原了你描述的1-100猜数字范围(原代码是1-2,可按需修改)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:22:32