В вашем цикле for
внимательно посмотрите на else
stuite, где вы используете j
:
for i, k in inventory.copy().items():
for j, l in dictionaryHelp.items():
if i == j:
# ...
else:
inventory[j] = l
Вы перебираете клавиши для inventory()
и для каждый ключ вы зацикливаетесь на dictionaryHelp.items()
.И каждый раз, когда значение i == j
равно , а не , вы устанавливаете inventory[j] = l
.Неважно, что вы установили 'golden coin'
на 45 на некоторую точку , вы просто заменили этот результат.
Однако вам не нужно использовать двойной цикл.Словари отлично при тестировании, если заданный ключ уже есть, просто используйте key in dictionary
;это правда, если вы можете получить значение для этого ключа из этого словаря.
Это означает, что вам не нужно зацикливаться на обоих словарях, просто используйте ключ из одного, чтобы увидеть, есть ли номер для элемента в другом:
for item, count in dictionaryHelp.items():
if item in inventory:
inventory[item] = inventory[item] + count
else:
inventory[item] = count
- Больше нет необходимости копировать
inventory
, потому что вы не зацикливаетесь на этом сейчас. Вместо проверки на item in inventory
, вы можете использовать dict.get()
вместо этого используется значение по умолчанию 0
:
for item, count in dictionaryHelp.items():
inventory[item] = inventory.get(item, 0) + count
dict.get()
аналогично использованию dict.setdefault()
, но без установки значения ключа в словаре по умолчанию.
Вам не нужно создавать dictionaryHelp
.Просто добавьте количество непосредственно в ваш inventory
словарь.Я использую тот же трюк dict.get()
, чтобы начать с 0
, если в инвентаре еще не было добавленного предмета:
def addToInventory(inventory, addedItems):
for item in addedItems:
inventory[item] = inventory.get(item, 0) + 1
return inventory