python - 如何在字典和列表上调用两个单独的函数?
问题描述
我正在做第 5 章中的练习项目,将无聊的东西自动化。它要求定义一个带有两个参数(一个字典和一个列表)的函数,并要求在字典键和列表值之间的每次常见情况下更新数字字典值。
当字典作为参数传递时,我尝试定义一个函数以基于值键对返回列出的清单(第一个实践项目)。然后我创建了第二个函数来说明要添加到字典清单中的其他项目,作为列表传递。
backpack = {'gold coin':42, 'rope':1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
def addToInventory(inventory, addedItems):
for item in addedItems:
inventory.setdefault(item,0)
inventory[item] = inventory[item] + 1
def displayInventory(inv):
print('Inventory:')
itemTotal = 0
for k, v in inv.items():
print(v, k, sep= ' ')
itemTotal += v
print('Total number of items:' + str(itemTotal))
backpack = addToInventory(backpack, dragonLoot)
displayInventory(backpack)
我收到以下错误:
for k, v in inv.items():
AttributeError: 'NoneType' object has no attribute 'items'
我已经尝试过但看不到错误,特别是从第一个项目开始,返回值键库存,工作正常,并且与 displayInventory() 函数基本相同。
我本可以很容易地找到解决方案,但想看看我具体哪里出错了。谢谢
解决方案
在您的addToInventory
函数中,您不会返回修改后的字典,但您希望在最后在代码中调用它时返回它。因为函数中没有返回任何内容,所以它默认返回None
,所以你的displayInventory
函数试图循环一个NoneType
变量。因为在 Python 中字典是通过引用传递的,所以您可以修改字典而无需返回任何内容。backpack
调用后只需删除分配addToInventory
:
addToInventory(backpack, dragonLoot)
当你这样做时,我们因此得到预期的输出:
Inventory:
45 gold coin
1 rope
1 dagger
1 ruby
Total number of items:48
推荐阅读
- python - 使用python从文本文件中提取字符串
- r - 从 geom-bar 中删除 NA
- python - 如何在 Pycharm IDE 中启用完全 pyzmq 自动建议?
- php - Symfony 3.2 FOSElasticSearch 5.x
- google-bigquery - BigQuery 日期需要多少字节
- python - 熊猫数据阅读器安装失败
- javascript - 将数字四舍五入到最接近的 9
- javascript - Internet Explorer 中的数据选择器出错
- javascript - insertBefore 不更新 rowIndex/nextSibling 属性
- go - 如何使用 gorilla mux 实现不区分大小写的 URL 匹配