2013-07-30 49 views
2
Join = input('Would you like to join me?') 
if Join == 'yes' or 'Yes': 
    print("Great," + myName + '!') 
else: 
    print ("Sorry for asking...") 

所以這是我的代碼。它更長;只是包括這個問題。我問一個是或否的問題,當它在控制檯中運行時,它會順利運行,直到你到達它。無論你輸入什麼,你都會得到'是'輸出。有人可以幫忙嗎?我也使用過elif語句,但沒有運氣。是或否輸出Python

+2

你混淆了茚粘貼代碼時的情況,還是代碼在您的文件中的顯示方式? – 2rs2ts

+0

@ 2rs2ts - 當他粘貼代碼時,他搞砸了縮進。否則他會得到不同的錯誤信息。 –

+0

@Robᵩ是的,我知道。我試圖把OP引向實現,而不是說「你把代碼粘貼錯了」。 – 2rs2ts

回答

10
if Join == 'yes' or 'Yes': 

這是總是如此。蟒蛇把它讀成:

if (Join == 'yes') or 'Yes': 

or下半年,是一個非空字符串,始終是真實的,所以整個表情總是正確的,因爲任何or真實不虛。

可以通過顯式比較Join到這兩個值解決這個問題:

if Join == 'yes' or Join == 'Yes': 

但是,在這種特殊情況下,我建議把它寫的最好的方法是這樣的:

if Join.lower() == 'yes': 

這樣,用戶輸入的內容無關緊要,它會轉換爲小寫字母,並針對小寫值進行測試。如果你打算使用可變Join其他地方可以方便爲小寫它時,它是輸入代替:

Join = input('Would you like to join me?').lower() 
if Join == 'yes': # etc. 

你也可以寫它,以便用戶可以輸入任何與y開始或者說真的,y

Join = input('Would you like to join me?').lower() 
if Join.startswith('y'): # etc. 
+0

謝謝。我實際上以相同的方式解決了這個問題。其他提示非常有幫助。再次感謝 –

0

這不是or運營商的工作方式。替換:

if Join == 'yes' or 'Yes':

有:

,它會做你想要什麼。

編輯:或者嘗試這一點,更通用的:

if 'yes'.startswith(Join.lower()):

這應該匹配 'Y', 'Y', '葉', '葉', '葉',等等上。

+0

*表示*或*操作符如何工作。然而,這不是如何使用'或'操作符來實現OP的意圖。 – 2rs2ts

+0

只有當您選擇使用'that'來引用與我不同的東西時 - 「那是OP所期望的來自'或'操作符的行爲,並不是''或'操作符的工作方式。」 –

0

if語句實際上應該是:

if Join=='yes' or Join =='Yes' 

的方式如果語句寫在你的代碼會導致代碼進行評估是這樣的:

(if Join == 'yes') or ('Yes'): 

注意(「是」)是truthy,將始終爲true

1

我回答this question昨天

您可以使用.lower()

Join = input('Would you like to join me?') 
if Join.lower() == 'yes': 
    print("Great," + myName + '!') 
else: 
    print ("Sorry for asking...")