验证python中的测验,以便重新获得测验的唯一有效输入是' y'或者' n'?

时间:2018-05-26 22:38:23

标签: python python-3.x validation input while-loop

我正在使用Python 3.1.3并且我正在尝试编写一个测验来测试我自己对元素名称和周期表的相应原子序数的知识,使用随机数生成器来选择是否要求用户原子序号或元素名称以及要询问的元素。 我目前正在尝试验证所有用户输入。我已经成功验证了数字和字母输入,但我正在努力验证“是”和“是”。或者没有'重新参加测验,接受输入的选项:' y'或者' n'。 我以前曾尝试使用几个IF和ELIF语句来确定用户是否给出了一个等于有效输入的输入,但在搜索堆栈溢出后我改变了我的代码:

##Functions
def validating_y_or_n_only(a,b,c):
    while b == 0:
        if not a:
            print("\n\tYou didnt enter anything.")
        elif a in ["y","n"]:
            b = 1
        else :
            print("\n\tYour input was invalid.")
        print("\tOnly 'y' and 'n' are considered valid.\n")
        print(c)
        a = str(input("\tEnter 'y' for yes or 'n' for no: "))
    return a

##Main Program
retake = "\n\tWould you like to re-take the quiz?"
print(retake)
replay_option = str(input("\tEnter 'y' for yes or 'n' for no: "))
replay_option = validating_y_or_n_only(replay_option,condition,retake)

然而,这会产生无限循环甚至是' y'的有效输入。或者' n'或者不被接受。

1 个答案:

答案 0 :(得分:0)

你的逻辑似乎过于复杂。有许多变量似乎是不必要的或未使用的。使用有意义的名称而不是abc也是一种好习惯。

这是一个在break循环中使用while来指示何时输入有效数据的解决方案。

def validating_y_or_n_only():
    while True:
        answer = str(input("\tEnter 'y' for yes or 'n' for no: "))
        if answer in ('y', 'n'):
            break
        elif not answer:
            print('\n\tYou didnt enter anything.')
        else:
            print('\n\tYour input was invalid.')
            print('\tOnly "y" and "n" are considered valid.\n')
    return answer

replay_option = validating_y_or_n_only()