Вы написали, что for i in range(2,n):
и в начальной точке n=2
. Таким образом, ваш диапазон будет range(2,2)
, поэтому он вернет пустой список, так что l oop никогда не выполнится, и ваша программа пропадет бесконечно l oop.
И во втором используемом вами коде for...else
for x in range(2, number):
if number % x == 0:
number += 1
counter+=1
break
else:
primes +=number
counter = number
number += 1
Здесь значение for...else
означает, что если для l oop не будет выполнен один раз, то будет выполнена часть else
для l oop. И в else
части вы увеличиваете counter
и number
.
, поэтому, в первый раз number = 2
и для l oop станут for x in range(2, number):
, значение для l oop не будет выполняется так, как я обсуждал выше, если для l oop не превышать один раз else
часть будет выполнена
Так, в else
номер детали будет увеличен на 1, затем в следующей итерации Вы для l oop станете for x in range(2,3)
, поэтому в это время для l oop будет успешно выполнено ...
Для for...else
Ссылка