Python 修复初学者';s代码,用于制定素数列表
该代码导致列表附加奇数而不是素数。如果奇数不能被3整除,则列表将至少生成3次特定数字: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,
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的布尔函数。。。