Программа курса:
Разбор задачи: Преобразование римского числа в целое число
Предложенный нами код решения:
def roman_to_int(s):
# Создаем словарь для значений римских символов
roman_values = {
'I': 1, 'V': 5, 'X': 10, 'L': 50,
'C': 100, 'D': 500, 'M': 1000
}
total = 0
prev_value = 0
# Проходим по символам строки справа налево
for char in reversed(s):
current_value = roman_values[char]
# Если текущий символ меньше предыдущего, вычитаем его значение
if current_value < prev_value:
total -= current_value
else:
total += current_value
# Обновляем значение предыдущего символа
prev_value = current_value
return total
Создание словаря значений римских символов:
roman_values = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000 }
- В этом словаре каждый символ римской системы счисления сопоставляется с его численным значением.
- Это позволяет легко находить численное значение символа.
Инициализация переменных:
total = 0 prev_value = 0
total
используется для накопления результата.prev_value
хранит значение предыдущего символа для определения вычитания.
Цикл по символам строки:
for char in reversed(s):
- Цикл идет справа налево, поскольку в римских числах символы меньшего значения могут находиться перед большими для обозначения вычитания (например,
IV
, гдеI
вычитается изV
).
- Цикл идет справа налево, поскольку в римских числах символы меньшего значения могут находиться перед большими для обозначения вычитания (например,
Получение значения текущего символа:
current_value = roman_values[char]
Определение вычитания или сложения:
if current_value < prev_value: total -= current_value else: total += current_value
- Если текущий символ (
current_value
) меньше предыдущего (prev_value
), это означает, что значение символа нужно вычесть (например,IV
). - Иначе символ добавляется к результату.
- Если текущий символ (
Обновление значения предыдущего символа:
prev_value = current_value
- Для следующей итерации обновляется значение предыдущего символа, чтобы правильно обработать следующий символ строки.
Возврат результата:
return total
- После завершения цикла возвращается итоговая сумма.
Примеры работы функции
- Ввод: "III":
- Суммируются значения
1 + 1 + 1 = 3
. - Результат:
3
.
- Суммируются значения
- Ввод: "LVIII":
- Складываются значения
L (50) + V (5) + III (3) = 58
. - Результат:
58
.
- Складываются значения
- Ввод: "MCMXCIV":
- Разбор:
M = 1000
CM = 900
(вычитание:1000 - 100
)XC = 90
(вычитание:100 - 10
)IV = 4
(вычитание:5 - 1
)
- Сумма:
1000 + 900 + 90 + 4 = 1994
. - Результат:
1994
.
- Разбор:
- Ввод: "IX":
- Вычитание:
10 - 1 = 9
. - Результат:
9
.
- Вычитание:
- Ввод: "CDXLIV":
- Разбор:
CD = 400
(вычитание:500 - 100
)XL = 40
(вычитание:50 - 10
)IV = 4
(вычитание:5 - 1
)
- Сумма:
400 + 40 + 4 = 444
. - Результат:
444
.
- Разбор: