Уведомления

Группа в Telegram: @pythonsu

#1 Март 30, 2022 12:39:18

vladimir_vl_vlad
Зарегистрирован: 2021-07-16
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите понять как работают методы __iter__ и __next__

В общем, есть простая функция, находящая простые числа. С ней все понятно. Но у меня задание создать класс итерируемых объектов, который будет делать тоже самое. И тут я в тупике: я понимаю, что код внутри метода __next__ должен итерироваться поэтому никаких списков внутри него быть не должно (это противоречит самой идее итератора) Но как запилить решение задачи без использования списка я не понимаю. Буду рад помощи.
Функция:

 def get_prime_numbers(n):
    prime_numbers = []
    for number in range(2, n+1):
        for prime in prime_numbers:
            if number % prime == 0:
                break
        else:
            prime_numbers.append(number)
    return prime_numbers
Мой вариант решения (нерабочий):
 class PrimeNumbers:
    def __init__(self, n):
        self.n = n
        self.number = 0
        self.prime = 2
    def __iter__(self):
        self.number = 0
        self.prime = 2
        return self
    def __next__(self):
        self.number += 1
        if self.number > self.n:
            raise StopIteration()
        for self.number in range(2, self.n+1):
            if self.number % self.prime != 0:
                self.prime = self.number
        return self.prime
prime_number_iterator = PrimeNumbers(n=10000)
for number in prime_number_iterator:
    print(number)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version