2013-03-04 82 views
-1
def name(x): 
    return x==('Jenson'or'Amra'or'McCay'or'Spinner'or'Jones') 
print(name('Jenson')) 
print(name('McCay')) 

這是一個問題:Python的 - 功能做字符串比較

「編寫一個函數,需要輸入一個人的名字(例如, ‘史密斯’,‘瓊斯’等)這個函數應該檢查名字 是否是董事會中五個名字中的一個,這五個名字是: 「Jenson」,「Amra」,「McCay」,「Spinner」和「Jones」 。如果名稱輸入 進入函數是這五個名字之一,函數 返回布爾值True,如果不是,則fu應該 返回False。 (記得輸入類型,描述和 測試用例評論)測試功能,以確保它工作。」

它的工作原理,如果我做簡森但它出來的假,如果我把在任何其他名稱。

+0

還有什麼是我的方式來解釋,所以我可以理解我做錯了什麼 – 2013-03-04 04:41:49

+0

爲什麼你不發佈你的代碼片段,以便每個人都可以看看什麼是缺少或出錯? – Tuxdude 2013-03-04 04:57:11

+0

剛纔提到你的(已刪除)問題,請不要在你問他們問題時刪除問題 - 人們花時間幫助你,而你剛剛刪除了他們的評論迴應。該主題中也有幾項真正的幫助。 – halfer 2013-03-18 18:00:56

回答

3

如何 「長」 的方式:

def check_name(x): 
    names_to_check = ('Jenson','Amra','McCay','Spinner','Jones') 
    for i in names_to_check: 
     if i == x: 
      return True 
    return False 

以下是在代碼中發生的事情:

x = 'Jenson',因爲這是你在通過了

此行x == ('Jenson' or 'Amra' or 'McCay' or 'Jones')實際上是一個布爾運算,並結果它總是Jenson

布爾操作檢查真值,而Python中的非空字符串始終爲True。因此,實際上什麼('Jenson' or 'Amra' or 'McCay' or 'Jones')要說的是:

「要麼JensonAmraMcCayJones哪一方是True,將值設置到」。

由於Jenson是第一個項目,其True(也就是說,它不是一個空字符串),則整個表達式等於Jenson(這就是爲什麼它,只有當你在Jenson傳遞工作)。

一個簡單的例子:

>>> ('a' or 'b' or 'c') 
'a' 
>>> ('b' or 'a' or 'c') 
'b' 
>>> ('' or '' or 'a') 
'a' 
>>> (0 or 0 or 1) 
1 
>>> (False or False or True) 
True 

最後三個示出了同樣的比較。我正在檢查兩個空字符串和'a'。由於Python中的空字符串是False,唯一是「真」的是'a',這就是返回的結果,就像我在比較01一樣。

+0

感謝您的詳細解釋 – 2013-03-04 05:07:07

4

嘗試這樣,

def name(x): 
    return x in ('Jenson', 'Amra' ,'McCay', 'Spinner','Jones') 
+0

任何其他方式,因爲我們還沒有學到,但 – 2013-03-04 04:40:03

+0

@IanBerke祝你好運:) – 2013-03-04 04:45:25

+1

使用'in'運營商,並給他們一個大驚喜;-) – 2013-03-04 04:51:30

0

語法x ==('Jenson'或'Amra'或'McCay'或'Spinner'or'Jones')是錯誤的。它應該像Adem說的那樣。也許

def name(x): 
    return x=='Jenson' or x== 'Amra' or x == 'McCay' or x == 'Spinner' or x == 'Jones' 
0

我想象的情況是,('Jenson'or'Amra'or'McCay'or'Spinner'or'Jones')被首先評估,被評估爲'Jenson'。這是在x之前計算的,因爲它在括號內。然後檢查xJenson之間是否相等。您需要像Adem的答案那樣使用更高級的語法,如x in...,否則使用return x == 'Jenson' or x == 'Amra' or x == 'McCay'...,以便每個比較都會一個接一個地運行。

+1

其實,'('簡森'或'Amra'or'McCay'or'Spinner'或'Jones')'評估爲'Jenson',這就是簡森爲什麼會工作,但其他一切都會返回錯誤 – Matt 2013-03-04 04:50:49

+0

哦,你是對的,那就是會發生什麼!我的錯。 – 2013-03-04 04:52:20

+0

編輯答案反映,以免混淆OP。謝謝你的糾正。 – 2013-03-04 04:53:15