Python-'And'运算符无法正常运行

时间:2019-03-20 10:14:30

标签: python python-3.x login

由于某些原因,and运算符在while循环中无法正常运行。

当我运行代码时,如果密码或用户名匹配而不是两者匹配,它将退出循环。

任何帮助都会很棒。

    root_password = "password123"
    root_username = "root"
    username = "default"
    password = "default"

    while username != root_username and password != root_password:
        username = input("Username: ")
        password = input("Password: ")
        if username != root_username and password != root_password:
        print("Wrong Credentials")


    print("Welcome")

3 个答案:

答案 0 :(得分:2)

and运算符确实在做应做的事情,只要两者不匹配,它就会停留在循环中。 您想要的是继续循环直到两者都匹配,因此您必须在此处使用OR运算符

答案 1 :(得分:0)

仅当用户名和密码都不匹配时,这将导致True。如果用户名正确但密码错误,则False和True = False,并且循环将结束。您需要使用OR来在任何一个凭证错误时提示“凭证错误”。

这是对取反或补码进行运算时的常见错误。请参阅《摩根大通法律》:

!(username == root_username and password==root_password)

username != root_username or password!=root_password

答案 2 :(得分:0)

一种方法是创建一个条件,该条件检查用户名和密码是否匹配,然后在该条件前放置一个not,如下所示:

not (username == root_username and password == root_password)

这只是检查用户是否没有匹配的用户名和密码,或者没有正确的凭据。

正如Speeeddy所说,使用De-Morgan Laws,该条件与username != root_username or password != root_password相同,但这只是使代码更易于阅读和理解。

以下是此更改的代码:

root_password = "password123"
root_username = "root"
username = "default"
password = "default"

while not (username == root_username and password == root_password):
  username = input("Username: ")
  password = input("Password: ")
  if not (username == root_username and password == root_password):
    print("Wrong Credentials")

print("Welcome")