幻想游戏库存列表到字典的输出问题

问题描述 投票:0回答:2

我正在写《用 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
。我实在不明白为什么?

python python-3.x list function dictionary
2个回答
0
投票

是因为这条线,

print(addToinventory(inv, dragonloot))

在这里,您正在尝试打印

return value
addToinventory()
。并且
addToinventory()
不会返回任何内容,因此您正在打印
None

要删除

None
,请将
print(addToinventory(inv, dragonloot))
替换为
addToinventory(inv, dragonloot)


0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.