Домашни > Да върнем левчето обратно! > Решения > Решението на Стефан Краев

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

6 точки общо

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

 1def курс_в_лева(rates):
 2    result = {}
 3    for valuta, value in rates.items():
 4        if value == 0:
 5            continue
 6        new_value = round((1 / value), 4)
 7        result[valuta] = new_value
 8    return result
 9
10def курс_в_лева_без_преждевременно_закръгляне(rates):
11    result = {}
12    for valuta, value in rates.items():
13        if value == 0:
14            continue
15        new_value = 1 / value
16        result[valuta] = new_value
17    return result
18
19def валута_към_левчета(*args, **kwargs):
20    result = {}
21    dic = курс_в_лева_без_преждевременно_закръгляне(kwargs)
22    for valuta, value in args:
23        if valuta == "BGN":
24            value = round(value, 4)
25        else:
26            value = round(dic[valuta] * value, 4)
27        result[valuta] = result.get(valuta, 0) + value
28    return result
29
30def валута_към_левчета_без_преждевременно_закръгляне(*args, **kwargs):
31    result = {}
32    dic = курс_в_лева_без_преждевременно_закръгляне(kwargs)
33    for valuta, value in args:
34        if valuta == "BGN":
35            value = value
36        else:
37            value = dic[valuta] * value
38        result[valuta] = result.get(valuta, 0) + value
39    return result
40
41def е_патриотична(amounts, rates):
42    result = 0
43    all_sum = валута_към_левчета_без_преждевременно_закръгляне(*amounts, **rates)
44    for curr_sum in all_sum.values():
45        result += curr_sum
46    result = round(result, 2)
47    if result % 1 == 0:
48        return "ПАТРИОТИЧНА!"
49    else:
50        return "НЕПАТРИОТИЧНА!"
51
52
53#С цел да спестя писане исках да използвам вече написани функции. Проблемът е че всяка от тях изисква закръгляне
54#което води до загуба на информация и някои примери ([("USD", 12.5), ("DKK", 1.4286)!!!, ("EUR", 8)]) ми излизаха
55#грешни. Затова съм разписал два варианта на една и съща функция с и без закръгляне. Разбира се можех да сложа
56#флагове вместо да копирам 90% от съдържанието на вече съществуваща функция, но се опасявам че промяната на
57#сиганутара на функцията ще се отрази на автоматизираните тестове. Също така валути със стойност 0 са игнорирани
58#за да се избегне делене на 0.

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

OK

Дискусия
История
Това решение има само една версия.