我正在写《用 Python 自动化无聊的事情》一书。我得到了预期的结果,但我也得到了额外的
None
值。说明如下:
奇幻游戏库存列表到字典功能:
想象一条被击败的龙的战利品被表示为这样的字符串列表:
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
编写一个名为
addToInventory(inventory, addedItems)
的函数,其中 inventory
参数是代表玩家库存的字典(如上一个项目), addedItems
参数是类似 dragonLoot
的列表。 addToInventory()
函数应返回代表更新库存的字典。请注意,addedItems 列表可以包含多个相同的项目。你的代码可能看起来像这样:
def addToinventory(inventory, addedItems):
inv = {'gold coin': 42, 'rope': 1}
dragonloot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToinventory(inv, dragonloot)
displayInventory(inv)
之前的程序(使用之前项目中的
displayInventory()
函数)将输出以下内容:
Inventory:
45 gold coin
1 rope
1 ruby
1 dagger
Total number of items: 48
我的代码如下
def addToinventory(inventory, addedItems):
for i in addedItems:
inventory.setdefault(i, 0)
inventory[i] += 1
itotal = 0
for k, v in inventory.items():
print(str(v), k)
itotal += v
print('Total number of items', itotal)
inv = {'gold coin': 42, 'rope': 1}
dragonloot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
print(addToinventory(inv, dragonloot))
我的输出是这样的:
45 gold coin
1 rope
1 dagger
1 ruby
Total number of items 48
None
在输出的末尾,我有一个悬空的
None
。我实在不明白为什么?
是因为这条线,
print(addToinventory(inv, dragonloot))
。
在这里,您正在尝试打印
return value
的 addToinventory()
。并且 addToinventory()
不会返回任何内容,因此您正在打印 None
。
要删除
None
,请将 print(addToinventory(inv, dragonloot))
替换为 addToinventory(inv, dragonloot)
。
None 输出是因为您正在打印 addToinventory 函数的操作,并且它没有返回任何内容,这就是它默认返回 None 的原因。 将您的功能更改为:
def addToinventory(inventory, addedItems):
for i in addedItems:
inventory.setdefault(i, 0)
inventory[i] += 1
return inventory
我不知道你是如何拥有 displayInventory 功能的,但在这里我给你留下一个解决方案:
def displayInventory(inventory):
print("Inventory:")
item_total = 0
for k, v in inventory.items():
print('%s %s' % (v,k))
item_total += v
print("Total number of items: %s" % item_total)
更改这行代码:
print(addToinventory(inv, dragonloot))
为此:
inv = addToinventory(inv, dragonloot)
并添加另一个将打印库存的:
displayInventory(inv)
输出:
Inventory:
45 gold coin
1 rope
1 dagger
1 ruby
Total number of items: 48