Я пытаюсь создать первичное сито в Python.Python list.remove for loop "x not in list"
Я начинаю с составления списка от 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)
это печатает: [...] 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
Что случилось с моими рассуждениями?
Я использую PyCharm, есть ли способ для меня распечатать значение для x во время ошибки?
Отлично. Да, как я писал другому парню, я удалил цикл while, это создало проблемы, потому что программа еще не перешла к следующему премьеру. Ошибка исчезла, и мой список сохранил 2 и удалил все свои кратные. Отлично. Спасибо за обработку исключений, я этого не делал раньше, всегда узнавая больше. Еще раз спасибо. – DrOnline