Python,找不到功能

时间:2013-06-19 02:48:03

标签: python function dictionary traceback

目前我正在参加python的在线课程,只有大约1/3的路程,我决定尝试用我迄今学到的东西做点什么。现在遇到错误。我正在一个房子里创建一个基于文本的冒险游戏。每个房间都是独立的功能。 EX:

def hallway():
hallway_direction = raw_input('blahblah')
if hallway_direction == 'n':
    living_room()

虽然我有一个房间,你需要一个火炬进入。我使用字典来保存房间的任何值,这就是我所拥有的。

global rooms

rooms = {}
rooms['first_room'] = {'note' : False}
rooms['old_door'] = {'boots' : False}
rooms['first_again'] = {'torch' : False}
rooms['first_again'] = {'seen' : False}

在另一个房间里,它把火炬设为真,但我遇到的问题是,如果你没有火炬我需要它带你回到大厅

def fancy_door():
    raw_input('You open the door, the inside is pitch black. You need a source of light before you can enter.')
    if rooms['first_again']['torch']:
        raw_input('You light the torch and step inside, the room is bare, only a table with a ring in the center.')
        choice5_r = raw_input('Do you take the ring? Y/N ("back" to leave)')
        choice5_r = choice5_r.lower()
        if choice5_r == 'y':
            raw_input('Some text here')
            darkness()
        elif choice5_r == 'n':
            raw_input('You leave the ring as it is.')
            fancy_door()
        elif choice5_r == 'back':
            hall()
        else:
            raw_input('Not a valid option')
            fancy_door()
    else:
        hall()

当我运行时,我收到此错误:

Traceback (most recent call last):
File "<stdin>", line 247, in <module>
File "<stdin>", line 23, in first_room
File "<stdin>", line 57, in hall
File "<stdin>", line 136, in fancy_door
KeyError: 'torch'

在第247行,它调用first_room(),直到此时为止。 23呼叫大厅()工作到这一点。 57调用fancy_door(),它应该工作它看起来像其他门功能一样,它们工作正常。第136行是“if rooms ['first_again'] ['torch']:”

如果问题不在这里我可以在这里发布整个代码或者pasbin,我不仅因为它是230行长。

如果有人可以帮助我,我会非常感激。

另外,请原谅糟糕的代码,我知道它可能没有遵循正确的约定,但就像我说的,我是Python新手,一般编程。这是我写过的第一件事。 提前谢谢!

3 个答案:

答案 0 :(得分:1)

在全局变量的定义中,您定义了两次房间['first_again']。

每次为dict的元素赋值:

rooms['first_again'] = #something

你覆盖了之前的内容。

这是说

KeyError: 'torch'

因为该对象不再具有名为torch的元素。

尝试将其更改为:

rooms['first_again'] = {'torch' : False, 'seen' : False}

或者,如果您稍后需要向该元素添加值,您可以执行以下操作:

rooms['first_again'] = {'torch' : False}
rooms['first_again']['seen'] = False

答案 1 :(得分:0)

您已经分配了rooms['first_again']两次。

rooms['first_again'] = {'torch' : False}
rooms['first_again'] = {'seen' : False}

也许应该是:

rooms['first_aggin'] = {}
rooms['first_again']['torch'] = False
rooms['first_again']['seen'] = False

答案 2 :(得分:0)

这里的线索是KeyError: 'torch'。当您尝试访问不存在的字典中的键时会发生此错误。

看起来问题在于你如何处理rooms['first_again']。您显示以下代码:

rooms['first_again'] = {'torch' : False}
rooms['first_again'] = {'seen' : False}

rooms是一个包含多个键的字典,其中一个是'first_again'。引用rooms['first_again']时,检索与此键对应的对象。你在这里真正做的是嵌套另一本字典。

第一个作业将字典{'torch' : False}分配给rooms['first_again']。第二个赋值执行非常相似但它会覆盖第一个赋值。包含火炬值的对象不再存在!

如果您希望在同一个键上有多个值,请将这些值放在一个字典中。

rooms['first_again'] = { 'torch' : False, 'seen' : False }

现在,您可以在原始代码中完全按照您的尝试引用这些值。