Домашни > Да върнем левчето обратно! > Решения > Решението на Николай Георгиев

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

5 точки общо

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

 1from collections import defaultdict
 2
 3def курс_в_лева(exchange_rates):
 4    
 5    exchange_rates_bg = {}
 6    for key, value in exchange_rates.items():
 7        if len(key) != 3:
 8            continue
 9        exchange_rates_bg[key] = round(1 / value, 4)
10
11    return exchange_rates_bg
12    
13def валута_към_левчета(*args, **kwargs):
14
15    sums = defaultdict(float)
16    for currency, amount in args:
17        sums[currency] += amount
18
19    result = []
20    for currency, amount in sums.items():
21        if currency == "BGN":
22            leva = amount
23        else:
24            rate = kwargs[currency]
25            leva = amount / rate
26        result.append((currency, round(leva, 4)))
27
28    return result
29
30def е_валиден_лев(num):
31    return abs(num - round(num, 2)) < 1e-9
32
33def е_патриотична(amounts, exchange_rates):
34    sums = defaultdict(float)
35    for currency, amount in amounts:
36        sums[currency] += amount
37
38    result = 0
39    for currency, amount in sums.items():
40        result += amount / exchange_rates[currency]
41
42    return "ПАТРИОТИЧНА!" if е_валиден_лев(result) else "НЕПАТРИОТИЧНА!"
43
44# exchange_rates = {"EUR": 1.9558, "USD": 1.6718, "DKK": 0.2616}
45# print(курс_в_лева(exchange_rates))
46# print(валута_към_левчета(
47#     ("EUR", 1.5),
48#     ("USD", 10),
49#     ("DKK", 10),
50#     ("EUR", 2.5),
51#     EUR=0.5,
52#     USD=0.8,
53#     DKK=7,
54# ))
55# exchange_rates = {"EUR": 0.5, "USD": 0.6, "DKK": 3.8}
56# amount = [("EUR", 1), ("USD", 3), ("DKK", 7.6), ("EUR", 3)]
57# print(е_патриотична(amount, exchange_rates)) # ПАТРИОТИЧНА! - 4 / 0.5 + 3 / 0.6 + 7.6 / 3.8 = 15
58
59# amount = [("EUR", 1), ("USD", 2), ("DKK", 7.6), ("EUR", 3)]
60# print(е_патриотична(amount, exchange_rates)) # НЕПАТРИОТИЧНА! - 4 / 0.5 + 2 / 0.6 + 7.6 / 3.8 = 13.33, опитват се да ни измамят

......FF..
======================================================================
FAIL: test_е_патриотична_стотинки (test.TestЕПатриотична.test_е_патриотична_стотинки)
The total should be evaluated with a precision of 2 digits after the decimal point.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 132, in test_е_патриотична_стотинки
self.assertEqual("ПАТРИОТИЧНА!", патриотична)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'ПАТРИОТИЧНА!' != 'НЕПАТРИОТИЧНА!'
- ПАТРИОТИЧНА!
+ НЕПАТРИОТИЧНА!
? ++

======================================================================
FAIL: test_е_патриотична_цели (test.TestЕПатриотична.test_е_патриотична_цели)
The total should be evaluated by means of whether the sum is a round number.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 124, in test_е_патриотична_цели
self.assertEqual("НЕПАТРИОТИЧНА!", непатриотична)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'НЕПАТРИОТИЧНА!' != 'ПАТРИОТИЧНА!'
- НЕПАТРИОТИЧНА!
? --
+ ПАТРИОТИЧНА!

----------------------------------------------------------------------
Ran 10 tests in 0.001s

FAILED (failures=2)

Дискусия
Николай Георгиев
11.03.2026 15:16

Трябва да направиш опция да ти лайквам коментарите хахаха
История
Това решение има само една версия.