Python猜数字游戏无法退出循环,调用quit()报错求助
解决猜数字游戏中quit()报错与无法退出循环的问题
问题根源
你的代码存在三个核心问题:
- 递归调用触发异常:每次选择"再玩一次"时递归调用
game(),函数栈持续叠加,当在递归层级内调用quit()时,会触发SystemExit异常,在线编辑器/repl环境无法正常处理,导致进程崩溃或报错。 - 无限循环无终止逻辑:
Next_Try对应的while循环没有终止条件,即使选择退出,也可能因流程混乱陷入循环;递归调用后上层函数的循环仍在等待,逻辑链断裂。 - 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.")
关键修改说明
- 拆分逻辑与流程:将游戏核心逻辑封装到
play_game(),用外层while True循环控制重启,彻底避免递归调用带来的栈问题。 - 输入校验:增加内层循环处理"继续/退出"的输入,确保只有有效指令才会执行,杜绝无效输入导致的死循环。
- 自然退出:在顶层循环中使用
exit()(或改用双层break让程序自然结束),避免在函数内部触发异常。 - 细节优化:修复了猜测次数的单复数显示问题,还原了你描述的1-100猜数字范围(原代码是1-2,可按需修改)。
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

