В Генераторе, зачем нам нужен этот дополнительный шаг в этой программе ?. Не могли бы вы объяснить это подробно?
class PrimeGenerator:
def __init__(self, stop):
self.stop = stop
self.start=2
self.number=0
def __next__(self):
for self.number in range(self.start,self.stop):
for x in range(2, self.number):
if self.number % x == 0:
break
else:
self.start=self.number+1
return self.number
raise StopIteration
obj = PrimeGenerator(5)
print(next(obj))
В приведенном выше коде мы увеличиваем значение self.start здесь. Это self.start = self.number + 1. Я сомневаюсь, что он может автоматически перебирать цикл for. Еще почему и здесь увеличилось?
1 ответ
Генератор должен генерировать простые числа. Он начинается со значения 2 как self.number, а затем проверяет, делит ли какое-либо число от 2 до self.number self.number, если это так, это не простое число (поскольку простые числа можно делить только на 1 или на себя) .
После того, как он нашел простое число (что означает, что он не перешел к оператору break, так как никакое число не делило его), вам нужно увеличить self.start, чтобы начать одно число после простого числа, которое вы нашли прямо сейчас. Затем вы возвращаете прайм.
Если вы не увеличиваете значение self.start, вы всегда будете проверять первое простое число.
Дополнительно: ваш тест проверяет только простые числа больше 2, поскольку 2% 2 равно нулю.
И для будущих публикаций (особенно для кода Python) убедитесь, что вкладки сделаны правильно. Ваш код должен выглядеть так:
class PrimeGenerator:
def __init__(self, stop):
self.stop = stop
self.start=2
self.number=0
def __next__(self):
for self.number in range(self.start,self.stop):
for x in range(2, self.number):
if self.number % x == 0:
break
else:
self.start=self.number+1
return self.number
obj = PrimeGenerator(7)
print(next(obj))
Похожие вопросы
Новые вопросы
python-3.x
По вопросам программирования Python, относящегося к версии языка 3+. Используйте более общий тег [python] для всех вопросов Python и добавляйте его только в том случае, если ваш вопрос зависит от версии. Используйте теги [python-2.x] для вопросов Python 2.