由于某种原因,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")
和运算符正在做它应该做的事情,只要两者都不匹配,它就会保持在循环中。你想要的是继续循环,直到两者匹配,所以你必须在这里使用OR运算符
仅当用户名和密码不匹配时,才会生成True。如果用户名正确但密码错误,False和True = False,循环将结束。您需要的是使用OR时,当其中任何一个出错时,提示“错误的凭据”。
在对否定或补充进行操作时,这是一个常见错误。参考De-Morgan Laws:
!(username == root_username and password==root_password)
是
username != root_username or password!=root_password
一种方法是创建一个条件,检查用户名和密码是否匹配,然后将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")