有验证和重启选项的用户是或否回答?

时间:2016-10-19 21:16:09

标签: python validation loops while-loop restart

(py)目前,当用户输入除“y”和“n”这两个选项之外的其他内容时,下面的代码不会验证/输出错误消息,因为它在while循环中。

again2=input("Would you like to calculate another GTIN-8 code? Type 'y' for Yes and 'n' for No. ").lower() #**

    while again2 == "y":
        print("\nOK! Thanks for using this GTIN-8 calculator!\n\n")
        restart2()
        break                                                                                                                    #Break ends the while loop

restart2()

当我们输入两种选择时,我正在努力想办法允许我用输出作出回应。例如:

if again2 != "y" or "n"
   print("Not a valid choice, try again")
   #Here would be a statement that sends the program back to the line labelled with a **

因此,当用户的输入不等于“y”或“n”时,程序将返回初始语句并要求用户再次输入。任何仍然支持尽可能少的有效代码的想法?谢谢!

2 个答案:

答案 0 :(得分:1)

def get_choice(prompt="Enter y/n?",choices=["Y","y","n","N"],error="Invalid choice"):
    while True:
        result = input(prompt)
        if result in choices: return result
        print(error)

可能是解决此问题的一种很好的通用方法

result = get_choice("Enter A,B, or C:",choices=list("ABCabc"),error="Thats not A or B or C")

你可以粗略地使它不区分大小写...或添加其他类型的标准(例如必须是26到88之间的整数)

答案 1 :(得分:0)

递归解决方案:

def get_input():
    ans = input('Y/N? ') #Use raw_input in python2
    if ans.lower() in ('y', 'n'):
        return ans
    else:
        print('Please try again.')
        return get_input()

如果它们真的很顽固,当它达到最大递归深度时会失败(~900错误答案)