Пожалуйста, почему «Попкорн» не заменен на «Кокс» в моем коде? - PullRequest
2 голосов
/ 26 марта 2020

Я работаю над программой, например, чтобы получить общее количество товаров, заказанных в магазине. Я создал словарь под названием меню для доступных элементов, но если элемент, упорядоченный в списке заказов, не входит в число ключевых слов моего словаря «меню», этот элемент следует заменить на колу.

Мое намерение состоит в том, чтобы преобразовать элементы в их цены, которые являются соответствующими значениями в словаре и впоследствии дают необходимую сумму.

Но похоже, что, как в примере, попкорн не уступает ». Просьба помочь.

a = ["Pizza", "Cheeseburger", "Water", "Popcorn"]
menu = {"Nachos":6,"Pizza":6,"Cheeseburger":10,"Water":4,"Coke":5}
for i in a:
   if not i in menu:
      i = "Coke"
print(a)

Ответы [ 4 ]

2 голосов
/ 26 марта 2020

Переменная i просто представляет текущий элемент из итерируемого, чтобы заменить значение в массиве, вы можете использовать его индекс, enumerate дает кортеж (index, element)

order = ["Pizza", "Cheeseburger", "Water", "Popcorn"]
menu = {"Nachos": 6, "Pizza": 6, "Cheeseburger": 10, "Water": 4, "Coke": 5}
for idx, item in enumerate(order):
    if item not in menu:
        order[idx] = "Coke"
print(order) # ['Pizza', 'Cheeseburger', 'Water', 'Coke']

Но вы буду искать цены чуть дальше, вы можете сделать это в том же кадре

total = 0
for item in order:
    total += menu.get(item, menu["Coke"]) # if item not present, get price of Coke
print(total)
1 голос
/ 26 марта 2020

когда вы перебираете свой список a с помощью for l oop, который вы присваиваете на каждом шаге итерации переменной i последовательное значение из a, поэтому, если вы измените значение переменная i вы не меняете значение с a, чтобы изменить значения с a, вам нужно получить к ним доступ по индексу:

a = ["Pizza", "Cheeseburger", "Water", "Popcorn"]
menu = {"Nachos":6,"Pizza":6,"Cheeseburger":10,"Water":4,"Coke":5}
for i in range(len(a)):
    if  a[i] not in menu:
        a[i] = "Coke"
print(a)

вывод:

['Pizza', 'Cheeseburger', 'Water', 'Coke']

или вы можете использовать понимание списка:

a = [e if e in menu else 'Coke' for e in a]
# ['Pizza', 'Cheeseburger', 'Water', 'Coke']

, чтобы вычислить общую сумму, которую вы можете использовать:

sum(map(menu.get, a))
# 25
1 голос
/ 26 марта 2020

Ваш код не заменяет Popcorn на Coke, поскольку вы не управляете списком a.

i в вашем коде является копией объектов в списке a. i не относится к объектам в a. Таким образом, значение обновления i не обновляет объект в списке a.

Вам необходимо манипулировать объектами в списке a. Проверьте код ниже:

a = ["Pizza", "Cheeseburger", "Water", "Popcorn"]
menu = {"Nachos":6,"Pizza":6,"Cheeseburger":10,"Water":4,"Coke":5}
for n, i in enumerate(a):
   if not i in menu:
      a[n] = "Coke"
print(a)

Результат:

['Pizza', 'Cheeseburger', 'Water', 'Coke']
1 голос
/ 26 марта 2020

То, что вы делаете в вашем for-l oop, это то, что вы проходите l oop через значение каждого элемента в a. Затем внутри вашего оператора if вы заменяете значение , а не исходную запись в a. Вместо этого вы должны ссылаться на запись в a, используя ее индекс.

Попробуйте это

a=["Pizza", "Cheeseburger", "Water", "Popcorn"]
menu = {"Nachos":6,"Pizza":6,"Cheeseburger":10,"Water":4,"Coke":5}
for i in range(len(a)):
   if not a[i] in menu:
      a[i]="Coke"
print(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...