Как избавиться от 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 шт):
Необходимо переписать метод 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)))