如何让子程序返回主程序

问题描述 投票:0回答:1

我正在创建一个石头剪刀布游戏,它由一个包含单人游戏的子程序组成,该子程序存储在不同的文件中并导入到运行它的主程序中。在单人游戏中,玩家可以选择返回主菜单,这是运行程序文件的一部分,但我无法弄清楚如何允许玩家执行此操作。有什么建议吗?

我尝试将跑步者文件导入到单人游戏程序中并从那里调用跑步者的函数,但它导致了错误:

NameError: name 'runner' is not defined

跑步者文件代码:

#RPS Runner
from RPS_singleplayer import *
from RPS_multiplayer import *

#The actual runner
def runner():
    exitCalled = False
    print("Welcome to Rock Paper Scissors")
    print("Main Menu \n1. Singleplayer\n2. Multiplayer\n3. Exit")
    grabUserInput = int(input("Enter an option:"))

    while exitCalled != True:
        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
            exit()
        else:
            print("Invalid Input. Try Again")
            grabUserInput = int(input("Enter an option: "))
runner()

单人游戏文件中的代码部分:

choice = input("Would you like to play again or return to menu? Y/N/M?: ")
    if choice == "y" or choice == "Y" or choice == "yes":
        rpscpu()
    elif choice == "n" or choice == "N" or choice == "no":
        print("Thanks for playing!")
        quit()
    elif choice == "M" or choice == "m" or choice == "menu":
        runner()
python nameerror
1个回答
0
投票

注意:代码不完整,不清楚为什么你得到

NameError
,但问题仍然可以有效回答,尽管我需要做出一些合理的假设。


“程序”是一个用词不当:

singleplayer
实际上是一个函数。当然,从函数返回的方法是使用
return
。 (如果这对您来说是新的,任何好的 Python 教程都应该涵盖它,例如在官方教程中:定义函数,接近本节的末尾。)

您当前的

singleplayer
设计有两个问题:

  1. Python 有一个递归限制,您可以通过来回调用

    singleplayer
    runner
    来达到该限制。 默认为 1000 ,因此用户不太可能达到它,但无论如何,在不必要的地方避免递归是一个很好的做法。

  2. 控制流程。想象一下,您想要编写一个额外的运行程序脚本,仅启动一个单人游戏然后退出。按照现在编写代码的方式,如果新的跑步者运行

    singleplayer
    中包含的单人游戏,那么最后它不会简单地退出,而是会向用户显示该提示。

    此外,根据经验,只有顶层代码应该能够退出程序。

因此,

singleplayer
应该只是
return
,而不是您显示的单人游戏代码。

  • 顺便说一句,您可能希望它返回游戏结果,以便跑步者可以创建诸如“用户赢得游戏的百分比”之类的统计数据,但这不是重点。

然后,如果需要,跑步者可以再次处理跑步

singleplayer
的过程。这是一个简单的例子:

if grabUserInput == 1:
    print("taking you to singleplayer mode... please wait")
    while True:
        singleplayer()
        choice = input("Would you like to play again? Y/N: ")
        if choice == "n" or choice == "N" or choice == "no":
            break

然后你需要让主菜单真正循环,就像开始一样,将“主菜单”

print
放入循环中。

有关提示,请参阅询问用户输入,直到他们给出有效响应

© www.soinside.com 2019 - 2024. All rights reserved.