Предизвикателства > Мемник > Решения > Решението на Илиян Гаврилов

Резултати
2 точки от тестове
0 точки от учител

2 точки общо

5 успешни теста
0 неуспешни теста
Код

 1from collections import defaultdict, OrderedDict
 2
 3PHRASE_FORMAT = "С гласа на {}: {}"
 4PHRASE_SEP = ", "
 5FUNC_NAME_SEP = "_"
 6ADRESSE_IDX = 0
 7
 8phrases = defaultdict(OrderedDict)
 9
10def format_name(text):
11    return " ".join(word.capitalize() for word in text.split(FUNC_NAME_SEP))
12
13def memnick(*args):
14    if args:
15        return [phrase for f in args for phrase in phrases[format_name(f.__name__)].keys()]
16
17    def decorator(func):
18        def wrapper(*_args, **_kwargs):
19            phrase = func(*_args, **_kwargs)
20            adresse = phrase.split(PHRASE_SEP)[ADRESSE_IDX]
21            voice = format_name(func.__name__)
22            full_phrase = PHRASE_FORMAT.format(voice, phrase)
23
24            phrases[adresse][full_phrase] = None
25            return phrase
26
27        wrapper.__name__ = func.__name__
28        return wrapper
29    return decorator

.....
----------------------------------------------------------------------
Ran 5 tests in 0.001s

OK

Дискусия
Илиян Гаврилов
13.03.2026 15:17

Еми евентуално ако се използва пак този индекс при бъдещо развитие. Иначе едва ли скоро ще се промени езикът така, че обръщенията да не са първи.
Виктор Бечев
13.03.2026 12:57

Важи. Единственото, което ми се струва излишно е константата `ADRESSE_IDX` - може би не бих създал променлива за такъв тип литерал _(индекс на списък, който не очаквам да се променя)_, но не пречи. И определено не си заслужава да качваш нова версия без него, дори да се съгласиш. Ако пък не си съгласен - приемам твоето несъгласие.
История
Това решение има само една версия.