目前我正在参加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新手,一般编程。这是我写过的第一件事。 提前谢谢!
答案 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 }
现在,您可以在原始代码中完全按照您的尝试引用这些值。