Ура! Это финальная задачка!
В Древнем Риме использовалась особая система счисления. Чтобы попрактиковаться в сложении римских чисел, напишите функцию roman
,
которая принимает два натуральных числа a
и b
, а возвращает строку вида:
РИМСКОЕ_А + РИМСКОЕ_B = РИМСКАЯ_СУММА
Примечание
В решении не должно быть вызовов требуемых функций.
Пример
Ввод
result = roman(10, 9)
Вывод
result = 'X + IX = XIX'
Ввод
result = roman(1499, 2500)
Вывод
result = 'MCDXCIX + MMD = MMMCMXCIX'
Решение
По большому счету задача на правильное использование словарей и небольшой смекалки.
Хитрость в том, чтобы задать не только “круглые” числа – 1000, 500, 100, 50, 10, 5, 1, но и “минус-числа” – 900, 400, 90, 40, 9, 4. Важно не забыть задать словарь так, чтобы все ключи шли по убыванию, и тогда все становится просто:
1) Перебираем наш словарь
2) Пока и если число больше ключа, записываем значение в строку и уменьшаем число на значение ключа.
3) Повторяем до тех пор пока число не станет равно нулю.
Посмотреть код
Решение
def to_roman(n):
roman_values = [
(1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'),
(100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'),
(10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')
]
result = ''
for value, symbol in roman_values:
while n >= value:
result += symbol
n -= value
return result
def roman(a, b):
roman_a = to_roman(a)
roman_b = to_roman(b)
roman_sum = to_roman(a + b)
return f"{roman_a} + {roman_b} = {roman_sum}"