用户输入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()
关键修改点
- 移除递归调用:用
continue替代play_again(),这样整个流程始终在同一个while循环里,不会堆叠函数实例 - 简化退出逻辑:输入"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
相关产品推荐
相关产品推荐

