2017-10-15 65 views
1

我在做登錄系統。它要求用戶回答這個問題(「你有沒有賬戶?」),而答案不是肯定或否,它應該繼續詢問。即使條件合適,循環也不會結束

print('Welcome to the quiz!') 
print('Do you already have an account? ') 
have_acc = input() 
while have_acc != ('Yes') or have_acc != ('No') or have_acc != ('yes') or have_acc != ('no'): 
    print('Please enter Yes or No') 
    have_acc = input() 

輸出

Welcome to the quiz! 
Do you already have an account? 
yes 
Please enter Yes or No 
no 
Please enter Yes or No 
Yes 
Please enter Yes or No 
No 
Please enter Yes or No 
+2

將所有'或'全部更改爲'和'。你也可以刪除括號,它們是無用的和不自然的。 –

+1

看一看[De Morgan的法律](https://en.wikipedia.org/wiki/De_Morgan%27s_laws)。別擔心,所有程序員至少犯了一次這個錯誤。 ;) –

回答

3

一個更規範的做法:

while input.lower() not in ('yes', 'no',): 
    ... your retry code ... 
+0

我刪除了我的答案,...,和你的相同 –

+0

該死的,在我之前到過那裏...... +1 但是在元組字面上有一個多餘的逗號。 –

+0

這個網站有時候會變得荒謬,...,它比Python的邏輯錯誤或者while循環更像是標記的 –

0

的問題是與邏輯。 '是'!='不',所以其中一個條件總是會被擊中。我不熟悉Python語法,邏輯上你需要的是:

while not (input == ‘Yes’ or input == ‘No’) 

在這一點上,任何單一的比賽將是一件好事

0

while - 如我輸入Yes,它會評估從左到右的條件,並注意到have_acc != ('Yes'),但由於它的前面是or關鍵字,它會評估其餘的條件 - 如果是True那麼它將運行while循環中的代碼,這裏的問題是have_acc != ('No')將計算爲True,因爲('Yes' != 'No') == True因此整個語句將評估爲True,此後將執行循環中的代碼。

什麼你想要做的是一個更清潔,這更簡約版本,這是不容易出錯的心情:

print('Welcome to the quiz!') 
print('Do you already have an account? ') 
have_acc = input().lower() 

while have_acc not in ('yes', 'no'): 
    print('Please enter "yes" or "no"') 
    have_acc = input().lower() 
... 
0

爲什麼不使用這一說法 雖然have_acc ==「是」或「have_acc ==」no「 have_acc elif: 打印(」請輸入是或否「)