Вывод None вместе с простыми числами в классе- итераторе Primes

Задача: класс- итератор. Принимает максимальное число N. Возвращает все простые числа от 1 до N.

При выводе я получаю простое число (если оно им является) и None если число не простое. Хочу понять, почему так происходит, где ошибка и как поправить

Заранее спасибо за ответ.

Код:

class Primes:
    def __init__(self, limit):
        self.num = 0
        self.limit = limit

    def __isprime(self, n):
        if n % 2 == 0:
            return n == 2
        d = 3
        while d * d <= n and n % d != 0:
            d += 2
        return d * d > n

    def __iter__(self):
        return self

    def __next__(self):
        if self.num < self.limit:
            check = self.num
            self.num += 1
            if self.__isprime(check):
                return check
        else:
            raise StopIteration


mi = Primes(50)
for i in mi:
    print(i)

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

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

При каждом входе в метод __next__(self) ваша функция делает одну проверку, и чего-то да возвращает. Либо очередное число check, если оно простое. Либо ничего, т.е. по-сути None.
Наверное следует не выходить из функции, если число не простое, а перейти к следующему числу, проверить его, и т.д.

Т.е. просто замените if self.num < self.limit: на while self.num < self.limit:. Ну и строчку с else: уберите, с подвижкой raise StopIteration влево (хотя это и не обязательно (имею ввиду убирание else)).

→ Ссылка