由于某些原因,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")
答案 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")