python - 如何在Python中拥有一个万能的函数调用,可以调用不同的函数?

标签 python python-2.7

我正在尝试用 Python 制作一个基于文本的游戏,但是,如果我不能在一行中做一件事,代码可能很快就会失控。

一、源码:

from sys import exit

prompt = "> "
inventory = []

def menu():
    while True:
        print "Enter \"start game\" to start playing."
        print "Enter \"password\" to skip to the level you want."
        print "Enter \"exit\" to exit the game."
        choice = raw_input(prompt)
        if choice == "start game":
            shell()
        elif choice == "password":
            password()
        elif choice == "exit":
            exit(0)
        else:
            print "Input invalid. Try again."

def password():
    print "Enter a password."
    password = raw_input(prompt)
    if password == "go back":
        print "Going to menu..."
    else:
        print "Wrong password. You are trying to cheat by (pointlessly) guess passwords."
        dead("cheating")

def shell(location="default", item ="nothing"):
    if location == "default" and item == "nothing":
        print "Starting game..."
        # starter_room (disabled until room is actually made)
    elif location != "default" and item != "nothing":
        print "You picked up %s." % item
        inventory.append(item)
        location()
    elif location != "default" and item == "nothing":
        print "You enter the room."
        location()
    else:
        print "Error: Closing game."

def location():
    print "Nothing to see here."
    # Placeholder location so the script won't spout errors.

def dead(reason):
    print "You died of %s." % reason
    exit(0)

print "Welcome."
menu()

首先,解释一下我的游戏的基本运作方式。 游戏有一个“外壳”(输入完成的地方),它从游戏中的不同“房间”接收信息并向其发送信息,并存储库存。它可以接收两个参数,位置和要添加到库存中的最终项目。但是,第 40-42 行(“shell”中的第一个 elif block )和第 43-45 行(“shell”中的最后一个 elif block )应该返回到该位置所在的任何位置(第 42 和 45 行,将精确的)。我试过 "%s() % location"但这不起作用,它似乎只在打印东西或其他东西时起作用。

有什么办法吗?否则,即使为这款游戏编写引擎也将是一场噩梦。或者我必须制作一个完全不同的引擎,我认为在这种情况下这是一种更好的方法。

对不起,如果我犯了任何错误,第一个问题/帖子。

最佳答案

elif location != "default" and item != "nothing":
    print "You picked up %s." % item
    inventory.append(item)
    location()
elif location != "default" and item == "nothing":
    print "You enter the room."
    location()

我猜你想调用一个有它的名字的函数。为此,您需要对定义它的模块或类的引用:

module = some_module # where the function is defined
function = getattr(module, location) # get the reference to the function
function() # call the function

如果函数定义在当前模块中:

function = globals()[location]
function() # call the function

关于python - 如何在Python中拥有一个万能的函数调用,可以调用不同的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107203/

相关文章:

python - 以天数表示的日期差异

python - 变量赋值错误

python - 根据两个不同列的日期获取交叉联接表的唯一记录时,如何提高逻辑的速度/内存?

python - 我在从 mongodb 查询数据并渲染到 Flask 时遇到问题

python - FastCGI maxrequests、maxspare、minspare、maxchildren 使用什么值?

python - 尝试使用 python 将矩阵放入集合中,但它仍然允许重复

python - EVT_CHAR 从不调用处理程序

excel - 将工作表添加到现有 Excel 工作表而不删除其他工作表

python-2.7 - 断言错误 : INTERNAL: No default project is specified

python - 如何使用装饰器(bottle.py)