Как избавиться от None в выдаче результата функции print()?

Прошу не судить строго -- я только учусь.

Задача: нужно написать класс генератора простых чисел.

Ограничение: необходимо вызывать объект генератора при помощи функции print(next()). Автотесты проверяют код при помощи print(next()) и ожидают на выходе список простых чисел от 2 до 11: [2, 3, 5, 7, 11].

Проблема: написанный мной код, помимо простых чисел, выдаёт ещё и None для всех составных чисел, что не соответствует ожидаемой выдаче.

Вопрос: как перехватить/избавиться от None в выдаче при использовании print()?

PS: нашёл похожую проблему здесь, но предложенные решения не подошли, либо я не нашёл, как их адаптировать.

Спасибо!

class PrimeGenerator:
    def __init__(self, stop):
        self.stop = stop
        self.i = 2

    def __next__(self):
        try:
            if self.i < self.stop:
                current = self.i
                self.i += 1
                for number in range(2, current):
                    if current % number == 0:
                        break
                else:
                    return current
        except:
            StopIteration()


g = PrimeGenerator(12)

print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))

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

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

Необходимо переписать метод next так, что бы он обходил последовательность чисел, и накапливал найденные простые числа и их возвращал списком

class PrimeGenerator:
    def __init__(self, stop):
        self.stop = stop
        self.begin = 2

    def __next__(self):
        # Создаем список
        simple = []
        current = self.begin
        try:
            # Пока не достигли предела
            while current <= self.stop:
                # Проверяем на простоту
                for number in range(2, current):
                    if current % number == 0:
                        break
                else:
                    # Если число простое, добавляем в список
                    simple.append(current)
                # Увеличиваем счетчик
                current += 1
            # Возвращаем полученный список простых чисел
            return simple
        except:
            StopIteration()


print(next(PrimeGenerator(12)))
print(next(PrimeGenerator(32)))
print(next(PrimeGenerator(64)))
print(next(PrimeGenerator(128)))
→ Ссылка