3

这是代码:

list = [2, 3, 5, 7, 11, 13]
list2 = [range(list[-1], 2000000)]
y =11
x = 1
v = list[-1]>= x
while list[-1] ** 2 < 2000000:
    y= y + 2
    prime = True
    while prime == True:    
        for x in list:
            if x * 2 < y:   
                if y % x == 0:
                    prime = False
                    break
        if prime == True:
            list.append(y)
            prime = False
print sum(list)

for u in list:
    for w in list2:
        if u * u < w:
            if w % u == 0:
                list2.pop(w)
print list
print sum(list) + sum(list2)

如您所见,这是一个基本程序,它创建一个筛子,然后为它放入多达 200 万个数字。这是针对 Euler 项目的,我正在尝试在学习编程时测试我的技能。

现在,这篇文章标题为第 23 行的错误。为什么会发生这种情况?

4

1 回答 1

8

range()已经返回了一个列表,但你把它放到了一个新列表中:

list2 = [range(list[-1], 2000000)]

这会产生一个包含列表的列表,然后w将其设置为完整范围。只需卸下那里的括号。

>>> [range(5)]
[[0, 1, 2, 3, 4]]
>>> range(5)
[0, 1, 2, 3, 4]
于 2012-09-13T17:30:10.930 回答