我在这个程序中的第二个功能遇到了一些麻烦,所以我从网上找到了一些提示(在reddit上)。我不太喜欢它,但现在似乎无法想出更好的方法。
“编写一个名为addToInventory的函数(inventory,addedItems),其中inventory参数是表示玩家库存的字典(与上一个项目中一样),addedItems参数是dragonLoot之类的列表.addToInventory()函数应该返回表示更新库存的字典。请注意,addedItems列表可以包含同一项的多个。“
这就是我所拥有的:
stuff = {'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}
def displayInventory(inventory): # This function is correct.
print("Inventory:")
item_total = 0
for k, v in inventory.items():
item_total = item_total + v
print(str(stuff.get(k, 0)) + ' ' + k)
print("Total number of items: " + str(item_total))
displayInventory(stuff)
def addToInventory(inventory, addedItems):
for i in range(len(addedItems)):
inv.setdefault(addedItems[i], 0)
inv[addedItems[i]] = inv[addedItems[i]] + 1
return inv
inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
displayInventory(inv)
当前输出:
清单: 1根绳子 42金币 6火炬 12箭头 1把匕首 项目总数:62 库存: 1根绳子 42金币 1把匕首 0红宝石 项目总数:48
所以,就像它一样,只需要打印1颗红宝石和45枚金币。它做了添加,但打印0红宝石,并保持在42金币。如果有人有更好的方法来编写第二个函数,我非常希望看到它,因为我对这个函数并不满意。
答案 0 :(得分:0)
您的displayInventory
功能会再次直接在stuff
中查找当前值,这不是之前更新过的广告资源。
我不知道你为什么这样做,因为你在循环中有这个值,但是然后忽略它。你应该使用那个值。
for k, v in inventory.items():
item_total = item_total + v
print(v + ' ' + k)