将功能输入到导入的模块中

时间:2018-10-26 19:02:21

标签: python function module

我正在尝试创建一个游戏菜单,然后将其用于游戏中,以免每次都不必创建新菜单。但是,当前它只是执行gameMain()函数,而不是先执行gameMenu(),然后尝试选择带有“ g”或“ G”的游戏只会结束程序。

我要问的是,是否有可能在导入该代码的函数中的模块中包含一个变量。

这是菜单的代码,称为textbasedadventures.py:

def gameMenu(game,your_choice="Please Enter how you'd like the game described"):
    menu_options = ""
    while not(menu_options == "G" or menu_options == "g":
        title()
        print()
        print("\t\t",your_choice,"\n\n")
        print('G start game')
        menu_options = input("\t\tChoice: ")
        if menu_options == "G" or menu_options == "g":
            game

            input(pause)

这是游戏的代码:

import sys
sys.path.append("\MyOwnProjects")
import textbasedadventures as t
def veryStart():
    answer = ""
    while not(answer == "1" or answer == "2" or answer == "3"):
        print("\tYou are awoken by the blaring of your alarm clock.How did you sleep last night?")
        print("\n\t1 Very well\n\n\t2 Well\n\n\t3 Not good\n\n\t4 atrociously")
        answer = input("You slept ")
        if answer == "1":
            print("one option")
        elif answer == "2":
            print("\t")
        elif answer == "3":
            pass
        elif answer == "4":
            print("another option")
        else:
            print("\t",answer,"is not a valid entry, please try again")


def gameMain():

    veryStart()


t.gameMenu(gameMain(),"please work")

如果有人可以告诉我该怎么做,或者甚至有可能,我将非常感激。

1 个答案:

答案 0 :(得分:0)

当您调用一个函数以及将函数称为对象时,您剩下的问题已经习惯了。

由于导入textbasedadventures时没有出现任何错误(为避免输入错误,我将其缩写为tba),因此我认为您已正确处理了该文件:该文件名为{ {1}},并且在本地目录中。

由于您没有定义textbasedadventures.py,因此我必须删除input(pause)行,并且那里有一个与我正在使用的外壳不同的外壳。我还必须删除pause,因为您的代码中已不再包含该代码。

传递主程序的主游戏功能时,必须将其作为功能对象传递。您是这样做的:

title()

调用 gameMain(由于括号),获取返回值,并将那个传递给t.gameMenu(gameMain(),"please work") 。由于没有这样的返回值,因此远程菜单routien仅接收值t.gameMenu

只需删除括号:

None

这将接收整个t.gameMenu(gameMain,"please work") 函数(很好,对其的引用)并将其传递给您的远程函数,在此...

您无需列出传入的gameMain模块,只需列出其值即可。 Python认为,“好吧,很酷,我必须评估这个表达式。Gee,是对对象的引用-很简单。值只是引用本身。我什至不应该 do 完成所有操作。”

简单地将值放在一行上是合法的Python,但很无聊:如果您在交互式外壳中,则显示该值,否则将被忽略。因此,您永远不会收到该行的任何回复。

取而代之的是 now :在此放置括号,将括号移到通话的另一端:

game

我进行了这些更改,结果如下:

game()