所以我正在寻找一种方法,以单个词典的形式将单独的项目添加到列表中,其中包含杂货项目的名称,价格和数量。我几周前才开始编程所以请原谅我可怕的代码和初学者错误。
grocery_item = dict()
current_item = dict()
grocery_history = []
choice = 0
stop = True
while stop == True:
current_item['name'] = str(input('Item name: '))
current_item['quantity'] = int(input('Amount purchased: '))
current_item['cost'] = float(input('Price per item: '))
grocery_history.append(current_item)
choice = str(input('Press c to continue or q to quit'))
if choice == 'c':
stop = True
else:
stop = False
print(grocery_history)
当我输入两个项目(即垃圾邮件和鸡蛋)的信息时,我得到以下输出:
[{'name': 'Eggs', 'quantity': 12, 'cost': 1.5}, {'name': 'Eggs', 'quantity':
12, 'cost': 1.5}]
输出只重复我输入的最新项目,而不是创建两个不同的项目。我正在制作一些基本的语义错误,我无法弄清楚如何填充" grocery_history"列出来自用户输入循环的不同项目。我尝试使用pythontutor.com寻求帮助,但却因为愚蠢而受到谴责。任何帮助表示赞赏。
答案 0 :(得分:0)
尝试这样做:
grocery_item = dict()
grocery_history = []
choice = 0
stop = True
while stop == True:
current_item = dict()
current_item['name'] = str(input('Item name: '))
current_item['quantity'] = int(input('Amount purchased: '))
current_item['cost'] = float(input('Price per item: '))
grocery_history.append(current_item)
choice = str(input('Press c to continue or q to quit'))
if choice == 'c':
stop = True
else:
stop = False
print(grocery_history)
通过在每个循环中创建一个新词典,您可以避免重复出现的错误。
答案 1 :(得分:0)
您应该将current_item
字典移到while
,例如:
while True:
current_item = {}
# accepts user inputs here
grocery_history.append(current_item)
choice = str(input('Press c to continue or q to quit'))
if choice != 'c':
break
其他一些说明:
choice = 0
。break
尽快停止循环,而无需再返回检查条件答案 2 :(得分:0)
你得到的是因为Python中的字典是可变对象:这意味着你可以在不创建全新字段的情况下修改字段。
如果您想更深入地了解可变对象和不可变对象之间的主要区别,请遵循此link。
这是您的代码略有修改,并且正在运行:
grocery_history = []
while True:
name = input('Item name: ').strip()
quantity = int(input('Amount purchased: '))
cost = float(input('Price per item: '))
current_item = {'name':name, 'quantity':quantity, 'cost':cost}
grocery_history.append(current_item)
choice = str(input('Press c to continue or q to quit: '))
if choice == 'q':
break
print(grocery_history)