我正在尝试创建一个游戏菜单,然后将其用于游戏中,以免每次都不必创建新菜单。但是,当前它只是执行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")
如果有人可以告诉我该怎么做,或者甚至有可能,我将非常感激。
答案 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()