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

问题描述 投票:0回答:3

由于某种原因,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")
python python-3.x login
3个回答
2
投票

和运算符正在做它应该做的事情,只要两者都不匹配,它就会保持在循环中。你想要的是继续循环,直到两者匹配,所以你必须在这里使用OR运算符


0
投票

仅当用户名和密码不匹配时,才会生成True。如果用户名正确但密码错误,False和True = False,循环将结束。您需要的是使用OR时,当其中任何一个出错时,提示“错误的凭据”。

在对否定或补充进行操作时,这是一个常见错误。参考De-Morgan Laws:

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

username != root_username or password!=root_password

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")
© www.soinside.com 2019 - 2024. All rights reserved.