Python Grocery列表Python 3 Codio挑战

时间:2018-04-06 00:44:27

标签: python codio

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

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

3 个答案:

答案 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)