2014-11-15 18 views
1

以下情況不起作用:我無法使genPrim函數正常工作,因爲我得到的「TypeError:'int'對象不是可以下載的」。生成一個比在列表中找到的數字更大的素數

幾點意見: 1.我的程序應該做的是先將一個數字輸入到一個列表中,然後在該數字上應用其他函數。 2.問題是我似乎無法使用列表中的數字來執行此操作。我該怎麼做?我首先考慮要求自己的立場,但是當去genPrim時,genPrim和Prim都會工作,因爲它們是相互依賴的,但他們要求相同的東西。導致到L

def Adauga(L): 
    n = int(input("Give number:")) 
    L = L + [n] 
    return L 

#Verify if number is prime 
def Prim(L): 
    poz = int(input("Position of number: ")) 
    n = L[poz] 
    if n<2 : 
     return False 
    NrDiv=0 
    for a in range (2,int(n/2+1)): 
     if n%a==0: 
      NrDiv=NrDiv+1 
    if (NrDiv==0): 
     return True 
    else: 
     return False 

#Generate prime number 
def genPrim(L): 
    poz = int(input("Give number: ")) 
    a = L[poz] 
    b=a+1 
    while Prim(b)==False: 
     b=b+1 
    return b 

#Display menu 
def AfisMeniu(): 
    print() 
    print("1.Add number") 
    print("2.Check if number is prime") 
    print("3.Generate prime number") 
    print("0.End of program") 
    i = int(input("Your option: ")) 
    return i 

def Main(): 
    """ 
     Start the program 
    """ 
    L = [] 
    Opt = AfisMeniu() 
    while (Opt != 0): 
     if Opt == 1: 
      L=Adauga(L) 
     elif Opt ==2: 
      L=Prim(L) 
      print (L) 
     elif Opt ==3: 
      L=genPrim(L) 
      print (L) 
     else: 
      print ("Wrong!") 
     Opt = AfisMeniu() 
    print() 
    print("End of program") 

Main() 
+1

難道你沒有得到行號作爲錯誤信息的一部分嗎?有什麼好主意不要把它包含在這裏? –

回答

1

你得到的是錯誤的,因爲genPrim返回int,但Main()受讓人,所以L不再包含數字的列表,只是單int

同樣,Prim()返回一個布爾(TrueFalse),但Main()賦給到L得。

FWIW,你的Prim()函數的基本邏輯是正確的,但它是一個非常有效的方法來測試一個數是否爲素數。至少你應該改變它,只要它找到一個除數,即n%a==0,就返回False

+0

謝謝,我設法解決。我剛從Prim中刪除了前兩行,並將其參數從L更改爲n。問題解決了。 – Geosphere

0

我已經設法讓第三個選項工作,如產生素數。但是,我還想讓第二個選項也起作用,即主要驗證。

我的想法是修改Main()函數中的代碼,通過獲取該位置的len,但是我無法真正使其工作。

elif Opt ==2: 
     L=Prim(L) 
     poz1=int(len(L)) 
     print (L[poz1]) 

或者,我應該嘗試一種不同的方法嗎?

相關問題