我正在处理循环列表的序列,并询问用户有关列表中每个项目的问题。根据答案,序列应该做3件事之一:
1. Continue on to the next item
2. Delete the item at the present index
3. Display and error message, restart
到目前为止,我已经使循环工作几乎我需要它,但它仍然没有按照我想要的方式运行,我不确定我在哪里错了。
以下是我所拥有的:
fruit_list = ["Apples", "Pears", "Oranges", "Peaches"]
item = 1
while item < len(fruit_list):
for val in fruit_list:
user_resp = input("Do you like " + str(val) + "? ")
print()
if user_resp != "yes" and user_resp != "no":
print("Please only answer with 'yes' or 'no'.")
item+=1
break
elif user_resp == "yes":
item+=1
continue
elif user_resp == "no":
fruit_list.remove(val)
item+=1
continue
我遇到的问题是:
我使用变量&#34; item&#34;尝试将while循环限制为循环,直到列表中的所有项目都循环通过,但如果用户输入了错误的答案,我希望能够继续问同样的问题,直到他们回答“是”和“#34 ;或&#34;不&#34;。如果答案不是&#34;是&#34;我现在所拥有的只是突破了循环。或&#34;不&#34;。
当用户输入&#34; no&#34;序列应该删除刚刚显示给用户的项目的索引/值,然后显示下一个索引项目的值,而不是我所做的删除项目,但它也会显示下一个索引之后的值(即,如果您从列表中删除&#34; Apples&#34;而不是显示&#34; Pears&#34;接下来,它会显示&#34;桔子&#34;。)
有关如何优化此事的任何想法/建议?
答案 0 :(得分:1)
我认为问题在于您尝试使用索引遍历列表,但是一旦删除列表中的某个项目,索引就不再正确。如果您只是删除项目+ = 1,如果用户回答否,它可能会有效。但是,如果我这样做,我会做这样的事情:
fruit_list = ["Apples", "Pears", "Oranges", "Peaches"]
liked_fruits = []
for fruit in fruit_list:
while True:
user_resp = input("Do you like " + fruit + "?: ").lower()
print()
if user_resp != "yes" and user_resp != "no":
print("Please only answer with 'yes' or 'no'.")
elif user_resp == "yes":
liked_fruits.append(fruit)
break
else:
break
print(liked_fruits)
答案 1 :(得分:0)
如果你只是创建一个列表副本,你可以避免额外的while循环。
请注意,您需要创建列表副本list(fruits)
,如果您只是fruits_copy = fruits
它将指向相同的列表并将产生问题。
fruits = ["Apples", "Pears", "Oranges", "Peaches"]
fruits_copy = list(fruits)
for fruit in fruits:
user_resp = raw_input("Do you like " + fruit + "? ")
if user_resp.lower() == "yes":
continue
elif user_resp.lower() == "no":
fruits_copy.remove(fruit)
else:
print("Please only answer with 'yes' or 'no'.")
break
print fruits_copy
print fruits
答案 2 :(得分:0)
无需复制或创建其他列表,您的问题在于删除功能
fruit_list = ["Apples", "Pears", "Oranges", "Peaches"]
counter = 0
while True:
if not len(fruit_list) or counter >= len(fruit_list):
break
for i, val in enumerate(fruit_list):
user_resp = input("Do you like " + str(val) + "? ")
if user_resp == "yes":
counter += 1
continue
elif user_resp == 'no':
fruit_list.pop(i)
continue
else:
print("Please only answer with 'yes' or 'no'.")
break
〜