Python

Как перевернуть число в Python: через строку и через математику

Самый простой способ перевернуть число в Python — превратить число в строку, развернуть строку срезом [::-1], а затем при необходимости снова преобразовать результат в int

number = 12345
reversed_number = int(str(number)[::-1])

print(reversed_number)

Результат

54321

Для большинства учебных задач этот способ самый короткий и понятный

Как работает str(number)[::-1]

Разберем по частям

number = 12345
text = str(number)
reversed_text = text[::-1]
result = int(reversed_text)

print(result)
  • str(number) превращает число в строку "12345"
  • [::-1] разворачивает строку в обратном порядке
  • int(...) превращает строку "54321" обратно в число

Срез [::-1] часто используют для разворота строк и списков

Что будет с нулями в конце

number = 1200
reversed_number = int(str(number)[::-1])

print(reversed_number)

Результат

21

Почему не 0021? Потому что после преобразования в int ведущие нули исчезают. Для числа это нормально: 0021 и 21 — одно и то же числовое значение

Если вам нужно сохранить нули, оставьте результат строкой

number = 1200
reversed_text = str(number)[::-1]

print(reversed_text)

Результат

0021

Как обработать отрицательное число

Для отрицательных чисел простой срез даст неправильную строку

number = -123
print(str(number)[::-1])

Результат будет

321-

Такую строку нельзя нормально превратить в число. Нужно отдельно обработать знак

number = -123
sign = -1 if number < 0 else 1
absolute = abs(number)
reversed_number = int(str(absolute)[::-1]) * sign

print(reversed_number)

Результат

-321

abs(number) берет число без знака, а потом мы возвращаем знак обратно

Функция для переворота числа

def reverse_number(number):
    sign = -1 if number < 0 else 1
    absolute = abs(number)
    return int(str(absolute)[::-1]) * sign

print(reverse_number(12345))
print(reverse_number(-987))
print(reverse_number(1200))

Функция удобна, если нужно использовать решение несколько раз или проверить его на разных числах

Математический способ без строк

В алгоритмических задачах иногда просят не использовать строки. Тогда число можно перевернуть через остаток от деления на 10

number = 12345
result = 0

while number > 0:
    digit = number % 10
    result = result * 10 + digit
    number = number // 10

print(result)

Результат

54321

Как это работает

  • number % 10 берет последнюю цифру
  • result * 10 + digit добавляет цифру справа
  • number // 10 убирает последнюю цифру из исходного числа

Математический способ с отрицательными числами

def reverse_number_math(number):
    sign = -1 if number < 0 else 1
    number = abs(number)
    result = 0

    while number > 0:
        digit = number % 10
        result = result * 10 + digit
        number = number // 10

    return result * sign

print(reverse_number_math(-12345))

Для числа 0 функция вернет 0, но можно добавить явную проверку, если хочется сделать код очевиднее

Какой способ выбрать

Ситуация Способ
Нужно быстро решить обычную задачу int(str(number)[::-1])
Нужно сохранить ведущие нули оставить результат строкой
Нужно обработать отрицательные числа отдельно сохранить знак
Требуется алгоритм без строк цикл с % 10 и // 10

Для новичка лучше начать со строкового способа, а математический разобрать как упражнение на циклы

Мини-практика

Напишите функцию reverse_number() и проверьте ее на числах

numbers = [123, 1200, -456, 0]

for number in numbers:
    print(number, "->", reverse_number(number))

После этого сделайте вторую функцию без строк и сравните результаты

Частые ошибки

Не учитывать отрицательные числа

str(-123)[::-1] даст 321-, а это не число

Терять нули и думать, что Python ошибся

Если результат преобразован в int, ведущие нули исчезают. Для сохранения нулей нужен строковый результат

Путать / и //

В математическом способе нужно целочисленное деление //, а не обычное /

Не обновлять number в цикле

Если забыть number = number // 10, цикл станет бесконечным

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x