1NAMES = ["храст", "shrub", "bush"]
2NI = "Ni!"
3
4
5def function_that_says_ni(*args, **kwargs):
6
7 lst_valid_bushes = []
8 st_unique_symbols_used = set()
9 price = 0
10
11 for arg in args:
12 if "name" in arg and arg["name"].lower() in NAMES:
13 lst_valid_bushes.append(arg)
14
15 if "cost" in arg:
16 price += arg["cost"]
17
18 for kwarg in kwargs:
19 if "name" in kwargs[kwarg] and kwargs[kwarg]["name"].lower() in NAMES:
20 lst_valid_bushes.append(kwargs[kwarg])
21
22 if "cost" in kwargs[kwarg]:
23 price += kwargs[kwarg]["cost"]
24
25 for char in kwarg:
26 st_unique_symbols_used.add(char)
27
28 if len(lst_valid_bushes) == 0:
29 return NI
30
31 lenght = len(st_unique_symbols_used)
32 floor = int(price)
33
34 if lenght != 0:
35 rest = floor / lenght
36 if not rest.is_integer():
37 return NI
38
39 if price > 42.00:
40 return NI
41
42 return f"{price:.2f}лв"
..F.F..E.F
======================================================================
ERROR: test_other_than_dicts (test.TestNi.test_other_than_dicts)
Test with inputs other than dicts.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 74, in test_other_than_dicts
self.assertEqual(function_that_says_ni(1, 3.14, ['some_list'], some_arg={1, 2, 3}), self.NI)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 12, in function_that_says_ni
if "name" in arg and arg["name"].lower() in NAMES:
^^^^^^^^^^^^^
TypeError: argument of type 'int' is not iterable
======================================================================
FAIL: test_cost_whole_part_zero (test.TestNi.test_cost_whole_part_zero)
Test with a total cost part equal to zero.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 43, in test_cost_whole_part_zero
self.assertEqual(function_that_says_ni({'name': 'shrub', 'cost': 0.1},
AssertionError: '0.30лв' != 'Ni!'
- 0.30лв
+ Ni!
======================================================================
FAIL: test_invalid_strings (test.TestNi.test_invalid_strings)
Test with invalid strings that might be misinterpreted.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 69, in test_invalid_strings
self.assertEqual(function_that_says_ni({'name': 'shrub', ' cost': 1}), self.NI) # Space before cost
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: '0.00лв' != 'Ni!'
- 0.00лв
+ Ni!
======================================================================
FAIL: test_with_no_cost (test.TestNi.test_with_no_cost)
Test with a shrub without defined cost.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 30, in test_with_no_cost
self.assertEqual(function_that_says_ni({'name': 'shrub'}), self.NI)
AssertionError: '0.00лв' != 'Ni!'
- 0.00лв
+ Ni!
----------------------------------------------------------------------
Ran 10 tests in 0.001s
FAILED (failures=3, errors=1)
| n | 1 | import math | n | ||
| 2 | |||||
| 3 | NAMES = ["храст", "shrub", "bush"] | 1 | NAMES = ["храст", "shrub", "bush"] | ||
| 4 | NI = "Ni!" | 2 | NI = "Ni!" | ||
| 5 | 3 | ||||
| 6 | 4 | ||||
| 7 | def function_that_says_ni(*args, **kwargs): | 5 | def function_that_says_ni(*args, **kwargs): | ||
| 8 | 6 | ||||
| n | 9 | lst = [] | n | 7 | lst_valid_bushes = [] |
| 10 | st = set() | 8 | st_unique_symbols_used = set() | ||
| 11 | price = 0 | 9 | price = 0 | ||
| 12 | 10 | ||||
| 13 | for arg in args: | 11 | for arg in args: | ||
| 14 | if "name" in arg and arg["name"].lower() in NAMES: | 12 | if "name" in arg and arg["name"].lower() in NAMES: | ||
| n | 15 | lst.append(arg) | n | 13 | lst_valid_bushes.append(arg) |
| 16 | 14 | ||||
| 17 | if "cost" in arg: | 15 | if "cost" in arg: | ||
| 18 | price += arg["cost"] | 16 | price += arg["cost"] | ||
| 19 | 17 | ||||
| 20 | for kwarg in kwargs: | 18 | for kwarg in kwargs: | ||
| 21 | if "name" in kwargs[kwarg] and kwargs[kwarg]["name"].lower() in NAMES: | 19 | if "name" in kwargs[kwarg] and kwargs[kwarg]["name"].lower() in NAMES: | ||
| n | 22 | lst.append(kwargs[kwarg]) | n | 20 | lst_valid_bushes.append(kwargs[kwarg]) |
| 23 | 21 | ||||
| 24 | if "cost" in kwargs[kwarg]: | 22 | if "cost" in kwargs[kwarg]: | ||
| 25 | price += kwargs[kwarg]["cost"] | 23 | price += kwargs[kwarg]["cost"] | ||
| 26 | 24 | ||||
| 27 | for char in kwarg: | 25 | for char in kwarg: | ||
| n | 28 | st.add(char) | n | 26 | st_unique_symbols_used.add(char) |
| 29 | 27 | ||||
| n | 30 | if len(lst) == 0: | n | 28 | if len(lst_valid_bushes) == 0: |
| 31 | return NI | 29 | return NI | ||
| 32 | 30 | ||||
| n | 33 | lenght = len(st) | n | 31 | lenght = len(st_unique_symbols_used) |
| 34 | floor = math.floor(price) | 32 | floor = int(price) | ||
| 35 | 33 | ||||
| 36 | if lenght != 0: | 34 | if lenght != 0: | ||
| 37 | rest = floor / lenght | 35 | rest = floor / lenght | ||
| t | 38 | if not (rest).is_integer(): | t | 36 | if not rest.is_integer(): |
| 39 | return NI | 37 | return NI | ||
| 40 | 38 | ||||
| 41 | if price > 42.00: | 39 | if price > 42.00: | ||
| 42 | return NI | 40 | return NI | ||
| 43 | 41 | ||||
| 44 | return f"{price:.2f}лв" | 42 | return f"{price:.2f}лв" |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
| f | 1 | import math | f | 1 | import math |
| 2 | 2 | ||||
| n | 3 | NAMES = ['храст', 'shrub', 'bush'] | n | 3 | NAMES = ["храст", "shrub", "bush"] |
| 4 | NI = 'Ni!' | 4 | NI = "Ni!" | ||
| 5 | |||||
| 5 | 6 | ||||
| 6 | def function_that_says_ni(*args, **kwargs): | 7 | def function_that_says_ni(*args, **kwargs): | ||
| 7 | 8 | ||||
| 8 | lst = [] | 9 | lst = [] | ||
| 9 | st = set() | 10 | st = set() | ||
| 10 | price = 0 | 11 | price = 0 | ||
| 11 | 12 | ||||
| 12 | for arg in args: | 13 | for arg in args: | ||
| n | 13 | if 'name' in arg and arg["name"].lower() in NAMES: | n | 14 | if "name" in arg and arg["name"].lower() in NAMES: |
| 14 | lst.append(arg) | 15 | lst.append(arg) | ||
| 15 | 16 | ||||
| n | 16 | if 'cost' in arg: | n | 17 | if "cost" in arg: |
| 17 | price += arg['cost'] | 18 | price += arg["cost"] | ||
| 18 | 19 | ||||
| 19 | for kwarg in kwargs: | 20 | for kwarg in kwargs: | ||
| n | 20 | if 'name' in kwargs[kwarg] and kwargs[kwarg]["name"].lower() in NAMES: | n | 21 | if "name" in kwargs[kwarg] and kwargs[kwarg]["name"].lower() in NAMES: |
| 21 | lst.append(kwargs[kwarg]) | 22 | lst.append(kwargs[kwarg]) | ||
| 22 | 23 | ||||
| t | 23 | if 'cost' in kwargs[kwarg]: | t | 24 | if "cost" in kwargs[kwarg]: |
| 24 | price += kwargs[kwarg]['cost'] | 25 | price += kwargs[kwarg]["cost"] | ||
| 25 | 26 | ||||
| 26 | for char in kwarg: | 27 | for char in kwarg: | ||
| 27 | st.add(char) | 28 | st.add(char) | ||
| 28 | 29 | ||||
| 29 | if len(lst) == 0: | 30 | if len(lst) == 0: | ||
| 30 | return NI | 31 | return NI | ||
| 31 | 32 | ||||
| 32 | lenght = len(st) | 33 | lenght = len(st) | ||
| 33 | floor = math.floor(price) | 34 | floor = math.floor(price) | ||
| 34 | 35 | ||||
| 35 | if lenght != 0: | 36 | if lenght != 0: | ||
| 36 | rest = floor / lenght | 37 | rest = floor / lenght | ||
| 37 | if not (rest).is_integer(): | 38 | if not (rest).is_integer(): | ||
| 38 | return NI | 39 | return NI | ||
| 39 | 40 | ||||
| 40 | if price > 42.00: | 41 | if price > 42.00: | ||
| 41 | return NI | 42 | return NI | ||
| 42 | 43 | ||||
| 43 | return f"{price:.2f}лв" | 44 | return f"{price:.2f}лв" |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
| t | 1 | import math | t | 1 | import math |
| 2 | 2 | ||||
| 3 | NAMES = ['храст', 'shrub', 'bush'] | 3 | NAMES = ['храст', 'shrub', 'bush'] | ||
| 4 | NI = 'Ni!' | 4 | NI = 'Ni!' | ||
| 5 | 5 | ||||
| 6 | def function_that_says_ni(*args, **kwargs): | 6 | def function_that_says_ni(*args, **kwargs): | ||
| 7 | 7 | ||||
| 8 | lst = [] | 8 | lst = [] | ||
| 9 | st = set() | 9 | st = set() | ||
| 10 | price = 0 | 10 | price = 0 | ||
| 11 | 11 | ||||
| 12 | for arg in args: | 12 | for arg in args: | ||
| 13 | if 'name' in arg and arg["name"].lower() in NAMES: | 13 | if 'name' in arg and arg["name"].lower() in NAMES: | ||
| 14 | lst.append(arg) | 14 | lst.append(arg) | ||
| 15 | 15 | ||||
| 16 | if 'cost' in arg: | 16 | if 'cost' in arg: | ||
| 17 | price += arg['cost'] | 17 | price += arg['cost'] | ||
| 18 | 18 | ||||
| 19 | for kwarg in kwargs: | 19 | for kwarg in kwargs: | ||
| 20 | if 'name' in kwargs[kwarg] and kwargs[kwarg]["name"].lower() in NAMES: | 20 | if 'name' in kwargs[kwarg] and kwargs[kwarg]["name"].lower() in NAMES: | ||
| 21 | lst.append(kwargs[kwarg]) | 21 | lst.append(kwargs[kwarg]) | ||
| 22 | 22 | ||||
| 23 | if 'cost' in kwargs[kwarg]: | 23 | if 'cost' in kwargs[kwarg]: | ||
| 24 | price += kwargs[kwarg]['cost'] | 24 | price += kwargs[kwarg]['cost'] | ||
| 25 | 25 | ||||
| 26 | for char in kwarg: | 26 | for char in kwarg: | ||
| 27 | st.add(char) | 27 | st.add(char) | ||
| 28 | 28 | ||||
| 29 | if len(lst) == 0: | 29 | if len(lst) == 0: | ||
| 30 | return NI | 30 | return NI | ||
| 31 | 31 | ||||
| 32 | lenght = len(st) | 32 | lenght = len(st) | ||
| 33 | floor = math.floor(price) | 33 | floor = math.floor(price) | ||
| 34 | 34 | ||||
| 35 | if lenght != 0: | 35 | if lenght != 0: | ||
| 36 | rest = floor / lenght | 36 | rest = floor / lenght | ||
| 37 | if not (rest).is_integer(): | 37 | if not (rest).is_integer(): | ||
| 38 | return NI | 38 | return NI | ||
| 39 | 39 | ||||
| 40 | if price > 42.00: | 40 | if price > 42.00: | ||
| 41 | return NI | 41 | return NI | ||
| 42 | 42 | ||||
| 43 | return f"{price:.2f}лв" | 43 | return f"{price:.2f}лв" |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||