2017-07-07 77 views
-1

當我輸入joeJoe時,爲什麼我不能跳出第一個while循環?輸入正確的參數不會讓我跳出while循環

joe = '' 
password = '' 
while joe != 'Joe' or 'joe': 
    print('Who are you?') 
    joe = input() 
while password != 'swordfish' or 'Swordfish': 
    if joe == 'joe' or 'Joe': 
     print('What is the password? (Hint: its a fish)') 
     password = input() 

if joe == 'Joe' or 'joe' and password == 'swordfish' or 'Swordfish': 
    print('Access Granted') 
else: 
    print('Access Denied') 
+2

這個'如果joe == '喬' 或「Joe''並不意味着你認爲這意味着什麼。它意味着'if(joe =='joe')或bool('Joe')'和'bool('Joe')'總是評估爲'True',這意味着if語句總是通過。你可能的意思是「如果喬(喬','喬')'。或者甚至更好'如果joe.lower()=='joe''。 –

+0

對於'while'循環中的條件,請嘗試'joe!='Joe'或joe!='joe''。現在,while循環將繼續運行,而「joe」不等於「Joe」或簡單地「joe」。 ''joe''是一個字符串,它的布爾值總是'True'。因此,無論「joe」是否等於「Joe」,字符串「joe」將始終評估爲「真」,而「while」循環永遠不會中斷。 – victor

+0

嘿!感謝您的幫助。在我發佈這篇文章之後,我看了一下我又有了什麼。 (我想休息的時候頭腦不錯),我看到我沒有兩次寫變量。你是對的'喬'沒有喬=='喬'在while循環中沒有意義。 我也使用了錯誤的操作符。它應該是一個「和」運算符,而不是一個或。感謝.lower()提示,這會縮短代碼並使其更高效! :) –

回答

1

試試這個:

val = '' 
password = '' 
while True: 
    print('Who are you?') 
    val = input() 

    if val.lower() == 'joe': 
     break 
+0

嘿!謝謝您的幫助!我只是認爲它邏輯上,我應該使用「和」運算符不是「或」大聲笑 去掉我的C++知識,是否value.lower使字符串中的所有字符小寫,即使輸入有大寫? –

+0

@AndrewHojnowski你是對的。 'value.lower()'會將字符串中的所有字符變爲小寫,即使字符串中有大寫字母。例如,'val =「Hello」','val.lower()'會輸出'「hello」' – Ajax1234