где поставить 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)
→ Ссылка