自动化无聊的东西,第5章实践项目

时间:2016-06-01 10:37:02

标签: python

我在这个程序中的第二个功能遇到了一些麻烦,所以我从网上找到了一些提示(在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金币。如果有人有更好的方法来编写第二个函数,我非常希望看到它,因为我对这个函数并不满意。

1 个答案:

答案 0 :(得分:0)

您的displayInventory功能会再次直接在stuff中查找当前值,这不是之前更新过的广告资源。

我不知道你为什么这样做,因为你在循环中有这个值,但是然后忽略它。你应该使用那个值。

for k, v in inventory.items():
    item_total = item_total + v
    print(v + ' ' + k)