Преобразование римских и арабских цифр в Python

Преобразование римских и арабских чисел в Python

Рассмотрим на примерах, как преобразовывать римских числа в арабские и арабские числа в римские с помощью Python.

Основы римских цифр

Римские цифры используют комбинации букв латинского алфавита для представления значений. Основные символы и их значения:

  • I = 1
  • V = 5
  • X = 10
  • L = 50
  • C = 100
  • D = 500
  • M = 1000

Правила:

  • Если меньшая цифра стоит перед большей, она вычитается (IV = 4).
  • Если меньшая цифра стоит после большей, она прибавляется (VI = 6).

Перевод римских цифр в арабские

Создадим функцию roman_to_arabic(), преобразующую римское число в его арабский эквивалент.

def roman_to_arabic(roman):
    roman_numerals = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    result = 0
    prev_value = 0

    for i in range(len(roman) - 1, -1, -1):
        int_val = roman_numerals[roman[i]]
        if int_val < prev_value:
            result -= int_val
        else:
            result += int_val
        prev_value = int_val

    return result

print(roman_to_arabic('IV'))

# 4
  • Словарь римских цифр: Используем словарь roman_numerals для соответствия римских символов их арабским значениям.
  • Инициализация переменных: result для хранения результата и prev_value для предыдущего значения.
  • Обратный проход по строке: Обходим строку с конца, используя правило вычитания римских чисел.
  • Преобразование и вычисление: Вычитаем или прибавляем значение к result, основываясь на текущем и предыдущем значении.

Перевод арабских цифр в римские

Напишем функцию arabic_to_roman(), которая выполняет обратное преобразование.

def arabic_to_roman(number):
    roman_numerals = [
        (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, numeral in roman_numerals:
        while number >= value:
            result += numeral
            number -= value

    return result

print(arabic_to_roman(4))

# IV
  • Список пар значений: Список roman_numerals содержит пары (арабское значение, римский символ).
  • Цикл по списку: Итерируем по списку, начиная с наибольшего значения.
  • Построение результата: Вычитаем значение из числа и добавляем римский символ в результат, пока число больше или равно значению из пары.

Заключение

Мы рассмотрели, как можно перевести римские числа в арабские и наоборот с помощью Python. Эти методы могут быть полезны как для обработки исторических данных, так и для развития навыков программирования. Описанные алгоритмы можно адаптировать и модифицировать в соответствии с конкретными задачами.

Содержание: