请问,为什么在我的代码中“爆米花”不被“可乐”取代?

2024-04-26 18:45:46 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我正在编写一个程序,以获取商店订购的商品总数。我为可用项创建了一个名为menu的字典,但如果在订单列表中排序的项不在字典“menu”的键名中,则该项应替换为Coke

我的目的是将项目转换为它们的价格,即字典中相应的值,然后进行必要的合计

但看起来,就像在这个例子中,爆米花并没有让路😃😃😃. 请帮忙

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)

Tags: in订单程序列表字典排序商品商店
3条回答

i变量仅表示iterable中的当前项,要替换数组中的值,可以使用其索引enumerate给出tuple(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)

在for循环中,您所做的是循环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)

您的代码不会将爆米花替换为可口可乐,因为您没有操作列表a

代码中的i是列表中对象的副本ai不引用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']

相关问题 更多 >