1

因此,我正在寻找一种方法,以包含杂货商品名称、价格和数量的单个词典的形式将单独的项目添加到列表中。我几周前才开始编程,所以请原谅我可怕的代码和初学者的错误。

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 寻求帮助,但只是因为愚蠢而受到指责。任何帮助表示赞赏。

4

3 回答 3

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尽快停止循环,无需返回再次检查条件
于 2018-04-06T00:55:12.000 回答
0

你得到这个是因为 Python 中的字典是可变对象:这意味着你实际上可以修改它们的字段而无需创建一个全新的字段。

如果您想更深入地了解可变对象和不可变对象之间的主要区别,请点击此链接。

这是您的代码稍作修改,并且可以正常工作:

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)
于 2018-04-06T01:00:09.973 回答
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)

通过在每个循环中创建一个新字典,您将避免您看到的重复错误。

于 2018-04-06T00:50:49.843 回答