Предизвикателства > Пазарски списъци > Решения > Решението на Стефан Иванов

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

2 точки общо

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

 1memory = []
 2seen_phrases = set()
 3
 4
 5def prettify_name(name):
 6    return " ".join(word.capitalize() for word in name.split("_"))
 7
 8
 9def normalize_address(address):
10    return " ".join(word.capitalize() for word in address.strip().split())
11
12
13def memnick(*funcs):
14    if not funcs:
15        def decorator(func):
16            def wrapper(*args, **kwargs):
17                phrase = func(*args, **kwargs)
18
19                if phrase not in seen_phrases:
20                    seen_phrases.add(phrase)
21
22                    address, _ = phrase.split(",", 1)
23                    memory.append((normalize_address(address), phrase, prettify_name(func.__name__)))
24                return phrase
25            wrapper.__name__ = func.__name__
26            return wrapper
27        return decorator
28
29    wanted_names = set()
30    for func in funcs:
31        wanted_names.add(prettify_name(func.__name__))
32
33    result = []
34    for address, phrase, speaker in memory:
35        if address in wanted_names:
36            result.append(f"С гласа на {speaker}: {phrase}")
37
38    return result

..F..
======================================================================
FAIL: test_memnick_memorizes (test.TestMemnick.test_memnick_memorizes)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 51, in test_memnick_memorizes
self.assertEqual(
~~~~~~~~~~~~~~~~^
[
^
...<5 lines>...
solution.memnick(божана, емил),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
AssertionError: Lists differ: ['С гласа на Лазар: Божана, може би ще те любя.', 'С г[166 chars]ах!'] != ['С гласа на Бай Венци: Емил, айде да играем шах!', 'С[166 chars]бя.']

First differing element 0:
'С гласа на Лазар: Божана, може би ще те любя.'
'С гласа на Бай Венци: Емил, айде да играем шах!'

+ ['С гласа на Бай Венци: Емил, айде да играем шах!',
- ['С гласа на Лазар: Божана, може би ще те любя.',
? ^

+ 'С гласа на Лазар: Божана, може би ще те любя.',
? ^

'С гласа на Митака: Божана, на този етап не съм сигурен дали искам да те '
'любя.',
- 'С гласа на Почекаин: Божана, ще те любя.',
? ^

+ 'С гласа на Почекаин: Божана, ще те любя.']
? ^

- 'С гласа на Бай Венци: Емил, айде да играем шах!']

----------------------------------------------------------------------
Ran 5 tests in 0.002s

FAILED (failures=1)

Дискусия
История

f1memory = []f1memory = []
2seen_phrases = set()2seen_phrases = set()
33
44
5def prettify_name(name):5def prettify_name(name):
6    return " ".join(word.capitalize() for word in name.split("_"))6    return " ".join(word.capitalize() for word in name.split("_"))
77
88
9def normalize_address(address):9def normalize_address(address):
10    return " ".join(word.capitalize() for word in address.strip().split())10    return " ".join(word.capitalize() for word in address.strip().split())
1111
1212
13def memnick(*funcs):13def memnick(*funcs):
14    if not funcs:14    if not funcs:
15        def decorator(func):15        def decorator(func):
16            def wrapper(*args, **kwargs):16            def wrapper(*args, **kwargs):
17                phrase = func(*args, **kwargs)17                phrase = func(*args, **kwargs)
1818
19                if phrase not in seen_phrases:19                if phrase not in seen_phrases:
20                    seen_phrases.add(phrase)20                    seen_phrases.add(phrase)
2121
22                    address, _ = phrase.split(",", 1)22                    address, _ = phrase.split(",", 1)
23                    memory.append((normalize_address(address), phrase, prettify_name(func.__name__)))23                    memory.append((normalize_address(address), phrase, prettify_name(func.__name__)))
24                return phrase24                return phrase
25            wrapper.__name__ = func.__name__25            wrapper.__name__ = func.__name__
26            return wrapper26            return wrapper
27        return decorator27        return decorator
2828
29    wanted_names = set()29    wanted_names = set()
30    for func in funcs:30    for func in funcs:
31        wanted_names.add(prettify_name(func.__name__))31        wanted_names.add(prettify_name(func.__name__))
3232
33    result = []33    result = []
34    for address, phrase, speaker in memory:34    for address, phrase, speaker in memory:
35        if address in wanted_names:35        if address in wanted_names:
36            result.append(f"С гласа на {speaker}: {phrase}")36            result.append(f"С гласа на {speaker}: {phrase}")
3737
38    return result38    return result
t39 t
40@memnick()
41def божана():
42    return "Почекаин, ти си луд!"
43 
44 
45@memnick()
46def бай_венци():
47    return "Емил, айде да играем шах!"
48 
49 
50@memnick()
51def бай_венци_2():
52    return "Емил, гладен съм!"
53 
54 
55бай_венци_2.__name__ = "бай_венци"
56 
57 
58@memnick()
59def емил():
60    return "Божана, намери сина ми."
61 
62 
63@memnick()
64def емил_2():
65    return "Почекаин, нищо не става от тебе."
66 
67 
68емил_2.__name__ = "емил"
69 
70 
71@memnick()
72def почекаин():
73    return "Божана, ще те любя."
74 
75 
76print(божана())
77print(бай_венци())
78print(бай_венци_2())
79print(емил())
80print(емил_2())
81print(почекаин())
82 
83print(memnick(емил, божана))
84print(memnick(бай_венци))
85print(memnick(почекаин))
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op