扩展素数列表的Python代码

扩展素数列表的Python代码,python,python-3.x,primes,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

我想用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]

您的问题是

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

for i in range(0,len(list)):
python中的
range
函数将在您在stop参数中指定的数字之前的数字上停止,因此您不需要自己减去1。从:


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

,因为代码不起作用。
如果运行代码,您将看到程序跳入第一个
If
条件的
else
部分,在那里您将中断
for
循环。因此,您的程序只需删除列表并打印该列表,因为如果条件未被处理,
的真实部分。

解决@RobStreeting指出的问题的另一种方法(+1)是去掉
范围(len())
习惯用法并使用
枚举()
。我们可以通过在最后一次收集素数之后启动循环来修复@Thierrylahuille指出的缺失的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=", ")

您发布的代码可能在某种程度上不起作用?你得到了什么输出?您希望得到什么输出?对于范围(0,len(list))中的i,它应该是
。还有,11和13呢?所有大于3的素数的形式都是6n-1或6n+1。只需查看这两种表单的编号,就可以加快搜索速度。