这是第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