首页 > 解决方案 > 如何在 while 循环中附加列表而不覆盖以前的结果

问题描述

我正在为我的 Python 课程编写一个杂货清单脚本。一切看起来都不错,除了每次我在列表中附加一个新的字典条目时,我都会覆盖旧值。我已经在这里发现了很多类似的问题,但我不想承认我还不太明白很多答案。如果我自己问这个问题并了解上下文,希望我能更好地理解它。这是我的代码:

grocery_item = {}
grocery_history = []
stop = 'c'
while stop == 'c':
  item_name = input('Item name:\n')    
  quantity = input('Quantity purchased:\n')  
  cost = input('Price per item:\n')
  grocery_item = {'name':item_name, 'number': int(quantity), 'price': 
  float(cost)}
  grocery_history.append(grocery_item)   <<< # OVERWRITES OLD VALUES.
  stop = input("Would you like to enter another item?\nType 'c' for 
  continue 
  or 'q' to quit:\n")
grand_total = 0
for items in range(0,len(grocery_history)): 
  item_total = grocery_item['number'] * grocery_item['price']
  grand_total = grand_total + item_total
  print(str(grocery_item['number']) + ' ' + str(grocery_item['name']) + ' 
  ' + '@' + ' ' + '$' + str(grocery_item['price']) + ' ' + 'ea' + ' ' + 
  '$' + 
  str(item_total))
  item_total == 0
print('Grand total:$' + str(grand_total))

因此,不是每个输入都被保存和总计,它只是用输入的最后一个输入的值覆盖所有先前的输入,并将其累加起来,无论它在循环中迭代了多少次。我理解为什么它会覆盖以前的值并且它非常有意义。我只是不知道如何在仍然输出原始输入的同时更新列表。提前感谢您的帮助!

标签: python

解决方案


创建多个dict对象并将每个对象分配grocery_item给. Each替换该名称下的最后一个,这很好,因为您append每个 to grocery_history。但是,您永远不会使用list(除非确定要执行多少次总循环迭代);相反,您grocery_item再次使用它,它仍然具有您最后分配给它的任何单个值。

只需更换

for items in range(0,len(grocery_history)):

for grocery_item in grocery_history:

(反正你从来没有使用过items。)


推荐阅读