Вы изменяете mylist
, перебирая его.Это даст странные результаты.Во время первого запуска вашего цикла, i
будет назначен первый элемент вашего списка, то есть 2
.Затем оператор
p = mylist.pop(0)
удаляет этот самый элемент из начала списка, а p
также устанавливается на 2
.Затем ваш чек i % p == 0
даст True
, и вы попытаетесь удалить i
из списка, но он уже исчез, в результате чего вы получите сообщение об ошибке, которое вы цитировали.
Полная логика этогопетля, кажется, разорвана.Для каждого простого числа, с которым вы столкнетесь, вам нужно удалить из списка все кратные этого простого числа.Обычно для этого вам нужны два вложенных цикла.
Кроме того, ваша функция
def number_list(n):
mylist = []
for i in range(2,n+1):
mylist.append(i)
return mylist
эквивалентна
def number_list(n):
return range(2, n + 1)
, то есть вам вообще не понадобится эта функция, просто используйте range(2, n + 1)
вместо.