簡體   English   中英

Python-'And'運算符無法正常運行

[英]Python - 'And' operator not functioning properly

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

and運算符恰好在做應做的事情,只要兩者不匹配,它就會停留在循環中。 您想要的是繼續循環直到兩者都匹配,因此您必須在此處使用OR運算符

僅當用戶名和密碼都不匹配時,這將導致True。 如果用戶名正確但密碼錯誤,則False和True = False,並且循環將結束。 您需要使用OR來在任何一個憑證錯誤時提示“憑證錯誤”。

這是對取反或補碼進行運算時的常見錯誤。 請參閱德摩根法律:

!(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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM