DrO*_*ine 1 python list pycharm
我正在尝试用Python创建一个主要的筛子.
我从制作一个从2到2000的列表开始.我想用支票迭代所有素数,并从列表中删除所有素数的倍数.
我还没有绕过素数循环,但是我有一个方法从数字2开始,并删除它的所有倍数.
primes=list(range(2,2001))
p=2
while p<len(primes):
for x in range (p*p, len(primes), p):
primes.remove(x)
print(primes)
Run Code Online (Sandbox Code Playgroud)
印刷品:[...] 1989,1991,1993,1995,1997,1999,2000]
正如你所看到的,2000号仍然存在,它不应该存在.
Traceback (most recent call last):
File "C:/Users/Are/PycharmProjects/Project Euler/10.py", line 8, in <module>
primes.remove(x)
ValueError: list.remove(x): x not in list
Run Code Online (Sandbox Code Playgroud)
我的推理有什么问题?
我正在使用PyCharm,有没有办法让我在错误时打印x的值?
你的清单不是2000长,你从2开始..
>>> primes=list(range(2,2001))
>>> print len(primes)
1999
Run Code Online (Sandbox Code Playgroud)
所以当你做while循环时,它不会达到2000 ... :)