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

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

2 точки общо

5 успешни теста
0 неуспешни теста
Код
Скрий всички коментари

 1import functools # ползвам го за да достъпвам името на функцията, без него на 9ти ред f.__name__ връша "wrapper"
 2
 3memory = {}  # ключ = адрес(малки букви, _), стойност = списък от (говорещ, фраза)
 4
 5def memnick(*funcs):
 6    if funcs:
 7        result = []
 8        for f in funcs:
 9            fname_key = f.__name__.lower().replace(" ", "_")
10            if fname_key in memory:
11                for speaker_name, phrase in memory[fname_key]:
12                    result.append(f"С гласа на {speaker_name}: {phrase}")
13        return result
14
15    def decorator(func):
16        fname = func.__name__
17
18        @functools.wraps(func)
19        def wrapper(*args, **kwargs):
20            phrase = func(*args, **kwargs)
21            if "," in phrase:
22                addressed, _ = phrase.split(",", 1)
23                addressed = addressed.strip()
24                addressed_key = addressed.lower().replace(" ", "_")
25
26                if addressed_key not in memory:
27                    memory[addressed_key] = []
28
29                speaker_name = " ".join(w.capitalize() for w in fname.split("_"))
30
31                if (speaker_name, phrase) not in memory[addressed_key]:
32                    memory[addressed_key].append((speaker_name, phrase))
33            return phrase
34
35        return wrapper
36
37    return decorator
38
39"""
40@memnick()
41def божана():
42    return "Почекаин, ти си луд!"
43
44божана()
45
46@memnick()
47def бай_венци():
48    return "Емил, айде да играем шах!"
49
50бай_венци()
51
52@memnick()
53def бай_венци():
54    return "Емил, гладен съм!"
55
56бай_венци()
57
58@memnick()
59def емил():
60    return "Божана, намери сина ми."
61
62емил()
63
64@memnick()
65def емил():
66    return "Почекаин, нищо не става от тебе."
67
68емил()
69
70@memnick()
71def почекаин():
72    return "Божана, ще те любя."
73
74почекаин()
75
76print(memnick(емил, божана))
77print(memnick(бай_венци))
78print(memnick(почекаин))
79
80def баба():
81    pass
82
83func = баба
84print(func.__name__)
85func.__name__ = "дядо"
86print(баба.__name__)
87"""

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

OK

Дискусия
История
Това решение има само една версия.