在列表中存储前N个素数的Python程序?

在列表中存储前N个素数的Python程序?,python,list,append,primes,Python,List,Append,Primes,我编写了以下代码来查找N个素数。但是,我无法将其存储在列表中 def prime(n): global count s=0 flag=0 ls=[] for i in range(2,n/2+1): if(n%i==0): flag=1 break

我编写了以下代码来查找N个素数。但是,我无法将其存储在列表中

     def prime(n):

        global count
        s=0
        flag=0
        ls=[]
        for i in range(2,n/2+1):
                     if(n%i==0):
                           flag=1
                           break

        if(flag==0):
                print n
                ls.append(n)
                count=count+1
        print ls

    # main pro
    n=input("Enter the number of prime numbers to be displayed: ")
    print"The prime numbers are:"  
    count=0
    x=2
    while(count<n):
             prime(x)
             x+=1
但当我运行程序时,我得到的输出是:

    Enter the number of prime numbers to be displayed: 5
    The prime numbers are:
    2
    [2]
    3
    [3]
    []
    5
    [5]
    []
    7
    [7]
    []
    []
    []
    11
    [11] 
如何在不更改上述代码的情况下将素数添加到列表中??
我应该在后面的部分附加这些元素吗?我是Python新手,非常感谢大家的帮助!谢谢大家!

这将返回
计数的数组
素数:

def get_primes(count):
    primes = []

    n = 2
    while len(primes) != count:
        for i in range(2, n // 2 + 1):
            if n % i == 0:
                break
        else:
            primes.append(n)
        n += 1

    return primes
您可以这样使用它:

n=input("Enter the number of prime numbers to be displayed: ")
array_of_n_prime_numbers = get_primes(n)
print("The prime numbers are:", array_of_n_prime_numbers)
试试这个

def prime(x):
    if x<1:
        return []
    prime_numbers = [2,3]
    if x<3:
        return prime_number[:x]
    for i in range(2,x):
        next_pn = prime_numbers[-1]+2
        while any(not(next_pn%pn) for pn in prime_numbers):
            next_pn += 2
        prime_numbers.append(next_pn)
    return prime_numbers

N = input("Enter the number of prime numbers to be displayed:")
print (prime(int(N)))
不需要遍历所有数字,您可以只遍历其前面的素数。

这里有一个简单的方法:

def prime(n):
    ls = [2,3]
    if (n < 3):
        return ls[:n]
    for i in range(2,n):
        generate = ls[-1]+2
        while any(not(generate%num) for num in ls):
            generate += 2
        ls.append(generate)
    return ls



n = int(input("Enter the number of prime numbers to be displayed:"))
print (prime(n))

全局声明
ls
,您在每次迭代中都会重新创建它。但我得到的输出是:[2][2,3][2,3][2,3][2,3][2,3][2,3][2,3][3][3][2,3][2,3][3][2,3][3][3,3][3,3][5][2,3,5][2,3,5][2,3,5][3,5][2,5][3,5][2,5][3,5][2,3][3][3][3][。但我得到的输出是:[2][2,3][2,3][2,3,5][2,3,5][2,3,5,7][2,3,5,7][2,3,5,7][2,3,5,7][2,3,5,7][2,5,7]如何在最后打印一次?谢谢大家!@AanandhiVB
print(“质数是:”,质数数组)
@AanandhiVB您不需要声明全局列表我很抱歉让您感到困惑,但根据Jean François Fabre的说法,当我声明全局列表时,我能够得到质数列表。但我得到的输出像:[2][2,3][2,3][2,3,5][2,3,5][2,3,5,7][2,3,5,7][2,3,5,7][2,3,5,7][2,3,5,7]如何在最后打印一次?我不想更改我编写的代码。谢谢@AanandhiVB在您的函数之外打印它。您得到这个输出是因为您每次调用函数时都打印素数。非常感谢!!如果符合你的目的,接受答案并投票
Enter the number of prime numbers to be displayed:5
[2, 3, 5, 7, 11]
def prime(n):
    ls = [2,3]
    if (n < 3):
        return ls[:n]
    for i in range(2,n):
        generate = ls[-1]+2
        while any(not(generate%num) for num in ls):
            generate += 2
        ls.append(generate)
    return ls



n = int(input("Enter the number of prime numbers to be displayed:"))
print (prime(n))
[2, 3, 5, 7, 11]