我正在尝试创建购物清单。目标是逐个键入每个杂货店,然后列出“购物已完成。”,但是当我编写代码时,我只能从列表中键入第一个杂货店,然后其余的杂货店列表会自动将其自身列出到最后一个。我的代码有什么问题?
listanamirnica = ["Bananas 1kg", "Bread 5x", "Milk 1l", "Apples 3kg"]
print("Things i need to buy: ",listanamirnica)
num_shoping = 0
num_items = len(listanamirnica)
print("Total number of items need to buy: ", num_items)
i_buyed = input("I buyed: ")
while num_shoping != num_items:
if i_buyed.lower() == "bananas":
del listanamirnica[0]
print("Left to buy: ", listanamirnica)
num_shoping += 1
continue
elif i_buyed.lower() == "bread":
del listanamirnica[1]
i_buyed = input("I buyed: ")
print("Left to buy: ", listanamirnica)
num_shoping += 1
continue
elif i_buyed.lower() == "milk":
del listanamirnica[2]
i_buyed = input("I buyed: ")
print("Left to buy: ", listanamirnica)
num_shoping += 1
continue
elif i_buyed.lower() == "apples":
del listanamirnica[3]
i_buyed = input("I buyed: ")
print("Left to buy: ", listanamirnica)
num_shoping += 1
continue
print("You buyed all groceries.")
我希望在输入“香蕉”后再次输入“我购买:”,然后输入mlik苹果面包。
答案 0 :(得分:2)
您的代码中的一些问题,下面已更正
listanamirnica = ["Bananas 1kg", "Bread 5x", "Milk 1l", "Apples 3kg"]
print("Things i need to buy: ",listanamirnica)
num_shoping = 0
num_items = len(listanamirnica)
print("Total number of items need to buy: ", num_items)
while num_shoping != num_items:
i_buyed = input("I buyed: ")
if i_buyed.lower() == "bananas":
listanamirnica.remove("Bananas 1kg")
print("Left to buy: ", listanamirnica)
num_shoping += 1
elif i_buyed.lower() == "bread":
listanamirnica.remove("Bread 5x")
print("Left to buy: ", listanamirnica)
num_shoping += 1
elif i_buyed.lower() == "milk":
listanamirnica.remove("Milk 1l")
print("Left to buy: ", listanamirnica)
num_shoping += 1
elif i_buyed.lower() == "apples":
listanamirnica.remove("Apples 3kg")
print("Left to buy: ", listanamirnica)
num_shoping += 1
print("You buyed all groceries.")
我所做的更改:
while
内部移动了输入,以便每次迭代都要求用户输入inputs
案例中删除了if
。continue
语句(不必要),listanamirnica[0]
并添加了listanamirnica.remove("Bananas 1kg")
,因为一旦删除某项,索引将发生变化;如果您未按指定的顺序删除,则0
索引将使您难以编码将删除错误的项目。答案 1 :(得分:0)
您只需要将i_buyed = input("I buyed: ")
放在while
循环中即可。
并将其从每个if/elif
中删除,它更加清晰和井井有条。另外,您还需要一遍又一遍地写同一行。另外,由于您在while循环中有elif
,因此您不再需要continue
,因为它不会输入其他if/elif
并只需完成迭代即可。
listanamirnica = ["Bananas 1kg", "Bread 5x", "Milk 1l", "Apples 3kg"]
print("Things i need to buy: ",listanamirnica)
num_shoping = 0
num_items = len(listanamirnica)
print("Total number of items need to buy: ", num_items)
while num_shoping != num_items:
i_buyed = input("I buyed: ")
if i_buyed.lower() == "bananas":
del listanamirnica[0]
print("Left to buy: ", listanamirnica)
num_shoping += 1
elif i_buyed.lower() == "bread":
del listanamirnica[1]
print("Left to buy: ", listanamirnica)
num_shoping += 1
elif i_buyed.lower() == "milk":
del listanamirnica[2]
print("Left to buy: ", listanamirnica)
num_shoping += 1
elif i_buyed.lower() == "apples":
del listanamirnica[3]
print("Left to buy: ", listanamirnica)
num_shoping += 1
print("You buyed all groceries.")
答案 2 :(得分:0)
有两个问题,首先,您已经注意到自己,然后第一个条件块中缺少input()
语句。
第二个问题来自删除列表中项目的方式。使用del
有很大的风险,您应该避免使用它。特别是,如果您从输入bread
开始,一切都很好,但是删除项目时,列表的索引会移动。因此apples
将处于2
的位置。
为了避免这种情况,您可以采取两种方法:
1.您可以使用无序设置替换列表,但是可以按名称引用元素:
listanamirnica = {"Bananas 1kg", "Bread 5x", "Milk 1l", "Apples 3kg"}
...
listanamirnica.remove("Bread 5x")
只需将remove
语句放在相应修改的每个条件块中即可。
listanamirnica = [i for i in listanamirnica if i != "Bread 5x"]
第一种方法绝对是可取的,因为在第二种方法中,您每次都创建一个新列表
答案 3 :(得分:-1)
您需要将输入内容移至循环中,然后再次被询问