我目前正在进行第二次练习。 https://automatetheboringstuff.com/chapter5(“为幻想游戏库存列出字典功能”)
任务是将列表中的项添加到字典中。
出于某些奇怪的原因,我的for循环没有遍历整个列表。你能帮我理解原因吗?
def addToInventory(inventory, addedItems):
for i in addedItems:
if i in inventory:
inventory[i] = inventory[i] + 1
else:
inventory[i] = 1
return inventory
inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
print(inv)
当我运行此代码时,结果为“{'rope':1,'gold coin':43}” 因此,金币钥匙的价值增加1(不应该增加3),并且忽略'匕首'和'红宝石'。
我在其他地方找到了一个可行的解决方案,但我真的很想知道为什么这段代码不起作用。
提前致谢。
答案 0 :(得分:2)
def addToInventory(inventory, addedItems):
for i in addedItems:
if i in inventory:
inventory[i] = inventory[i] + 1
else:
inventory[i] = 1
return inventory
(return
之后的for
,而不是if
之后。)
答案 1 :(得分:0)
问题是简单的缩进错字。现在,如果我们尝试编写更高效/ pythonic代码,我们可以使用collections.Counter
这是一个专门的字典类型来计算项目。您的代码可以缩短和优化:
from collections import Counter
inv = Counter({'gold coin': 42, 'rope': 1})
inv.update(['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby'])
print(inv)
结果:
Counter({'gold coin': 45, 'rope': 1, 'dagger': 1, 'ruby': 1})