Вывод 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 шт):
При каждом входе в метод __next__(self) ваша функция делает одну проверку, и чего-то да возвращает. Либо очередное число check, если оно простое. Либо ничего, т.е. по-сути None.
Наверное следует не выходить из функции, если число не простое, а перейти к следующему числу, проверить его, и т.д.
Т.е. просто замените if self.num < self.limit: на while self.num < self.limit:. Ну и строчку с else: уберите, с подвижкой raise StopIteration влево (хотя это и не обязательно (имею ввиду убирание else)).