Python猜数字游戏按下n/q/e键无法正常退出程序问题求助
问题排查与修复
核心问题原因
- 函数末尾多写了一行
the_func(),不管用户输入的是n/q/e还是其他内容,只要执行到函数结尾就会再次触发猜数流程,导致程序无法退出 - 你注释掉了
return语句,判断用户输入为n/q/e时仅break了内层的while循环,没有终止当前函数的执行 - 内层while True循环没有重新读取用户输入,若用户第一次输入非y/n/q/e的内容,会进入死循环
- 递归调用逻辑冗余,每次选择y后递归调用
the_func(),原函数栈后续仍会执行到末尾的the_func(),导致重复触发流程
修复后代码
# Guessing Game def the_func(): again = 'Would you try again? Y/N' secret_number = 9 guess_count = 0 guess_limit = 3 while guess_count < guess_limit: guess = int(input("Guess the secret number: ")) guess_count += 1 if guess == secret_number: print(f"The secret number was {secret_number}.\nYou won!") break else: print("Sorry, you lost!") print("-" * len(again), "\n") print(again) while True: answer = input(" ").lower() if answer == "y": the_func() return elif answer in {'n', 'q', 'e'}: print("Thank you!") return else: print("Sorry, that was an invalid command! Please input y/n/q/e:") the_func()
代码修改说明
- 修正了拼写错误:
tray改为try、scecret改为secret、you are won改为you won、you are loser改为you lost - 删掉了函数末尾冗余的
the_func()调用 - 将用户输入读取逻辑放到内层while True循环中,输入非法时会提示用户重新输入
- 无论用户选择y还是n/q/e,处理完逻辑后直接return终止当前函数执行,避免多余流程触发
如果不想用递归实现重复玩的逻辑,也可以用外层循环替代,避免递归深度过高导致栈溢出,示例如下:
# 非递归版本 def the_func(): secret_number = 9 guess_count = 0 guess_limit = 3 while guess_count < guess_limit: guess = int(input("Guess the secret number: ")) guess_count += 1 if guess == secret_number: print(f"The secret number was {secret_number}.\nYou won!") break else: print("Sorry, you lost!") if __name__ == "__main__": again_tip = 'Would you try again? Y/N' while True: the_func() print("-" * len(again_tip), "\n") print(again_tip) answer = input(" ").lower() if answer in {'n', 'q', 'e'}: print("Thank you!") break elif answer != 'y': print("Invalid input, will exit by default.") break
内容的提问来源于stack exchange,提问作者Jimmy Vanzino
相关产品推荐
相关产品推荐

