Задача с переводом из Римских цифр в Арабские (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🐍