mksmvnv
@mksmvnv

Как реализовать корректное выполнение программы на Python?

Я пытался скорректить вывод, но так и не получилось.

Вот условие задачи:

Необходимо написать генераторную функцию solution, которая будет фильтровать данные из последовательности data функцией func_filter, к полученным данным применять функцию func_map и возвращать в качестве значения каждый второй элемент полученной последовательности. Нужно пользоваться здесь концепцией генератора, то есть обрабатывать не все данные разом, а только те, что необходимы для возвращения следующего значения. Дополните также код своей реализацией кэшируещего декоратора:

def cache_deco(func):
# YOUR CODE HERE

def solution(func_map, func_filter, data):
# YOUR CODE HERE

code = []
while data := input():
code.append(data)
code = "\n".join(code)
exec(code)

Мой код:

def cache_deco(func): 
    cache = {}
    def wrapper(*args):
        if args in cache: 
            return cache[args]
        result = func(*args)
        cache[args] = result

        return result

    return wrapper


def solution(func_map, func_filter, data):
    filtered_data = filter(func_filter, data)
    mapped_data = map(func_map, filtered_data)
    next(mapped_data)
    for data in mapped_data:
        yield data


code = []
while data := input():
    code.append(data)
code = "\n".join(code)
exec(code)

Вводные данные:
def calc():
    count = 0
    @cache_deco
    def calc_(x):
        nonlocal count
        count += 1
        print("Call:", count)
        return x
    return calc_
    for i in solution(calc(), lambda x: x % 2 == 1, (1, 1, 2, 2, 2, 3, 1, 2, 3, 1)):
    print(i)

Выходные данные по задаче:
Call: 1
1
Call: 2
3
3

Мои выходные данные:
Call: 1
1
Call: 2
3
1
3
1

*Тут либо проблема с декоратором, и он с кешем работает неверно. Либо я в функции накосячил. В общем, пожалуйста,
кто видит проблему, помогите исправить. Уже все перепробовал, не понимаю в чем ошибка.
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
@AWEme
Retard Soft Inc.
В функции solution строка next(mapped_data) лишняя, так же в условии сказано, что возвращать нужно каждый второй элемент.
def solution(func_map, func_filter, data):
    filtered_data = filter(func_filter, data)
    mapped_data = map(func_map, filtered_data)
    for i, data in enumerate(mapped_data):
        if i % 2 == 0:
            yield data
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы