[英]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.