Как вы помните простое число — это такое число которое делится только на себя и на 1.
Никаких супер мега методик тут не будет. Я просто постараюсь на примере объяснить значение команды yield.
С начала напишем функцию, которая будет проверять простое это число или нет:
def isprime(n): if n == 1: return False for x in range(2, n): if n % x == 0: return False else: return True
Думаю тут затруднений быть не должно.. Функция просто проверяет в цикле все числа от 2 до проверяемого и если хотя-бы 1 делится без остатка возвращает лож.
Следующей будет самая «интересная» функция этой статьи:
def primes(n = 1): while(True): if isprime(n): yield n n += 1
Эта функция генерирует простые числа. Мы в бесконечном цикле (не бойтесь это не повлияет на ресурсы, на самом деле в бесконечность интерпретатор не залезет) проверяем каждое число от 1 и если оно простое заносим его в результат при помощи yield. Эта команда по сути является чем-то вроде функции добавления значений в результат. Тут это неплохо показано на примере.
Ну и теперь используем єто всё:
for n in primes(): if n > 100: break print(n)
Для каждого элемента (который мы назвали n) из числа который генерируется в primes(). И выводим все числа меньшие сотни.
Ваш код выдает не только простые числа, он выводит нечетные числа. Следует подправить первую функцию:
def isprime(n):
….if n == 1:
……..return False
….for x in range(2, n):
……..if n % x == 0:
…………return False
….return True
Если я введу двойку то ответ будет Not prime (хотя это Prime). Почему нельзя прописать что если n == 2 то это Prime?
можно