Программа курса:
Разбор задачи: Преобразование римского числа в целое число
Предложенный нами код решения:
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 = 0totalиспользуется для накопления результата.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 = 1000CM = 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.
- Разбор:
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии