1from functools import reduce
2
3KEY_NAME = 'name'
4KEY_COST = 'cost'
5NO_MATCH = 'Ni!'
6INPUT_H= 'ХРАСТ'
7INPUT_S = 'SHRUB'
8INPUT_B = 'BUSH'
9VALID_INPUTS = [INPUT_H, INPUT_S, INPUT_B]
10THE_ULTIMATE_ANSWER = 42
11
12def is_too_expensive(cost):
13 return cost > THE_ULTIMATE_ANSWER
14
15def is_nice(kwargs, cost):
16 int_cost = int(cost)
17
18 if int_cost == 0:
19 return False
20
21 unique_letter_count = len(reduce(lambda acc, next: acc.union(list(next)), kwargs.keys(), set()))
22
23 return unique_letter_count % int_cost == 0
24
25def function_that_says_ni(*args, **kwargs):
26 all_dict_args = [
27 *list(filter(lambda p_arg: isinstance(p_arg, dict) , args)),
28 *list(map(lambda key: kwargs[key], filter(lambda key: isinstance(kwargs[key], dict), kwargs)))
29 ]
30 # print(all_dict_args)
31
32 valid_dict_args = list(filter(lambda d: isinstance(d.get(KEY_NAME), str) and d.get(KEY_NAME).upper() in VALID_INPUTS , all_dict_args))
33 # print(valid_dict_args)
34
35 total_cost = reduce(lambda acc, next: acc + next.get(KEY_COST, 0), valid_dict_args, 0)
36 # print(total_cost)
37
38 if is_too_expensive(total_cost):
39 return NO_MATCH
40 elif not is_nice(kwargs, total_cost):
41 return NO_MATCH
42 else:
43 return f"{total_cost:.2f}лв"
..........
----------------------------------------------------------------------
Ran 10 tests in 0.001s
OK
Виктор Бечев
17.10.2024 11:59Отвъд горната дребна забележка и някои от имената из ламбдите, които могат да бъдат по-описателни - добро решение, браво.
П.П. Що се отнася до енъмите - да, можеш да ползваш `enum.Enum`, но съм съгласен, че за нещо толкова дребно е overkill.
|
Димитър Фенерски
16.10.2024 20:491. много ми се щеше да ползвам структ или енум за константите, ама в пайтън май няма? в нета излиза да импортвам енум и да правя клас но ми прилича на overkill
2. надявам се е ок форматирано
3. като тествам ползвам print, затова ги оставям вътре (сега са коментирани). мога да опитам и някакъв интерактивен дебъгер да атачна
4. надявам се да съм дочел условието и да не пропускам неща ....
|
17.10.2024 11:59