代码导致列表中附加奇数而不是质数。如果奇数不能被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]
...
答案 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来完成此操作...