我在尝试使用while循环验证用户输入时遇到问题,然后确保用户不重复值。我所尝试的两种方法显示了波纹管,但我无法理解如何让它们工作。
def test():
my_list = ["", "", ""]
for i in range(3):
while (my_list[i] != "one") and \
(my_list[i] != "two") and \
(my_list[i] != "three"):
while (my_list[i] == my_list[0]) and \
(my_list[i] == my_list[1]) and \
(my_list[i] == my_list[2]):
text = "Enter, one, two or three", i + 1, ":"
try:
my_list[i] = input(text)
except KeyboardInterrupt:
sys.exit()
print(my_list)
def test2():
my_list= ["", "", ""]
while len(my_list)!=len(set(my_list)) == True:
for c in range(4):
while (my_list[i] != "one") and \
(my_list[i] != "two") and \
(my_list[i] != "three"):
text = "Enter, one, two or three", c + 1, ":"
try:
my_list[c] = input(text)
except KeyboardInterrupt:
sys.exit()
print(my_list)
答案 0 :(得分:3)
为什么不简化一下:
my_list = []
while len(data) < 3:
data = input(text) # Valid for Python 3, use raw_input(text) in Python 2
if data in ("one", "two", "three") and data not in my_list:
my_list.append(data)
这是对您的要求的或多或少的直接翻译:
在这种情况下使用for x in range(y)
只会增加复杂性,因为您实际上并不知道要循环运行多少次。
没有理由使用无效值(my_list = ["", "", ""]
)预先填充列表,因为列表可以使用append
调整大小。
此外,您的sys.exit
代码是不必要的,可能有害。只是让异常传播,它将使程序本身崩溃(除非你抓住它,你几乎不应该为KeyboardInterrupt
异常做。)
注意:如果您将两个while循环合并为一个循环,那么您的第一个版本将会起作用,这只是不必要的复杂。