簡體   English   中英

生成比列表中找到的數字大的質數

[英]Generating a prime number bigger than a number found in a list

下面無法解決的問題:由於出現“ TypeError:'int'對象不可下標”,因此我無法使genPrim函數正常工作。

一些觀察:1.我的程序應該做的是首先將一個數字輸入到列表中,然后將其他功能應用於該數字。 2.問題是我似乎無法使用列表中的號碼來執行此操作。 我該怎么做? 我最初是想問問自己的位置,但是當選擇genPrim時,genPrim和Prim都可以工作,因為它們是相互依存的,但它們都要求相同的東西。

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()

因為genPrim返回一個int ,但Main()將該結果分配給L ,所以您得到了該錯誤,因此L不再包含數字列表,而僅包含單個int

同樣, Prim()返回一個布爾值( TrueFalse ),但Main()將其分配給L

FWIW,您的Prim()函數的基本邏輯是正確的,但是它是測試數字是否為質數的非常無效的方法。 至少應將其更改為在找到一個除數后立即返回False ,即當n%a==0

我設法使第三個選項起作用,就像生成素數一樣。 但是,我也希望使第二個選項也可以工作,即主要驗證。

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

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

還是應該嘗試其他方法?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM