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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:09:04