Python 修复初学者';s代码,用于制定素数列表

Python 修复初学者';s代码,用于制定素数列表,python,primes,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) 我希望生成一个质数列表,范围为(2100)。然而,实际产出是: ... [3, 5, 5, 5, 7, 7,

该代码导致列表附加奇数而不是素数。如果奇数不能被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)
我希望生成一个质数列表,范围为(2100)。然而,实际产出是:

...
[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]
...

这正是您在代码中所写的:每次一个数字(比如7)没有被x精确除(对于2、3、4、5、6),您都会将该数字添加到列表中。
只应在完成for之后添加一次。

你应该跳过除2之外的所有偶数除数,这样会快得多。范围可以一步一步地增加2来完成这项工作,在使用超出范围的2进行测试之后…

这仅仅是由于两个缩进错误造成的:一个是在
else
语句上;在您的
打印
语句上有一个:

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中,正确的缩进很重要。只有当
for
循环没有通过
break
语句退出时,才会执行
for
循环上的
else
。正如@B.Go所指出的,这不是一个有效的素数生成器,但它可以正常工作。

很好地使用for/else结构,我会使用更复杂的类似C的布尔函数。。。