我的while循环仅第二次起作用,而不是第一次

时间:2019-10-14 16:08:13

标签: python python-3.x

我有一个while循环,如果您回答错误的问题,它会重复该问题,但是当我第一次正确时,它会再次询问,第二次它会起作用。代码:

def signup():
    signup=input("Enter a username: ")
    signup2=input("Enter a password: ")

def login():
    login=input("Enter your username: ")
    login2=input("Enter your password: ")

option=input("Would you like to login or signup?: ")

while option != "signup" or option != "login":

    option=input("Would you like to login or signup?: ")

    if option == "signup":
        signup()
    elif option == "login":
        login()

,响应为:

Would you like to login or signup?: signup
Would you like to login or signup?: signup
Enter a username:

3 个答案:

答案 0 :(得分:1)

您的条件不正确。如果option彼此相等,则保证为真。您要使用and而不是or

while option != "signup" and option != "login":

或通过De Morgan's laws

while not (option == "signup" or option == "login"):

不过,最好的解决方案是对显式break语句使用“无限”循环,这样您只需将一次对input的调用写入。

while True:

    option=input("Would you like to login or signup?: ")

    if option == "signup" or option == "login":
        break


if option == "signup":
    signup()
elif option == "login":
    login()

答案 1 :(得分:0)

当然,因为您还首先将option=input("Would you like to login or signup?: ")放在循环外部。要进行这种循环,最好进行无限循环并在某个条件下中断:

while True:

    option=input("Would you like to login or signup?: ")

    if option == "signup":
        signup()
        break
    elif option == "login":
        login()
        break

答案 2 :(得分:0)

您正在循环内第二次请求输入。仅当输入不是有效选择之一时,才应该这样做。

您应该使用and而不是or来测试输入。参见Why non-equality check of one variable against many values always returns true?

最后,您应该在循环后处理输入 ,因为那样的话它将包含有效的选择。

option=input("Would you like to login or signup?: ")
while option != "signup" and option != "login":
    option=input("Would you like to login or signup?: ")

if option == "signup":
    signup()
elif option == "login":
    login()