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. Для соседних задач пригодятся эти разборы:
- Как преобразовать число в строку Python: str, f-строки и форматирование
- Как из списка сделать строку в Python: join, map и частые ошибки
- Как округлить число в Питоне до целого: round, int, floor и ceil
- Как округлить число до сотых в Python: round, форматирование и Decimal