从杂货店列表中输入一个杂货店后,无法再次显示输入内容

时间:2019-04-16 11:39:55

标签: python

我正在尝试创建购物清单。目标是逐个键入每个杂货店,然后列出“购物已完成。”,但是当我编写代码时,我只能从列表中键入第一个杂货店,然后其余的杂货店列表会自动将其自身列出到最后一个。我的代码有什么问题?

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苹果面包。

4 个答案:

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

我所做的更改:

  1. while内部移动了输入,以便每次迭代都要求用户输入
  2. 从您的inputs案例中删除了if
  3. 删除continue语句(不必要),
  4. 已删除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语句放在相应修改的每个条件块中即可。

  1. 如果您需要通过以下方式更新列表(再次用于面包部分):
listanamirnica = [i for i in listanamirnica if i != "Bread 5x"]

第一种方法绝对是可取的,因为在第二种方法中,您每次都创建一个新列表

答案 3 :(得分:-1)

您需要将输入内容移至循环中,然后再次被询问