Python代码扩展了素数列表

时间:2019-07-19 10:51:59

标签: python python-3.x primes

我想编写使用Python扩展质数列表的代码,但某些方法无效:

list = [2,3,5,7]

for num in range(15,30):
    for i in range(0,len(list)-1):
        if num%list[i] != 0:
            if i + 1 == len(list):
                list.append(num)
            else:
                continue
        else:
            break

print(list)

错误的输出是:[2,3,5,7]

3 个答案:

答案 0 :(得分:1)

您的问题是

for i in range(0,len(list)-1):

应该是

for i in range(0,len(list)):

python中的range函数将在您在 stop 参数中指定的数字之前的数字上停止,因此您不必自己减1。来自documentation

对于正步,范围r的内容由公式r [i] = start + step * i确定,其中i> = 0且 r [i] <停止。

答案 1 :(得分:0)

因为您的代码无效。 如果运行代码,您将看到程序在第一个else条件的if部分中跳转,并且您将中断for循环。因此,您的程序除了对列表进行解斜并打印该列表外,不会执行其他任何操作,因为if条件的真实部分未得到处理。

答案 2 :(得分:0)

另一种解决问题的方法@RobStreeting指出(+1)是摆脱range(len())习惯用法,而使用enumerate()。我们可以通过在最后一个收集的素数之后开始循环来修复@ThierryLathuille指出的缺失的11和13。最后,您不应有一个名为list的变量,因为它是Python的保留关键字。放在一起,您的代码看起来像:

primes = [2, 3, 5, 7]

for number in range(primes[-1] + 1, 50):
    for i, prime in enumerate(primes, start=1):
        if number % prime:
            if i == len(primes):
                primes.append(number)
            else:
                continue
        else:
            break

print(*primes, sep=", ")