Python列表转字典练习代码运行结果底部出现'none'求助
问题原因及解决办法
嘿,作为《Python编程快速上手》(Automate the boring stuff with python)的学习者,你这段代码的功能逻辑其实没问题,只是在函数调用的地方踩了个小坑~
为什么会出现None?
你的函数addToInventory内部已经完成了所有的打印操作,但函数没有显式的return语句。在Python中,任何没有返回值的函数都会默认返回None。而你最后一行代码用print(addToInventory(inv, dragonLoot)),相当于:
- 先执行函数里的所有打印逻辑,输出库存信息
- 再打印这个函数的返回值(也就是默认的
None)
所以结果底部才会出现这个多余的None。
两种解决方法
方法一:直接调用函数(最简便)
把最后一行的代码从:
print(addToInventory(inv, dragonLoot))
改成:
addToInventory(inv, dragonLoot)
这样就只会执行函数内部的打印内容,不会额外输出函数的返回值了。
方法二:给函数添加返回值(可选)
如果你希望函数能返回更新后的库存字典,同时保留内部的打印逻辑,可以在函数末尾加上return语句:
def addToInventory(inventory, addedItems): for i in addedItems: if i == 'gold coin': inventory['gold coin'] += 1 else: inventory.setdefault(i, 0) inventory[i] += 1 print('Inventory:') total_item = 0 for k, v in inventory.items(): print(str(v) + ' ' + k) total_item += v print('\nTotal number of items: ' + str(total_item)) return inventory # 添加返回语句 inv = {'gold coin': 42, 'rope': 1} dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby'] addToInventory(inv, dragonLoot) # 直接调用即可
这样就算你不小心用了print(addToInventory(...)),也会打印出更新后的库存字典,而不是None。不过更推荐第一种方法,因为函数已经负责输出内容了,没必要再用print包裹调用。
内容的提问来源于stack exchange,提问作者user109503
相关产品推荐
相关产品推荐

