查找1到20之间的质数
a = []
for i in range(2,20):
for j in range(2,20):
if((i % j) == 0):
break;
else:
a.append(i)
return a
这是我得到的输出-
[3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19]
我希望输出中也应该包含2
答案 0 :(得分:3)
您放错了else
,这使筛子无法正常工作。此外,内部循环应仅迭代到j == i - 1
。正确的代码如下所示:
a = []
for i in range(2,20):
for j in range(2,i):
if((i % j) == 0):
break
else:
a.append(i)
return a
区别:在原始代码中,找到了i
的任何j
(例如i % j != 0
)都将附加到a
。使用更正后的代码,仅在内部循环未被i
终止的情况下才附加break
。另外,您的代码还会测试[2, 20[
范围内所有数字的可除性,但是即使素数也可以被整除,这就是为什么2不在代码输出中的原因。
答案 1 :(得分:0)
在两个循环的第一个迭代中-i=2
和j=2
。如果条件为true,则内部循环将停止,而不会在a
上加上2。