python - 如何在 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))
因此,不是每个输入都被保存和总计,它只是用输入的最后一个输入的值覆盖所有先前的输入,并将其累加起来,无论它在循环中迭代了多少次。我理解为什么它会覆盖以前的值并且它非常有意义。我只是不知道如何在仍然输出原始输入的同时更新列表。提前感谢您的帮助!
解决方案
您创建多个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
。)
推荐阅读
- xamarin - 如何在 Xamarin 表单上使用 SkiaSharp 加载文件 .svg?
- python - 一个客户端有两个服务器套接字连接python
- objective-c - 无法编译使用 Objective-C 包的 Swift 包
- laravel - 在 Laravel 中构建“基于驱动程序”的模型
- c - 使用 XC32 预留闪存空间
- c# - 检查必须有特殊要求的输入
- wso2 - WSO2 ESB 在中介中读取 OperationName 属性
- python - 如何使用导入函数中的全局变量
- java - 如何拆分运算符的方程式但保留负数?
- arrays - Perl 解析带有数组的 json