修复用于公式化素数列表的初学者代码

时间:2019-06-23 20:34:09

标签: python primes

代码导致列表中附加奇数而不是质数。如果奇数不能被3整除,则列表将至少生成3次特定数字:

for i in range(2,100):
    for x in range(2,i):
        if (i %x==0):
            break
        else:
            prime.append(i)
        print(prime)

我希望生成一个素数列表,范围为(2,100)。但是实际输出是:

...
[3, 5, 5, 5, 7, 7, 7, 7, 7, 9]
[3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11]
[3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11, 11]
...

2 个答案:

答案 0 :(得分:2)

这仅仅是由于两个缩进错误:一个在您的else语句上;您的print语句中的一个:

prime = []

for i in range(2, 100):
    for x in range(2, i):
        if i % x == 0:
            break
    else:  # no break
        prime.append(i)

print(prime)

在Python中,正确的缩进很重要。仅当else循环没有通过for语句退出时,for循环上的break才执行。正如@ B.Go指出的那样,这不是一个有效的素数生成器,但它是一个有效的素数生成器。

答案 1 :(得分:1)

这就是您在代码中写的:每次将数字(例如7)不完全除以x(对于2、3、4、5、6),都将数字附加到列表中。
您只应在for完成后才添加一次。
而且您应该跳过除2以外的所有偶数除法器,这样会更快。在用2以外的范围进行测试之后,Range可以逐步增加2来完成此操作...