生成大于列表中的数字的素数

时间:2014-11-15 07:59:21

标签: python primes

下面的工作原理:我无法使genPrim功能正常工作,因为我得到了" TypeError:' int'对象不是可订阅的"。

一些观察: 1.我的程序应该首先在列表中输入一个数字,然后在该数字上应用其他函数。 问题是我似乎无法从列表中使用该数字来执行此操作。我该怎么做?我第一次考虑要求它的位置,但是当选择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()

2 个答案:

答案 0 :(得分:1)

您收到该错误是因为genPrim返回int,但Main()将结果分配给L,因此L不再包含数字,只有那个int

同样,Prim()会返回一个布尔值(TrueFalse),但Main()也会将其分配给L

FWIW,Prim()函数的基本逻辑是正确的,但它是非常低效的方法来测试数字是否为素数。一旦找到一个除数,即False时,你应该至少改变它以返回n%a==0

答案 1 :(得分:0)

我设法使第三个选项工作,就像生成素数一样。但是,我还想要使第二个选项也能正常运行,即主要验证。

我的想法是修改Main()函数中的代码,取得位置的len,但是我无法真正使它工作。

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

或许,我应该尝试不同的方法吗?