虽然循环没有正确添加

时间:2012-10-25 05:47:31

标签: python python-2.7

我正在尝试制作一个简单的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.这就是给我错误,但我无法弄清楚为什么它一直这样做

1 个答案:

答案 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 == 1n == numbers[1] == 3。然后,n += numbers[1]会产生n == 6。但你不能删除6次,所以你得到一个错误。