Как сделать функцию-фильтр
Есть генератор простых чисел
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
И к нему есть функции, позволяющие проверить числа из генератора на наличие счастливых, и вывести на консоль с пометкой true
from operator import eq
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 number in prime_numbers_generator(n=1000):
print(number, lucky_digits(number), sep=' ')
Подскажите, как можно упростить этот код и сделать функцию фильтр, которая выдает такой же результат как и сейчас, берет из генератора значения и если число счастливое то рядом пишет true, если нет - false
Ответы (1 шт):
Автор решения: Gladius
→ Ссылка
Ну как-то так:
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_lucky(number):
number = str(number)
middle = len(number) // 2
return True if sum(map(int, number[:middle])) == sum(map(int, number[-middle:])) else False
for i in prime_numbers_generator(1000):
print(i, is_lucky(i), sep=' ')