python
January 15, 2023

Задача с переводом из Римских цифр в Арабские (XXI - > 21)

Задание:

Римские цифры представлены семью различными символами: I, V, X, L, C, D, M

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

Например, 2 записывается как II римскими цифрами, всего две единицы, сложенные вместе. 12 записывается как XII, то есть просто X + II. Число 27 записывается как XXVII, то есть XX + V + II.

Римские цифры обычно пишутся слева направо от большего к меньшему. Однако цифра «четыре» — не IIII. Вместо этого цифра четыре записывается как IV. Так как единица предшествует пятерке, мы вычитаем ее и получаем четыре. Тот же принцип применим к числу девять, которое записывается как IX. Есть шесть случаев, когда используется вычитание:

  • Iможно поставить перед V(5) и X(10), чтобы получилось 4 и 9.
  • Xможно поставить перед L(50) и C(100), чтобы получилось 40 и 90.
  • Cможно поставить перед D(500) и M(1000), чтобы получить 400 и 900.

Решение:

#Изначально мы создаем два словаря, в первом мы учитываем все варианты 
#"слияний" римских цифр, а во второй словарь добавляем классические римские 
#числа с их значениями

rom = {'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
rom_2 = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}

#Просим пользователя ввести римскую цифру
example = input("Введите римское число: ")
result = 0

#Запускаем цикл, который идет во всем ключам первого словаря
for key in rom:
    #Если видим, что ключ словаря есть в римском числе, которое ввел пользователь
    if key in example:
        #То удаляем этот ключ 
        example = example.replace(key,'')
        # К переменной result прибавляем число, которое соответсвует ключу
        result += rom[key]

#Второй цикл выполянет такую же функцию за исключением того, что мы считаем,
#сколько раз в числе есть "I" или "V" или "X" и прибавляем к result 
#соответсвующее значение * кол-во вхождений        
for key_2 in rom_2:
    if key_2 in example:
        count = example.count(key_2)
        example = example.replace(key_2, '')
        result += rom_2[key_2] * count
print(result)

Надеюсь, что данный алгоритм Вам пригодиться.

Примечание: решение задач может быть абсолютно разным, это мое видение в данный момент, их можно решать намного короче, но мой уровень пока что говорит мне делать это так

Подписывайся на канал, где я рассказываю про свой путь новичка в мире IT Python с 0 до Junior🐍