我正在研究一个要求用户输入十二次输入的程序。这些输入必须包含在列表中,其中包含字母表的前十二个字母。
letters=("A","B","C","D","E","F","G","H","I","J","K","L")
def gen_():
s = []
for i in range(1, 13):
in_ = input("Input the note number " + str(i) + ", please\n", )
if in_ in letters:
s.append(in_)
print(" \n"+str(s)+"\n " )
else:
print("not valid")
gen_()
我想告诉程序,如果某个输入无效,它应该要求用户重试并在同一实例上输入有效输入。我尝试通过将i减1来将“ i”设置回输入无效的值,但这没用。
我该如何编码?谢谢
答案 0 :(得分:1)
您需要一个while循环来连续验证输入的输入是否有效。请检查此解决方案:
def gen():
s = []
for i in range(12):
in_ = input("Input the note number {i}, please: ".format(i=i))
while len(in_) != 1 or ord(in_) < 65 or ord(in_) > 76:
in_ = input("Invalid input, please enter again: ")
s.append(in_)
return s
我在while循环中做了一些调整,以检查输入字符的ASCII值,而不是查找预定义的元组/列表。
答案 1 :(得分:0)
为什么我减去1可能不起作用,是因为python不能像其他编程语言一样工作,在Python中,您可以在for循环内修改index变量,并且它会做出相应的反应。简而言之,因为我不想深入了解细节,因此在循环中对i所做的任何更改都不会更改我在下一次迭代中的值。
执行您要执行的操作的一种方法是编写一个while循环,只要用户输入的内容无效,该循环就会重复。像这样:
in_ = input("Input the note number " + str(i) + ", please\n", )
while in_ not in letters:
print("not valid")
in_ = input("Input the note number " + str(i) + ", please\n")
s.append(in_)
print(" \n"+str(s)+"\n " )