做一个主要的发电机

时间:2017-06-05 06:43:30

标签: python

这应该是一个主要的发电机。我尝试运行它,但它不会打印出整数。该计划也将立即结束。我不知道它是否在运行

def prime_gen():

    start = 1

    while start:

        if start % start == 0:
            print(start)

            start += 1

3 个答案:

答案 0 :(得分:3)

首先是什么是素数?一个没有除数但本身的数字。 简单的方法是从2开始加载这些数字并检查该数字是否不能被所有先前的数字分割,如果是,那么你得到一个新数字;您可以使用yield代替return

将其设为生成器
def prime_gen():
    primes = [2]
    yield 2
    n = 3
    while True:
        for p in primes:
            if n % p == 0:
                n += 1
                break
        else:
            primes.append(n)
            yield n

示例:

pg = prime_gen()
next(pg)
2
next(pg)
3
next(pg)
5
next(pg)
7
next(pg)
11

答案 1 :(得分:2)

这里有两个主要问题:

  1. 您的算法不计算素数 - 它无限运行(while start),并在number % number == 0(又名numbernumber)时打印一个数字总是如此。所以这是一个从1开始打印数字的无限循环。

  2. 你永远不会打电话给prime_gen(),这就是程序什么都不做的原因。 您已经创建了一个函数但没有调用它。

  3. 有关计算素数的好方法,请查看Sieve of Eratosthenes (Wikipedia)

答案 2 :(得分:1)

您可以执行以下操作:

def prime_gen(limit):
    current = 2 # 1 is not exactly prime
    primes = []
    while current <= limit:
        isPrime = True
        for p in primes:
            if current % p == 0:
                isPrime = False
                break
        if isPrime:
            primes.append(current)
            print current, ", ",
        current += 1
    return primes