1def курс_в_лева(exchange_rates):
2 exchange_leva = {}
3
4 for currency, rate in exchange_rates.items():
5 exchange_leva[currency] = round(1 / rate, 4)
6
7 return exchange_leva
8
9
10def валута_към_левчета(*args, **kwargs):
11 currencies = {}
12
13 for currency, amount in args:
14 if currency in currencies:
15 currencies[currency] += amount
16 else:
17 currencies[currency] = amount
18
19 for curr, exchange in kwargs.items():
20 if curr in currencies and curr != "BGN":
21 currencies[curr] = round(currencies[curr] / exchange, 4)
22
23 return currencies
24
25
26def е_патриотична(amount, exchange_rates):
27 amounts_dict = валута_към_левчета(*amount, **exchange_rates)
28
29 total_sum = 0
30 for curr, lev_amount in amounts_dict.items():
31 total_sum += lev_amount
32
33 if total_sum == int(total_sum):
34 return "ПАТРИОТИЧНА!"
35
36 return "НЕПАТРИОТИЧНА!"
37
38# exchange_rates = {"EUR": 1.9558, "USD": 1.6718, "DKK": 0.2616}
39# print(курс_в_лева(exchange_rates))
40
41# print(валута_към_левчета(
42# ("EUR", 1.5),
43# ("USD", 10),
44# ("DKK", 10),
45# ("EUR", 2.5),
46# EUR=0.5,
47# USD=0.8,
48# DKK=7,
49# ))
50
51# exchange_rates = {"EUR": 0.5, "USD": 0.6, "DKK": 3.8}
52# amount = [("EUR", 1), ("USD", 3), ("DKK", 7.6), ("EUR", 3)]
53# print(е_патриотична(amount, exchange_rates)) # ПАТРИОТИЧНА! - 4 / 0.5 + 3 / 0.6 + 7.6 / 3.8 = 15
54
55# amount = [("EUR", 1), ("USD", 2), ("DKK", 7.6), ("EUR", 3)]
56# print(е_патриотична(amount, exchange_rates)) # НЕПАТРИОТИЧНА! - 4 / 0.5 + 2 / 0.6 + 7.6 / 3.8 = 13.33, опитват се да ни измамят
......F...
======================================================================
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: 'ПАТРИОТИЧНА!' != 'НЕПАТРИОТИЧНА!'
- ПАТРИОТИЧНА!
+ НЕПАТРИОТИЧНА!
? ++
----------------------------------------------------------------------
Ran 10 tests in 0.001s
FAILED (failures=1)
Виктор Бечев
11.03.2026 18:16Имаш леки пропуски на идиоматичен код, но нищо, което да бие на очи. Всичките са масови и ще ги споменем на лекцията след час.
|
| f | 1 | def курс_в_лева(exchange_rates): | f | 1 | def курс_в_лева(exchange_rates): |
| 2 | exchange_leva = {} | 2 | exchange_leva = {} | ||
| 3 | 3 | ||||
| n | 4 | for currency, rate in exchange_rates: | n | 4 | for currency, rate in exchange_rates.items(): |
| 5 | exchange_leva[currency] = round(1 / rate, 4) | 5 | exchange_leva[currency] = round(1 / rate, 4) | ||
| 6 | 6 | ||||
| 7 | return exchange_leva | 7 | return exchange_leva | ||
| 8 | 8 | ||||
| 9 | 9 | ||||
| 10 | def валута_към_левчета(*args, **kwargs): | 10 | def валута_към_левчета(*args, **kwargs): | ||
| 11 | currencies = {} | 11 | currencies = {} | ||
| 12 | 12 | ||||
| 13 | for currency, amount in args: | 13 | for currency, amount in args: | ||
| 14 | if currency in currencies: | 14 | if currency in currencies: | ||
| 15 | currencies[currency] += amount | 15 | currencies[currency] += amount | ||
| 16 | else: | 16 | else: | ||
| 17 | currencies[currency] = amount | 17 | currencies[currency] = amount | ||
| 18 | 18 | ||||
| 19 | for curr, exchange in kwargs.items(): | 19 | for curr, exchange in kwargs.items(): | ||
| 20 | if curr in currencies and curr != "BGN": | 20 | if curr in currencies and curr != "BGN": | ||
| 21 | currencies[curr] = round(currencies[curr] / exchange, 4) | 21 | currencies[curr] = round(currencies[curr] / exchange, 4) | ||
| 22 | 22 | ||||
| 23 | return currencies | 23 | return currencies | ||
| 24 | 24 | ||||
| 25 | 25 | ||||
| 26 | def е_патриотична(amount, exchange_rates): | 26 | def е_патриотична(amount, exchange_rates): | ||
| 27 | amounts_dict = валута_към_левчета(*amount, **exchange_rates) | 27 | amounts_dict = валута_към_левчета(*amount, **exchange_rates) | ||
| 28 | 28 | ||||
| 29 | total_sum = 0 | 29 | total_sum = 0 | ||
| 30 | for curr, lev_amount in amounts_dict.items(): | 30 | for curr, lev_amount in amounts_dict.items(): | ||
| 31 | total_sum += lev_amount | 31 | total_sum += lev_amount | ||
| 32 | 32 | ||||
| 33 | if total_sum == int(total_sum): | 33 | if total_sum == int(total_sum): | ||
| 34 | return "ПАТРИОТИЧНА!" | 34 | return "ПАТРИОТИЧНА!" | ||
| 35 | 35 | ||||
| 36 | return "НЕПАТРИОТИЧНА!" | 36 | return "НЕПАТРИОТИЧНА!" | ||
| 37 | 37 | ||||
| t | t | 38 | # exchange_rates = {"EUR": 1.9558, "USD": 1.6718, "DKK": 0.2616} | ||
| 39 | # print(курс_в_лева(exchange_rates)) | ||||
| 40 | |||||
| 38 | # print(валута_към_левчета( | 41 | # print(валута_към_левчета( | ||
| 39 | # ("EUR", 1.5), | 42 | # ("EUR", 1.5), | ||
| 40 | # ("USD", 10), | 43 | # ("USD", 10), | ||
| 41 | # ("DKK", 10), | 44 | # ("DKK", 10), | ||
| 42 | # ("EUR", 2.5), | 45 | # ("EUR", 2.5), | ||
| 43 | # EUR=0.5, | 46 | # EUR=0.5, | ||
| 44 | # USD=0.8, | 47 | # USD=0.8, | ||
| 45 | # DKK=7, | 48 | # DKK=7, | ||
| 46 | # )) | 49 | # )) | ||
| 47 | 50 | ||||
| 48 | # exchange_rates = {"EUR": 0.5, "USD": 0.6, "DKK": 3.8} | 51 | # exchange_rates = {"EUR": 0.5, "USD": 0.6, "DKK": 3.8} | ||
| 49 | # amount = [("EUR", 1), ("USD", 3), ("DKK", 7.6), ("EUR", 3)] | 52 | # amount = [("EUR", 1), ("USD", 3), ("DKK", 7.6), ("EUR", 3)] | ||
| 50 | # print(е_патриотична(amount, exchange_rates)) # ПАТРИОТИЧНА! - 4 / 0.5 + 3 / 0.6 + 7.6 / 3.8 = 15 | 53 | # print(е_патриотична(amount, exchange_rates)) # ПАТРИОТИЧНА! - 4 / 0.5 + 3 / 0.6 + 7.6 / 3.8 = 15 | ||
| 51 | 54 | ||||
| 52 | # amount = [("EUR", 1), ("USD", 2), ("DKK", 7.6), ("EUR", 3)] | 55 | # amount = [("EUR", 1), ("USD", 2), ("DKK", 7.6), ("EUR", 3)] | ||
| 53 | # print(е_патриотична(amount, exchange_rates)) # НЕПАТРИОТИЧНА! - 4 / 0.5 + 2 / 0.6 + 7.6 / 3.8 = 13.33, опитват се да ни измамят | 56 | # print(е_патриотична(amount, exchange_rates)) # НЕПАТРИОТИЧНА! - 4 / 0.5 + 2 / 0.6 + 7.6 / 3.8 = 13.33, опитват се да ни измамят |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
| n | n | 1 | def курс_в_лева(exchange_rates): | ||
| 2 | exchange_leva = {} | ||||
| 3 | |||||
| 4 | for currency, rate in exchange_rates: | ||||
| 5 | exchange_leva[currency] = round(1 / rate, 4) | ||||
| 6 | |||||
| 7 | return exchange_leva | ||||
| 8 | |||||
| 9 | |||||
| 1 | def валута_към_левчета(*args, **kwargs): | 10 | def валута_към_левчета(*args, **kwargs): | ||
| 2 | currencies = {} | 11 | currencies = {} | ||
| 3 | 12 | ||||
| 4 | for currency, amount in args: | 13 | for currency, amount in args: | ||
| 5 | if currency in currencies: | 14 | if currency in currencies: | ||
| 6 | currencies[currency] += amount | 15 | currencies[currency] += amount | ||
| 7 | else: | 16 | else: | ||
| 8 | currencies[currency] = amount | 17 | currencies[currency] = amount | ||
| 9 | 18 | ||||
| 10 | for curr, exchange in kwargs.items(): | 19 | for curr, exchange in kwargs.items(): | ||
| 11 | if curr in currencies and curr != "BGN": | 20 | if curr in currencies and curr != "BGN": | ||
| 12 | currencies[curr] = round(currencies[curr] / exchange, 4) | 21 | currencies[curr] = round(currencies[curr] / exchange, 4) | ||
| 13 | 22 | ||||
| 14 | return currencies | 23 | return currencies | ||
| t | t | 24 | |||
| 15 | 25 | ||||
| 16 | def е_патриотична(amount, exchange_rates): | 26 | def е_патриотична(amount, exchange_rates): | ||
| 17 | amounts_dict = валута_към_левчета(*amount, **exchange_rates) | 27 | amounts_dict = валута_към_левчета(*amount, **exchange_rates) | ||
| 18 | 28 | ||||
| 19 | total_sum = 0 | 29 | total_sum = 0 | ||
| 20 | for curr, lev_amount in amounts_dict.items(): | 30 | for curr, lev_amount in amounts_dict.items(): | ||
| 21 | total_sum += lev_amount | 31 | total_sum += lev_amount | ||
| 22 | 32 | ||||
| 23 | if total_sum == int(total_sum): | 33 | if total_sum == int(total_sum): | ||
| 24 | return "ПАТРИОТИЧНА!" | 34 | return "ПАТРИОТИЧНА!" | ||
| 25 | 35 | ||||
| 26 | return "НЕПАТРИОТИЧНА!" | 36 | return "НЕПАТРИОТИЧНА!" | ||
| 27 | 37 | ||||
| 28 | # print(валута_към_левчета( | 38 | # print(валута_към_левчета( | ||
| 29 | # ("EUR", 1.5), | 39 | # ("EUR", 1.5), | ||
| 30 | # ("USD", 10), | 40 | # ("USD", 10), | ||
| 31 | # ("DKK", 10), | 41 | # ("DKK", 10), | ||
| 32 | # ("EUR", 2.5), | 42 | # ("EUR", 2.5), | ||
| 33 | # EUR=0.5, | 43 | # EUR=0.5, | ||
| 34 | # USD=0.8, | 44 | # USD=0.8, | ||
| 35 | # DKK=7, | 45 | # DKK=7, | ||
| 36 | # )) | 46 | # )) | ||
| 37 | 47 | ||||
| 38 | # exchange_rates = {"EUR": 0.5, "USD": 0.6, "DKK": 3.8} | 48 | # exchange_rates = {"EUR": 0.5, "USD": 0.6, "DKK": 3.8} | ||
| 39 | # amount = [("EUR", 1), ("USD", 3), ("DKK", 7.6), ("EUR", 3)] | 49 | # amount = [("EUR", 1), ("USD", 3), ("DKK", 7.6), ("EUR", 3)] | ||
| 40 | # print(е_патриотична(amount, exchange_rates)) # ПАТРИОТИЧНА! - 4 / 0.5 + 3 / 0.6 + 7.6 / 3.8 = 15 | 50 | # print(е_патриотична(amount, exchange_rates)) # ПАТРИОТИЧНА! - 4 / 0.5 + 3 / 0.6 + 7.6 / 3.8 = 15 | ||
| 41 | 51 | ||||
| 42 | # amount = [("EUR", 1), ("USD", 2), ("DKK", 7.6), ("EUR", 3)] | 52 | # amount = [("EUR", 1), ("USD", 2), ("DKK", 7.6), ("EUR", 3)] | ||
| 43 | # print(е_патриотична(amount, exchange_rates)) # НЕПАТРИОТИЧНА! - 4 / 0.5 + 2 / 0.6 + 7.6 / 3.8 = 13.33, опитват се да ни измамят | 53 | # print(е_патриотична(amount, exchange_rates)) # НЕПАТРИОТИЧНА! - 4 / 0.5 + 2 / 0.6 + 7.6 / 3.8 = 13.33, опитват се да ни измамят |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||