自动化枯燥的东西,第5章实践项目

2024-06-02 16:53:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这个程序的第二个函数上遇到了一点问题,所以我从网上(reddit)找到了一些提示。我不太喜欢,但现在似乎想不出更好的办法。

“编写一个名为addToInventory(inventory,addedItems)的函数,其中inventory参数是一个字典,表示玩家的inventory(就像在上一个项目中一样),addedItems参数是一个类似于dragonLoot的列表。函数的作用是:返回一个字典来表示更新的库存。请注意,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箭头 一把匕首 项目总数:62 库存: 1根绳子 42金币 一把匕首 0红宝石 项目总数:48

所以,照原样,只要印1枚红宝石和45枚金币就行了。它做加法,但印0红宝石和保持在42金币。如果有人有更好的方法来编写第二个函数,我非常希望看到它,因为我对这个函数一点也不满意。


Tags: 项目函数库存itemtotalinventorycoinstuff
1条回答
网友
1楼 · 发布于 2024-06-02 16:53:58

您的displayInventory函数再次直接在stuff中查找当前值,这不是以前更新的清单。

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

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

相关问题 更多 >