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

用户输入y时无法重新运行main()函数,代码问题求助

问题解决:输入"y"后重复出现"是否再玩"的询问

你的代码问题出在**play_again函数里的递归调用和while True循环冲突**:当输入无效值时,你递归调用了play_again(),这会在函数栈里创建多个play_again实例。当你输入"y"执行完main()后,程序会回到之前未结束的play_again实例的循环中,导致再次弹出询问;甚至输入"n"退出后,还可能回到更上层的循环继续提问。

修改后的代码

import sys

def play_again():
    while True:
        try_again = input('Would you like to play again? (Y/N)\n')
        again = try_again.lower()
        if again not in ('y', 'n'):
            print("Invalid input.")
            continue  # 回到循环开头重新询问,避免递归
        if again == 'y':
            main()
        else:
            print("Goodbye")
            sys.exit()  # 直接退出程序

def main():
    # 这里替换为你的核心游戏逻辑
    print("正在运行游戏主程序...")

# 启动流程
main()
play_again()

关键修改点

  1. 移除递归调用:用continue替代play_again(),这样整个流程始终在同一个while循环里,不会堆叠函数实例
  2. 简化退出逻辑:输入"n"时直接调用sys.exit()结束程序,避免循环残留

如果你的需求是运行完main()后自动回到游戏(不先询问),可以调整流程,把play_again的调用放到main的末尾,让每局结束后自动询问是否继续:

import sys

def play_again():
    while True:
        try_again = input('Would you like to play again? (Y/N)\n')
        again = try_again.lower()
        if again not in ('y', 'n'):
            print("Invalid input.")
            continue
        return again == 'y'

def main():
    # 核心游戏逻辑
    print("正在运行游戏主程序...")
    # 游戏结束后询问是否继续
    if play_again():
        main()
    else:
        print("Goodbye")
        sys.exit()

# 启动游戏
main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:21:35