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

如何让子程序返回主程序?剪刀石头布游戏菜单返回实现问题

问题解决:剪刀石头布游戏返回主菜单功能实现

错误原因

你遇到的NameError源于两个核心问题:

  1. 单人游戏文件未正确导入runner模块就调用runner()函数;
  2. 直接在单人游戏文件中导入runner会触发循环导入——runner已经导入了RPS_singleplayer,RPS_singleplayer再反向导入runner会导致模块加载混乱,函数无法被正常识别。

另外主程序的循环逻辑存在缺陷:用户输入放在while循环外部,从单人游戏返回后不会重新显示菜单,会重复执行之前的选项。

解决方案(推荐方案)

让主程序统一控制流程,子模块执行完成后自然返回主程序循环,无需主动调用runner():

1. 修改主程序(runner文件)代码

把用户输入移到while循环内部,确保每次从子模块返回后都会重新显示主菜单,同时优化输入合法性判断:

#RPS Runner
from RPS_singleplayer import singleplayer
from RPS_multiplayer import multiplayer

def runner():
    exitCalled = False
    while not exitCalled:
        # 每次循环都重新显示菜单并获取输入
        print("\nWelcome to Rock Paper Scissors")
        print("Main Menu \n1. Singleplayer\n2. Multiplayer\n3. Exit")
        try:
            grabUserInput = int(input("Enter an option: "))
        except ValueError:
            print("Invalid Input. Please enter a number.")
            continue

        if grabUserInput == 1:
            print("Taking you to singleplayer mode... please wait")
            singleplayer()
        elif grabUserInput == 2:
            print("Taking you to multiplayer mode... please wait")
            multiplayer()
        elif grabUserInput == 3:
            exitCalled = True
            print("Thanks for playing!")
        else:
            print("Invalid Input. Try Again")

# 只有直接运行该文件时才启动runner,避免导入时自动执行
if __name__ == "__main__":
    runner()

2. 修改单人游戏文件代码片段

当用户选择返回主菜单时,直接让当前函数返回,回到主程序的runner循环:

choice = input("Would you like to play again or return to menu? Y/N/M?: ").lower()
if choice in ["y", "yes"]:
    rpscpu()
elif choice in ["n", "no"]:
    print("Thanks for playing!")
elif choice in ["m", "menu"]:
    print("Returning to main menu...")
    return  # 直接返回主程序,触发runner循环重新显示菜单

备选方案(延迟导入)

如果一定要在子模块中主动调用主菜单,可使用延迟导入(仅在需要时导入runner模块),避免循环导入问题:

choice = input("Would you like to play again or return to menu? Y/N/M?: ").lower()
if choice in ["y", "yes"]:
    rpscpu()
elif choice in ["n", "no"]:
    print("Thanks for playing!")
    quit()
elif choice in ["m", "menu"]:
    print("Returning to main menu...")
    import runner
    runner.runner()

注意:此方案不如推荐方案清晰,主程序统一控制流程会更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:35:15