Ошибка в коде счетчика количества простых чисел

Всем привет! Встала задачка. На входе число, функция возвращает количество простых чисел, меньше или равных этому числу.

Цикл получился бесконечным из-за оператора else, хотя мне казалось, в этом коде бесконечного цикла не может быть: 1) Из-за постоянного прибавления числа к переменной x, то есть должно сработать условие while x <= num

2) Из-за цикла for, где рано или поздно мы должны перебрать все значения.

Но почему он получается бесконечным? Спасибо.

def func (num):
#проверка на 0 и 1
    if num < 2:
        return 0

#список для хранения простых чисел
    primes = [2]

    x = 3
# х пробегает значения от 3 до num
    while x <= num:
        for y in range(3,x):
            if x%y == 0:
                x += 2
                break
            else:
                primes.append(x)
                x += 2

    print(primes)
    return len(primes)

func(100)

Ответы (1 шт):

Автор решения: SmellyNS

for y in range(3,x): в вашем случае то же, что и for y in range(3,3):

В свою очередь это значит for y in []: (крайне грубо выражаясь. range - не list)

Вы в цикл не заходите и просто вечно проверяете условие x <= num

→ Ссылка