отображать простые числа с верхним и нижним пределом, используя итераторы (не генератор) - PullRequest
0 голосов
/ 04 ноября 2019

Я получаю значения, но он также печатает 'Нет' для не простых значений

class Prime:
    def __init__(self, n1, n2):
        self.n1 = n1
        self.n2 = n2

    def __iter__(self):
        return self

    def __next__(self):
        num = self.n1
        self.n1 += 1
        for x in range(2, num):
            if num % x == 0:
                break
        else:
            return num


z = Prime(30, 200)
for k in z:
    print(k)

Результаты: Нет 31 Нет Нет Нет Нет Нет 37 Нет Нет Нет 41 Нет 43

1 Ответ

2 голосов
/ 04 ноября 2019

Если break включен в цикл for / else в Python, блок else никогда не выполняется. Следовательно, None возвращается по умолчанию. Это почти наверняка является основной причиной вашей ошибки.

Ваша функция, вероятно, должна выглядеть следующим образом:

    def __next__(self):
        num = self.n1
        self.n1 += 1
        for x in range(2, num):
            if num % x == 0:
                break
        return num

(Хотя теперь, когда я смотрю на это, цикл for, вероятно, долженбыть циклом while, я не уверен, что ваша логика здесь верна)

для / еще ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...