Домашни > Функцията, която казва "Ni!" > Решения > Решението на Николай Стоянов

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

10 точки общо

10 успешни теста
0 неуспешни теста
Код (Решение 2.0)

 1VALID_SHRUBBERY_PARTS = ('храст', 'shrub', 'bush')
 2MAX_PRICE = 42
 3
 4
 5def function_that_says_ni(*args, **kwargs):
 6    price = 0
 7
 8    price += check_args(args) # there are no keyword args in args so it returns only price
 9
10    res = check_kwargs(kwargs)
11    price += res[0]
12    unique_letters = res[1]
13
14    if int(price) > 0 and price <= MAX_PRICE and len(unique_letters) % int(price) == 0:
15        return f'{price:.2f}лв'
16
17    return 'Ni!'
18
19def check_args(args):
20    """Sums all relevant prices from args"""
21    price = 0
22
23    for arg in args:
24        if type(arg) is dict:
25            if arg.get('name'):
26                if arg['name'].lower() in VALID_SHRUBBERY_PARTS:
27                    price += arg.get('cost', 0)
28
29    return price
30
31def check_kwargs(kwargs):
32    """Sums all relevant prices from kwargs and gets all unique letters from names of named arguments"""
33    price = 0
34    unique_letters = set()
35
36    for arg_name, item in kwargs.items():
37        if type(item) is dict:
38            if item.get('name'):
39                if item['name'].lower() in VALID_SHRUBBERY_PARTS:
40                    price += item.get('cost', 0)
41                    unique_letters.update(arg_name)
42
43    return price, unique_letters

..........
----------------------------------------------------------------------
Ran 10 tests in 0.000s

OK

Дискусия
Виктор Бечев
19.10.2024 18:27

Отвъд двата коментара - хубав стил, имена, дори докстрингове. :)
История

f1VALID_SHRUBBERY_PARTS = ('храст', 'shrub', 'bush')f1VALID_SHRUBBERY_PARTS = ('храст', 'shrub', 'bush')
2MAX_PRICE = 422MAX_PRICE = 42
33
44
5def function_that_says_ni(*args, **kwargs):5def function_that_says_ni(*args, **kwargs):
6    price = 06    price = 0
77
8    price += check_args(args) # there are no keyword args in args so it returns only price8    price += check_args(args) # there are no keyword args in args so it returns only price
99
n10    _ = check_kwargs(kwargs)n10    res = check_kwargs(kwargs)
11    price += _[0]11    price += res[0]
12    unique_letters = _[1]12    unique_letters = res[1]
1313
14    if int(price) > 0 and price <= MAX_PRICE and len(unique_letters) % int(price) == 0:14    if int(price) > 0 and price <= MAX_PRICE and len(unique_letters) % int(price) == 0:
15        return f'{price:.2f}лв'15        return f'{price:.2f}лв'
1616
17    return 'Ni!'17    return 'Ni!'
1818
19def check_args(args):19def check_args(args):
20    """Sums all relevant prices from args"""20    """Sums all relevant prices from args"""
21    price = 021    price = 0
2222
23    for arg in args:23    for arg in args:
24        if type(arg) is dict:24        if type(arg) is dict:
25            if arg.get('name'):25            if arg.get('name'):
26                if arg['name'].lower() in VALID_SHRUBBERY_PARTS:26                if arg['name'].lower() in VALID_SHRUBBERY_PARTS:
n27                    if arg.get('cost'):n27                    price += arg.get('cost', 0)
28                        price += arg['cost']
2928
30    return price29    return price
3130
32def check_kwargs(kwargs):31def check_kwargs(kwargs):
33    """Sums all relevant prices from kwargs and gets all unique letters from names of named arguments"""32    """Sums all relevant prices from kwargs and gets all unique letters from names of named arguments"""
34    price = 033    price = 0
35    unique_letters = set()34    unique_letters = set()
3635
37    for arg_name, item in kwargs.items():36    for arg_name, item in kwargs.items():
38        if type(item) is dict:37        if type(item) is dict:
39            if item.get('name'):38            if item.get('name'):
40                if item['name'].lower() in VALID_SHRUBBERY_PARTS:39                if item['name'].lower() in VALID_SHRUBBERY_PARTS:
t41                    if item.get('cost'):t40                    price += item.get('cost', 0)
42                        price += item['cost']
43                    unique_letters.update(arg_name)41                    unique_letters.update(arg_name)
4442
45    return price, unique_letters43    return price, unique_letters
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op