2016-03-19 3 views
0

У меня есть два словаря, один представляет собой инвентарь игрока, а другой представляет собой инвентарь дракона. Я пытаюсь взять два словаря и объединить их. Затем отобразите эти два словаря в качестве нового инвентаря игрока. Я добавил свой код ниже, и я продолжаю получать следующую ошибку.Объект nonetype не имеет атрибутов 'items' при прохождении через словарь

Traceback (most recent call last): 
    File "/Users/DakotaDickey/Documents/Python Projects /Examples/FantasyGameAddToInventory.py", line 38, in <module> 
    displayInventory(inv) 
    File "/Users/DakotaDickey/Documents/Python Projects /Examples/FantasyGameAddToInventory.py", line 27, in displayInventory 
    for k, v in inventory.items(): 
AttributeError: 'NoneType' object has no attribute 'items' 

мой код:

#FantasyGameAddToInventory 


def addToInventory(inventory, addedItems): 
    addedItemsdict = {} 
    for item in addedItems: 
     x = addedItems.count(item) 
     if item not in addedItemsdict: 
      addedItemsdict[item] = 1 
     else: 
      addedItemsdict[item] = x 

    for k, v in addedItemsdict.items(): 
     if k in inventory: 
      x = inventory[k] 
      inventory[k] = v + x 
     else: 
      inventory[k] = v 
    inv = inventory   
    print(inv) 

def displayInventory(inventory): 
    print('Inventory:') 
    item_total = 0 

    for k, v in inventory.items(): 
     print(k,v) 
     item_total = item_total + v 



    print("Total number of items: " + str(item_total)) 

inv = {'gold coin' : 42 , 'rope': 1} 
dragonLoot = ['gold coin', 'dagger' , 'gold coin', 'gold coin', 'ruby'] 
inv = addToInventory(inv, dragonLoot) 
displayInventory(inv) 

Выход Im пытается произвести следующим образом. Inventory:

45 золотая монета

1 веревка

1 рубин

1 Кинжал

Всего товаров: 48

ответ

2

Ваша функция addToInventory() возвращает None, который вам назначить на inv:

inv = addToInventory(inv, dragonLoot) 

inv Теперь устанавливается в None и вы передаете, что displayInventory().

Добавить return inv в конце addToInventory().

Помните, что печать - это не то же самое, что возвращение; печать записывает данные на ваш терминал, вызывающая функция не получает эти данные.

+0

Работает отлично! Благодаря! – DakotaDickey44