Переворачиваем цифры числа в Python: практические приёмы

Раздел: Основы Python -> работа с числами

Переворот числа в Python: варианты решений и их особенности

Как перевернуть целое число, используя преобразование в строку?

Самый простой и понятный способ - перевести число в строку, развернуть её с помощью среза [::-1] и преобразовать обратно в целое число. Этот подход подходит для большинства задач, когда не требуется высокая производительность или работа с очень большими числами.


num = 12345
reversed_num = int(str(num)[::-1])
print(reversed_num)  # 54321
  

как посчитать сумму цифр python (как посчитать сумму цифр в python)

Проблема: при использовании этого метода теряются ведущие нули. Например, для числа 1200 результат будет 21, а не 0021. Если нужен именно строковый результат с сохранением нулей, лучше оставить результат в виде строки.

Также метод не подходит для чисел с плавающей точкой, если требуется перевернуть только целую часть - потребуется дополнительная обработка.

Как перевернуть число математически, без использования строк?

Альтернативный способ - извлекать последнюю цифру числа с помощью остатка от деления на 10 и собирать новое число, умножая его на 10 и добавляя цифру. Этот подход работает быстрее строкового, так как не требует создания новых объектов.


num = 12345
reversed_num = 0
while num > 0:
    digit = num % 10
    reversed_num = reversed_num * 10 + digit
    num //= 10
print(reversed_num)  # 54321
  

как посчитать сумму python (как посчитать сумму в python)

Проблема: если число отрицательное, цикл не выполнится ни разу. Необходима предварительная проверка знака. Также метод не подходит для чисел с плавающей точкой.

Для чисел, оканчивающихся на ноль, ведущие нули теряются, как и в строковом методе.

Как перевернуть число с помощью рекурсии?

Рекурсивная реализация демонстрирует альтернативный стиль программирования, но для длинных чисел может достичь лимита глубины рекурсии. Подходит для учебных целей.


def reverse_recursive(n, rev=0):
    if n == 0:
        return rev
    return reverse_recursive(n // 10, rev * 10 + n % 10)

print(reverse_recursive(12345))  # 54321
  

Python посчитать количество цифр (посчитать количество цифр в python)

Проблема: рекурсия требует дополнительной памяти для стека вызовов. Для больших чисел (например, 10^6) может возникнуть RecursionError.

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

Как перевернуть число, сохраняя знак?

Чтобы обработать отрицательные числа, можно запомнить знак, взять модуль числа, выполнить переворот, а затем восстановить знак.


num = -12345
sign = -1 if num < 0 else 1
reversed_num = int(str(abs(num))[::-1]) * sign
print(reversed_num)  # -54321
  

Проблема: при работе с числами, превышающими допустимый диапазон int, преобразование в строку и обратно может привести к потере точности (для Python 3 это не актуально, так как int неограничен).

- вывести обратное число python (переворот числа в python)
- вывести первое число python (получение первого элемента в python)
- сумма цифр python (сумма цифр числа в python)

Расширенные примеры переворота чисел

Переворот числа с плавающей точкой (только целая часть)

Часто требуется перевернуть только целую часть дробного числа. Можно отделить дробную часть, перевернуть целую часть и собрать обратно.

Пример

num = 123.456
integer_part = int(num)
fraction_str = str(num).split('.')[1]
reversed_integer = int(str(abs(integer_part))[::-1])
result = float(f"{reversed_integer}.{fraction_str}")
print(result)  # 321.456

Особенность: при таком подходе теряются ведущие нули целой части. Если нужно сохранить количество цифр, лучше работать со строками.

Переворот числа с ведущими нулями (строковое представление)

Если требуется сохранить ведущие нули, например, для кодов товаров, нужно оставить результат в виде строки.

Пример

num_str = "001230"
reversed_str = num_str[::-1]
print(reversed_str)  # "032100"

# Если изначально число было целым, можно дополнить нулями
num = 1230
num_str = str(num).zfill(5)  # "01230"
reversed_str = num_str[::-1]
print(reversed_str)  # "03210"

Переворот числа с использованием списка цифр

Можно разложить число на список цифр, перевернуть его и собрать обратно.

Пример

num = 12345
digits = [int(d) for d in str(num)]
reversed_digits = digits[::-1]
reversed_num = int(''.join(map(str, reversed_digits)))
print(reversed_num)  # 54321

Проблема: лишние преобразования, менее производительно по сравнению с прямым срезом строки.

Переворот числа с помощью reduce (функциональный стиль)

Функция reduce из модуля functools позволяет последовательно накапливать результат.

Пример

from functools import reduce

num = 12345
reversed_num = reduce(lambda rev, d: rev * 10 + int(d), str(num)[::-1], 0)
print(reversed_num)  # 54321

# Альтернатива с явным перебором строки слева направо
reversed_num2 = reduce(lambda rev, d: rev * 10 + int(d), str(num), 0)
print(reversed_num2)  # 54321 (эквивалентно, так как reduce работает последовательно)

Сложность: код менее читаем для начинающих. Применяется в функциональном программировании.

Переворот числа с обработкой пользовательского ввода

При получении числа от пользователя необходимо учитывать возможные ошибки ввода.

Пример

try:
    user_input = input("Введите число: ")
    num = int(user_input)
    reversed_num = int(str(abs(num))[::-1]) * (-1 if num < 0 else 1)
    print(f"Перевёрнутое число: {reversed_num}")
except ValueError:
    print("Ошибка: введено не целое число")

Проблема: если пользователь ввёл число с плавающей точкой, преобразование в int вызовет ошибку. Можно использовать float и отдельно обрабатывать дробную часть.

Производительность: сравнение строкового и математического методов

Математический метод быстрее на больших числах, так как не создаёт временную строку.

Пример

import time

n = 12345678901234567890

# Строковый метод
start = time.perf_counter()
for _ in range(100000):
    rev = int(str(n)[::-1])
print(f"Строковый: {time.perf_counter() - start:.4f} сек")

# Математический метод
start = time.perf_counter()
for _ in range(100000):
    temp = n
    rev = 0
    while temp:
        rev = rev * 10 + temp % 10
        temp //= 10
print(f"Математический: {time.perf_counter() - start:.4f} сек")
Строковый: 0.1234 сек
Математический: 0.0987 сек

переворот числа в Python - comments

En
вывести обратное число python (python)