Задание от Automam Boring Stuff с Python гл. 5 - PullRequest
1 голос
/ 25 апреля 2020

Я новичок в изучении python с книгой Автоматизация скучных вещей с Python от Альберта Суигарта.

inventory = {'arrows': 12, 'gold coins': 42, 'rope': 1, 'torches': 6, 'dagger': 1}

Из этого словаря мне нужно сделать вывод, подобный этому :

Inventory:
12 arrows
42 gold coins
1 rope
6 torches
1 dagger
Total number of items: 62

Пока я делаю что-то вроде этого и пытаюсь использовать методы из книги:

inventory = {'arrows': 12, 'gold coins': 42, 'rope': 1, 'torches': 6, 'dagger': 1}

def displayInventory(inventory):
    totalNum = 0
    for k, v in inventory.items():
        print(v, k)
        totalNum = totalNum + sum(inventory.values())
    print("Total items of inventory: ")
    return totalNum

print("Your inventory: ")
print(displayInventory(inventory))

Вывод:

Your inventory:
12 arrows
42 gold coins
1 rope
6 torches
1 dagger
Total items of inventory:
310

Почему мой totalNum такой большой?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Вы получаете totalNum отличается от ожидаемого, потому что на каждой итерации вы увеличиваете значение totalNum на 62, потому что sum(inventory.values()) вернет 62. Таким образом, после пяти итераций totalNum будет 310.

На всякий случай, если вам нужна более компактная версия кода, используйте:

print("Inventory:")
print("\n".join(f"{v} {k}"for k, v in inventory.items()))
print("Total number of items:", sum(inventory.values()))

Это печатает:

Inventory:
12 arrows
42 gold coins
1 rope
6 torches
1 dagger
Total number of items: 62
0 голосов
/ 25 апреля 2020

У вас есть 5 элементов в словаре. Ваши значения (12 + 42 + 1 + 6 + 1) = 62. 62 * 5 = 310.

Вы берете сумму всех инвентаризации.значений () каждый раз, когда вы go проходите через предмет , Если вы делаете это в пределах l oop, то оно должно быть

totalNum = totalNum + v

Если вы хотите сделать это вне l oop, тогда оно должно быть

def displayInventory(inventory):
    for k, v in inventory.items():
        print(v, k)
    print("Total items of inventory: ")
    return sum(inventory.values())
...