2012-07-24 98 views
1

此代碼將成爲程序的一部分,該程序將檢查數字是否爲素數。我知道這不是特別優雅,但我想讓它只是爲了體驗而工作。我認爲這個函數失敗了,因爲if/elif的邏輯是錯誤的,當我運行這個代碼時,它似乎只是直接去了else子句。這是一個語法問題,還是我不允許在if子句中進行邏輯檢查?布爾檢查功能不工作

list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] 

def find_prime(list, n): 
    if n in list == False: 
     list.append(n) 
     print "I'ts in there now." 
    elif n in list == True: 
     print "It's in there already." 
    else: 
     print "Error" 

find_prime(list, 3) 
find_prime(list, 51) 
+0

您不應該命名變量'list' Python已經在使用該標識符。 – Levon 2012-07-24 11:09:58

+1

而不是評論所有的答案,我只是在這裏說謝謝,因爲他們都工作:) – cjm 2012-07-24 11:18:03

+0

接受一個答案atleast .... – 2012-07-24 11:21:38

回答

5
  1. list是一個可變的名聲。它掩蓋了內置的list

  2. if n in list == True:不會做你期待什麼:1 in [0, 1] == True回報False(因爲,正如@Duncan筆記,1 in [0,1] == True1 in [0,1] and [0,1] == True簡寫)。使用if n in li:if n not in li:

  3. Error沒有理由,因爲元素在列表中或者它不在列表中。其他任何事情都是編程錯誤。

所以,你的代碼看起來是這樣的:

li = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] 

def find_prime(li, n): 
    if n in li: 
     print "It's in there already." 
    else: 
     li.append(n) 
     print "It's in there now." 
+1

你答案的第2部分有點不對。如果它試圖在'False'中測試'1',你會得到一個異常。實際發生的事情是'1 in [0,1] == True'是[0,1]和[0,1] == True的'1的簡寫形式,'and'後面的部分是False。 – Duncan 2012-07-24 13:13:47

+0

@鄧肯 - 謝謝你指出。我已經更新了答案。 – eumiro 2012-07-24 13:23:40

2

試試這個代碼,而不是測試真/假。另請參閱我上面有關使用list作爲變量名稱的註釋(由於該標識符由Python使用,所以不適用)。

mylist = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] 

def find_prime(mylist, n): 
    if not n in mylist: 
     mylist.append(n) 
     print "I'ts in there now." 
    else: # n in mylist: has to be the case 
     print "It's in there already." 

你不需要原來的最後else,你的選擇是二進制的,無論是數量將出現在列表中,或者不會。

2

不要打電話給您的名單list。叫它mylist或別的東西。使用if not n in mylistif n in mylist

2

由於值要麼是在列表中,我不認爲你需要檢查你的if/else邏輯中的三個選項。

list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] 

def find_prime(list, n): 
    if n in list: 
     print "It's in there already." 
    else: 
     list.append(n) 
     print "It's in there now." 

find_prime(list,3) 
find_prime(list,53)