Предизвикателства > Пазарски списъци > Решения > Решението на Алекс Карабашев

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

1 точки общо

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

 1def memnick(*funcs, memory={}):
 2    def format_func_name(name):
 3        names = name.split("_")
 4        return " ".join(name.capitalize() for name in names)
 5
 6    if len(funcs) > 0:
 7        result = []
 8        for func in funcs:
 9            formated_name = format_func_name(func.__name__)
10            if formated_name in memory:
11                for caller, phrase in memory[formated_name]:
12                    result.append(f"С гласа на {caller}: {phrase}")
13        return result
14
15    def decorator(func):
16        def wrapper():
17            result = func()
18            called = result.split(",")[0]
19            if called not in memory:
20                memory[called] = set()
21            formated_name = format_func_name(func.__name__)
22            memory[called].add((formated_name, result))
23            return result
24        wrapper.__name__ = func.__name__
25        return wrapper
26    return decorator
27
28@memnick()
29def божана():
30    return "Почекаин, ти си луд!"
31
32божана()
33
34@memnick()
35def бай_венци():
36    return "Емил, айде да играем шах!"
37
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
65print(memnick(емил, божана))
66
67# ["С гласа на Бай Венци: Емил, айде да играем шах!",
68#  "С гласа на Бай Венци: Емил, гладен съм!",
69#  "С гласа на Емил: Божана, намери сина ми.",
70#  "С гласа на Почекаин: Божана, ще те любя."]
71
72print(memnick(бай_венци))
73# [] - никой не се е обръщал към Бай Венци в никоя от горните фрази
74
75print(memnick(почекаин))
76# ["С гласа на Божана: Почекаин, ти си луд!",
77#  "С гласа на Емил: Почекаин, нищо не става от тебе."]

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

======================================================================
ERROR: test_memnick_decorates_variable_functions (test.TestMemnick.test_memnick_decorates_variable_functions)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 108, in test_memnick_decorates_variable_functions
solution.memnick()(граматиков)("Капан 1", "Капан 2", "кос", "друг кос", утрепан_от_мамника=True)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: memnick.<locals>.decorator.<locals>.wrapper() got an unexpected keyword argument 'утрепан_от_мамника'

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: ['С г[133 chars]а на Почекаин: Божана, ще те любя.', 'С гласа [36 chars]ах!'] != ['С г[133 chars]а на Емил: Божана, намери сина ми.', 'С гласа [123 chars]ах!']

First differing element 2:
'С гласа на Почекаин: Божана, ще те любя.'
'С гласа на Емил: Божана, намери сина ми.'

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, errors=1)

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

Получаваш точка, защото тестовете щяха да ти дадат една, ако нямаше всичките тези call-ове в кода. Ще споменем за това на лекцията.
История
Това решение има само една версия.