如何让 raw_input 调用一个函数

how to make a raw_input call a function

我正在修改我自己创作的游戏,我遇到了这个问题。我正在以非常互动的小说风格制作游戏,但我无法让 raw_input 调用 take swordtake(sword, room) 之类的函数以将其从 room 中删除并进入 inventory。 首先,这是我在游戏中用来连续调用 raw_input:

的内容
GameOn=True
while GameOn==True:
    a=raw_input("C:\>")
    a=a.lower()
    if a=="look":
        look()

接下来是函数:

def take(item,room):
    if item in tools:
        if item[0] in room:
            room.remove(item[0])
            inventory.append(item[1])
        print "taken"
    else:
        print item, "doesn't exist in this game"

def look(room):
    place=areas[room]
    for i in place:
        print i

现在列表:

sword=["There is a sword here", "sword"]
room=["There is a table in the corner", sword[0]]
inventory=[]
areas=[room,bedroom,living_room]
tools=[sword, shield, axe]

tools是为了展示游戏中有什么可以拿走。 areasnoun 在列表中有多个项目,因为一个房间和一个项目的游戏很无聊,所以忽略 nounareas 中不是 swordroom。剑有两个列表的原因是sword[0]出现在room中,而sword[1]出现在inventory中。例如

print inventory
"sword"

look(room)
"There is a table in the corner"
"There is a sword here"

以及它在游戏中的样子:

C:\>look
"There is a table in the corner"
"There is a sword here"

我可以让 take(sword, room) 工作(如下所示)所以我知道这不是代码:

>>>room=["There is a table in the corner, sword[0]]
>>>inventory=[]
>>>look(room)
>"There is a table in the corner"
>"There is a sword here"
>>>print inventory
>

>>>take(sword, room)
>>>look(room)
>"There is a table in the corner"
>>>print inventory
>"sword"

我添加了“>>>”来显示什么是变量或函数调用,添加了“>”来显示响应。

既然已经涵盖了这些,我是否重写了一些代码,我在 raw_input 中做错了什么,我是否误解了 raw_input 的功能,或者如果没有,我该如何获得take sword要上班吗?

看起来你做得很好。我不确定我是否完全理解,但我认为您想跟踪用户所在的当前房间(我不确定您是否已经这样做,尚未指定).完成后,您已经将用户的输入存储在 a.

然后您想要按空格拆分输入(假设用户输入了正确的响应 "take sword")并检查第一个单词是否为 "take"。那么此时,如果第一个单词是"take",那么你就可以调用你的方法了。

a = raw_input("C:\>")
a = a.lower()
if a.split(' ')[0] == 'take': # split the array by spaces 
# (if the input is 'take sword', then [0] will be 'take' and [1] will be 'sword'
    take(a.split(' ')[1], current_room)