где поставить yield в генераторе простых чисел (из которых потом нужно выбрать счастливые)?
есть генератор, точнее не генератор, т.к. не стоит yield. куда его поставить? как только ни пробовал. то он ничего не выдает, то выдает None. подскажите, пожалуйста.
def prime_numbers_generator(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 #да, здесь return, куда поставить yield я как раз не знаю
for number in prime_numbers_generator(n=10000):
print(number)
и потом к этому генератору нужно написать функцию-фильтр, чтобы получить только счастливые числа
если число имеет нечетное число цифр (например 727 или 92083),
то для вычисления "счастливости" брать равное количество цифр с начала и конца:
727 -> 7(2)7 -> 7 == 7 -> True
92083 -> 92(0)83 -> 9+2 == 8+3 -> True
сделал такой вариант:
def lucky_digits(string):
middle = len(str(string)) // 2
if middle == 0 or string[:middle] == string[-middle:]:
print(f'{string} - Счастливое')
else:
print(f'{string} - Обычное')
но это тоже не то...
Ответы (1 шт):
Автор решения: mkkik
→ Ссылка
from operator import eq
def prime_numbers_generator(n):
prime_numbers = []
for number in range(2, n + 1):
for prime in prime_numbers:
if not number % prime:
break
else:
prime_numbers.append(number)
yield number
def is_eq_sum(str_v, *slices):
return eq(*map(lambda s: sum(map(int, s)), map(str_v.__getitem__, slices)))
def lucky_digits(v):
str_v = str(v)
if len(str_v) < 2:
return True
else:
middle = len(str_v) // 2
return is_eq_sum(str_v, slice(middle), slice(-middle, None))
for i in filter(lucky_digits, prime_numbers_generator(100000)):
print(i)