1memory = []
2seen_phrases = set()
3
4def name_format(name):
5 result = ''
6 upper_next = True
7
8 for letter in name:
9 if letter == '_':
10 result += ' '
11 upper_next = True
12 else:
13 if upper_next:
14 result += letter.upper()
15 upper_next = False
16 else:
17 result += letter
18
19 return result
20
21def memnick(*funcs):
22 if not funcs:
23 def decorator(func):
24 def wrapper(*args, **kwargs):
25 phrase = func(*args, **kwargs)
26
27 if phrase not in seen_phrases:
28 seen_phrases.add(phrase)
29
30 i = 0
31 while i < len(phrase) and phrase[i] != ',':
32 i += 1
33
34 addressed = phrase[:i]
35 memory.append((func.__name__, addressed, phrase))
36
37 return phrase
38
39 wrapper.__name__ = func.__name__
40 return wrapper
41 return decorator
42
43 final_result = []
44
45 for func in funcs:
46 aim = name_format(func.__name__)
47
48 for speaker, address, phrase in memory:
49 if name_format(address) == aim:
50 final_result.append(
51 'С гласа на {}: {}'.format(name_format(speaker), phrase)
52 )
53
54 return final_result
.....
----------------------------------------------------------------------
Ran 5 tests in 0.001s
OK
Виктор Бечев
15.03.2026 13:20Решението ти работи впечатляващо добре, предвид това, че си го написал на Pascal. :grin:
Шегата настрана, хубаво е, че можеш да си напишеш алгоритмите сам, но in the long run ще е добре да се възползваш от вградените в езика инструменти. Например:
```
upper_next = True
for letter in name:
if letter == '_':
result += ' '
upper_next = True
else:
if upper_next:
result += letter.upper()
upper_next = False
else:
result += letter
```
Е еквивалентно на:
```
name.replace("_", " ").title()
```
Не е проблем за нас да решаваш задачите както ти е кеф, просто индикираме, че имаш много неща в езика, които може да са ти от полза ако решаваш проблеми, които изискват по-сериозно количество код.
|
| f | 1 | memory = [] | f | 1 | memory = [] |
| 2 | seen_phrases = set() | 2 | seen_phrases = set() | ||
| 3 | 3 | ||||
| 4 | def name_format(name): | 4 | def name_format(name): | ||
| 5 | result = '' | 5 | result = '' | ||
| 6 | upper_next = True | 6 | upper_next = True | ||
| 7 | 7 | ||||
| 8 | for letter in name: | 8 | for letter in name: | ||
| 9 | if letter == '_': | 9 | if letter == '_': | ||
| 10 | result += ' ' | 10 | result += ' ' | ||
| 11 | upper_next = True | 11 | upper_next = True | ||
| 12 | else: | 12 | else: | ||
| 13 | if upper_next: | 13 | if upper_next: | ||
| 14 | result += letter.upper() | 14 | result += letter.upper() | ||
| 15 | upper_next = False | 15 | upper_next = False | ||
| 16 | else: | 16 | else: | ||
| 17 | result += letter | 17 | result += letter | ||
| 18 | 18 | ||||
| 19 | return result | 19 | return result | ||
| 20 | 20 | ||||
| 21 | def memnick(*funcs): | 21 | def memnick(*funcs): | ||
| 22 | if not funcs: | 22 | if not funcs: | ||
| 23 | def decorator(func): | 23 | def decorator(func): | ||
| 24 | def wrapper(*args, **kwargs): | 24 | def wrapper(*args, **kwargs): | ||
| 25 | phrase = func(*args, **kwargs) | 25 | phrase = func(*args, **kwargs) | ||
| 26 | 26 | ||||
| 27 | if phrase not in seen_phrases: | 27 | if phrase not in seen_phrases: | ||
| 28 | seen_phrases.add(phrase) | 28 | seen_phrases.add(phrase) | ||
| 29 | 29 | ||||
| 30 | i = 0 | 30 | i = 0 | ||
| 31 | while i < len(phrase) and phrase[i] != ',': | 31 | while i < len(phrase) and phrase[i] != ',': | ||
| 32 | i += 1 | 32 | i += 1 | ||
| 33 | 33 | ||||
| 34 | addressed = phrase[:i] | 34 | addressed = phrase[:i] | ||
| 35 | memory.append((func.__name__, addressed, phrase)) | 35 | memory.append((func.__name__, addressed, phrase)) | ||
| 36 | 36 | ||||
| 37 | return phrase | 37 | return phrase | ||
| 38 | 38 | ||||
| 39 | wrapper.__name__ = func.__name__ | 39 | wrapper.__name__ = func.__name__ | ||
| 40 | return wrapper | 40 | return wrapper | ||
| 41 | return decorator | 41 | return decorator | ||
| 42 | 42 | ||||
| 43 | final_result = [] | 43 | final_result = [] | ||
| 44 | 44 | ||||
| 45 | for func in funcs: | 45 | for func in funcs: | ||
| 46 | aim = name_format(func.__name__) | 46 | aim = name_format(func.__name__) | ||
| 47 | 47 | ||||
| 48 | for speaker, address, phrase in memory: | 48 | for speaker, address, phrase in memory: | ||
| 49 | if name_format(address) == aim: | 49 | if name_format(address) == aim: | ||
| 50 | final_result.append( | 50 | final_result.append( | ||
| 51 | 'С гласа на {}: {}'.format(name_format(speaker), phrase) | 51 | 'С гласа на {}: {}'.format(name_format(speaker), phrase) | ||
| 52 | ) | 52 | ) | ||
| 53 | 53 | ||||
| t | 54 | return '[' + ',\n '.join(f'"{i}"' for i in final_result) + ']' | t | 54 | return final_result |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||