我正在尝试制作一个简单的Eratosthenes Sieve脚本,我只是开始编写Python和编码,所以我现在并不担心效率。
import math
primes = range(2,500)
upperLimit = math.ceil(math.sqrt(float(primes[-1])))
def sieve(numbers):
for item in range(0,int(upperLimit)):
n = numbers[item]
while n < upperLimit:
n += numbers[item]
print n
print numbers
numbers.remove(n)
sieve(primes)
print primes
这一直告诉我第12行中的numbers.remove(n)不存在,所以我把打印语句放在它上面以试图弄清楚发生了什么。它运行正常,删除它应该是什么,最多24个。然后,而不是再次添加2到n,它将n更改为6.这就是给我错误,但我无法弄清楚为什么它一直这样做
答案 0 :(得分:2)
第一次通过for循环:
item == 0
starting n == 2
removing 4
removing 6
removing 8
removing 10
removing 12
removing 14
removing 16
removing 18
removing 20
removing 22
removing 24
下一次迭代:
item == 1
starting n == 3
removing 6 (but 6 is not in the list, because it has already been removed)
ValueError
正如您所期望的那样,item == 1
,n == numbers[1] == 3
。然后,n += numbers[1]
会产生n == 6
。但你不能删除6次,所以你得到一个错误。