练习程序功能



这是第120页第5章"用python自动化无聊的东西"一书的第二个练习部分。任务是对addToInventory功能进行编程。其余的差不多都给出了。Python告诉我:

语法错误:无法分配给函数调用

在这一行inventory(addedItems[k]) = inventory(addedItems[k]) + 1.我尝试了几个小时,但我不知道我的错误在哪里。在我看来,这条线根据dragonLoot中的当前物品将物品/库存增加 1 似乎是合乎逻辑的。

def displayInventory(Inventory): #rpints out the whole inventory
    print("Inventory:")
    item_total = 0
    for k, v in Inventory.items():
        item_total = item_total + stuff.get(k,v)
        print(k, v)
    print("Total number of items: " + str(item_total))
def addToInventory(inventory, addedItems): #merges the dragonloot box into our stuff/inventory
    for k in range(len(addedItems)):
        inventory.setdefault(addedItems[k], 0) #creates empy keynames in the stuff/inventory dictionary
        inventory(addedItems[k]) = inventory(addedItems[k]) + 1
    return (inventory)
stuff = {"gold": 42, "rope": 1}
dragonLoot = ["gold", "dagger", "gold", "gold", "ruby"]
stuff = addToInventory(stuff, dragonLoot)
displayInventory(stuff)

您正在尝试使用字典,为此您需要使用 [] ,而不是 () 。在您的生产线inventory(addedItems[k]) = inventory(addedItems[k]) + 1中切换这些

def displayInventory(Inventory): #rpints out the whole inventory
    print("Inventory:")
    item_total = 0
    for k, v in Inventory.items():
        item_total = item_total + stuff.get(k,v)
        print(k, v)
    print("Total number of items: " + str(item_total))
def addToInventory(inventory, addedItems): #merges the dragonloot box into our stuff/inventory
    for k in range(len(addedItems)):
        inventory.setdefault(addedItems[k], 0) #creates empy keynames in the stuff/inventory dictionary
        inventory[addedItems[k]] = inventory[addedItems[k]] + 1
    return (inventory)
stuff = {"gold": 42, "rope": 1}
dragonLoot = ["gold", "dagger", "gold", "gold", "ruby"]
stuff = addToInventory(stuff, dragonLoot)
displayInventory(stuff)

正如评论所暗示的那样,这是一个错字。 ()(在此上下文中)调用函数,并且由于 Python 不执行类型检查,因此inventory(addedItems[k]) = inventory(addedItems[k]) + 1的一部分inventory(addedItems[k])即使您稍后发送字典作为参数也是如此。由于无法分配给函数调用,因此这是一个 SytaxError,并且代码无法编译。你的意思是使用 [] 从字典中获取元素:

inventory[addedItems[k]] = inventory(addedItems[k]) + 1

最新更新