我正在制作游戏,其中一个命令,一个是拾取项目,不能正常工作。代码几乎检查项目是否在房间内,然后是否将其复制到玩家库存,然后从房间中删除该项目。但无论我尝试什么,它都不做任何事情或将密钥复制到字典中。
以下是代码:
def pickup(self, item):
conf = input('Do you want to pick up the ' + item.lower() + ': ')
if conf.lower() == 'y' or 'yes':
try:
self.inventory.update(room[self.room_number]['items'][item])
del room[self.room_number]['items'][item]
except KeyError:
print('You look everywhere but can\'t find a ' + item.lower())
else:
print('You consider it, but decide not to pick up the ' + item.lower())
当我打印库存字典时,我得到了这个
player.inventory
{
'type': 'weapon',
'equippable': True,
'value': 0,
'desc': 'a wooden stick, could be useful',
'name': 'Wooden Stick',
'perks': {
'defense': 0,
'health': 0,
'damage': 6,
'magic_damage': 0
}
}
或
{}
我想要的是:
player.inventory
{
'wooden stick':{
'type': 'weapon',
'equippable': True,
'value': 0,
'desc': 'a wooden stick, could be useful',
'name': 'Wooden Stick',
'perks': {
'defense': 0,
'health': 0,
'damage': 6,
'magic_damage': 0
}
}
有谁知道我怎么能得到这个结果。我尝试的任何东西似乎都没有用,我已经检查过是否有人已经回答了这个但却无法找到任何内容。
谢谢:)
答案 0 :(得分:2)
你使用了错误的功能。在这一行:
self.inventory.update(room[self.room_number]['items'][item])
update
实际上会将room[self.room_number]['items'][item]
中的所有键和值添加到self.inventory
。
相反,您希望将项目字典指定为库存字典中的值,并使用该项目的键。
所以你应该这样做:
self.inventory[item] = room[self.room_number]['items'][item]
或者更好的是,正如@MKesper指出的那样,你应该pop
密钥,以便在你把它放入清单时从房间的项目字典中删除它:
self.inventory[item] = room[self.room_number]['items'].pop(item, None)
这将尝试从字典中获取item
,如果未找到,则会返回None
。如果您删除None
,那么您将拥有KeyError
,并且根据item
作为有效密钥的信心,KeyError
可能会更好地抓住sql.DB
出现错误键名时的异常情况。
答案 1 :(得分:0)
您可以使用更新方法:
dict1.update(dict2)