Предизвикателства > Пазарски списъци > Решения > Решението на Николай Георгиев

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

1 точки общо

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

 1from collections import defaultdict
 2
 3memory = defaultdict(set)
 4
 5def format_name(name):
 6    return name.replace("_", " ").title()
 7
 8def memnick(*funcs):
 9
10    if not funcs:
11        def decorator(func):
12            def wrapper(*args, **kwargs):
13                phrase = func(*args, **kwargs)
14                target = format_name(phrase.split(",")[0].strip())
15                speaker = format_name(func.__name__)
16                memory[target].add((speaker, phrase))
17
18                return phrase
19            return wrapper
20        return decorator
21
22    result = []
23    for func in funcs:
24        target = format_name(func.__name__)
25        for speaker, phrase in memory.get(target, []):
26            result.append(f"С гласа на {speaker}: {phrase}")
27
28    return result
29
30@memnick()
31def божана():
32    return "Почекаин, ти си луд!"
33
34божана()
35
36@memnick()
37def бай_венци():
38    return "Емил, айде да играем шах!"
39
40бай_венци()
41
42@memnick()
43def бай_венци():
44    return "Емил, гладен съм!"
45
46бай_венци()
47
48@memnick()
49def емил():
50    return "Божана, намери сина ми."
51
52емил()
53
54@memnick()
55def емил():
56    return "Почекаин, нищо не става от тебе."
57
58емил()
59
60@memnick()
61def почекаин():
62    return "Божана, ще те любя."
63
64почекаин()
65
66print(memnick(почекаин))

[]
.F
Stdout:
[]
F
Stdout:
[]
.F
Stdout:
[]

======================================================================
FAIL: test_memnick_does_not_memorize_repetitions (test.TestMemnick.test_memnick_does_not_memorize_repetitions)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 76, in test_memnick_does_not_memorize_repetitions
self.assertEqual(
~~~~~~~~~~~~~~~~^
["С гласа на Бай Венци: Емил, айде да играем шах!"],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
solution.memnick(емил),
^^^^^^^^^^^^^^^^^^^^^^^
)
^
AssertionError: Lists differ: ['С г[20 chars]мил, айде да играем шах!'] != ['С г[20 chars]мил, гладен съм!', 'С гласа на Бай Венци: Емил[18 chars]ах!']

First differing element 0:
'С гласа на Бай Венци: Емил, айде да играем шах!'
'С гласа на Бай Венци: Емил, гладен съм!'

Second list contains 1 additional elements.
First extra element 1:
'С гласа на Бай Венци: Емил, айде да играем шах!'

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

+ ['С гласа на Бай Венци: Емил, гладен съм!',
? ++ ^^^^ ^

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

Stdout:
[]

======================================================================
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]ах!'] != ['С гласа на Емил: Божана, намери сина ми.', 'С гласа [253 chars]ах!']

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

Second list contains 2 additional elements.
First extra element 4:
'С гласа на Бай Венци: Емил, гладен съм!'

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

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

'С гласа на Митака: Божана, на този етап не съм сигурен дали искам да те '
'любя.',
'С гласа на Почекаин: Божана, ще те любя.',
+ 'С гласа на Бай Венци: Емил, гладен съм!',
'С гласа на Бай Венци: Емил, айде да играем шах!']

Stdout:
[]

======================================================================
FAIL: test_memnick_splits_properly (test.TestMemnick.test_memnick_splits_properly)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 93, in test_memnick_splits_properly
self.assertEqual(
~~~~~~~~~~~~~~~~^
["С гласа на Бай Венци: Емил, айде да играем шах!"],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
solution.memnick(емил),
^^^^^^^^^^^^^^^^^^^^^^^
)
^
AssertionError: Lists differ: ['С г[20 chars]мил, айде да играем шах!'] != ['С г[20 chars]мил, гладен съм!', 'С гласа на Бай Венци: Емил[18 chars]ах!']

First differing element 0:
'С гласа на Бай Венци: Емил, айде да играем шах!'
'С гласа на Бай Венци: Емил, гладен съм!'

Second list contains 1 additional elements.
First extra element 1:
'С гласа на Бай Венци: Емил, айде да играем шах!'

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

+ ['С гласа на Бай Венци: Емил, гладен съм!',
? ++ ^^^^ ^

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

Stdout:
[]

----------------------------------------------------------------------
Ran 5 tests in 0.003s

FAILED (failures=3)

Дискусия
Виктор Бечев
15.03.2026 14:42

**Едит**: Ако случайно си видял коментара за бонус точката - избързах. Реално на решението ти му липсва много критичното преименуване на `wrapper` функцията. Ето ти резултата от следното: ``` for func in funcs: target = format_name(func.__name__) print(memory) print(target) for speaker, phrase in memory.get(target, []): result.append(f"С гласа на {speaker}: {phrase}") ``` Output: ``` defaultdict(<class 'set'>, {'Почекаин': {('Божана', 'Почекаин, ти си луд!'), ('Емил', 'Почекаин, нищо не става от тебе.')}, 'Емил': {('Бай Венци', 'Емил, айде да играем шах!'), ('Бай Венци', 'Емил, гладен съм!')}, 'Божана': {('Почекаин', 'Божана, ще те любя.'), ('Емил', 'Божана, намери сина ми.')}}) Wrapper ``` Нормално е да ти връща празен списък за `memory.get("Wrapper", [])`. 50% от точките за това предизвикателство е добре. Все пак кодът ти не е лош и нещата биха сработили ако това беше налице.
Николай Георгиев
14.03.2026 03:42

Пробвам входовете от примера и все ми връща празен списък, принтирам си речника memory и цялата информация си я има там, не знам къде оплесквам нещата
История
Това решение има само една версия.