Цифры числа в Python: деление на 10 и остаток
Автор: Казачкин Даниил Михайлович · Обновлено
Последнюю цифру положительного целого числа даёт остаток от деления на 10, а операция // 10 удаляет эту цифру. Повторяя два действия, можно разобрать число справа налево без преобразования в строку.
Трассировка разрядов
number = 4072
while number > 0:
digit = number % 10
print(digit)
number //= 10Вывод будет обратным исходной записи:
2
7
0
4После первой итерации number становится 407, затем 40, 4 и 0. Нулевая цифра внутри числа не теряется: при number = 40 остаток равен 0.
Особый случай самого нуля
Для исходного number = 0 условие while number > 0 сразу ложно, хотя запись числа содержит одну цифру. Этот случай нужно обработать отдельно, если задача считает количество цифр или выводит их. Отрицательные числа обычно переводят в положительные через abs, если знак не считается цифрой.
Типичная ошибка — использовать обычное деление /: после него появляется float, и цикл перестаёт работать с целыми разрядами. Другая ошибка — забыть менять number, получив бесконечный цикл. Если исходное значение понадобится позже, сохраните рабочую копию current = number.
Сумма цифр с проверкой
Прочитайте неотрицательное целое число и найдите сумму его цифр. Для 4072 ожидается 13, для 5 — 5, для 0 — 0. Сначала составьте таблицу current, digit, total для каждого шага. Затем добавьте подсчёт количества цифр и явно обработайте ноль. Сравните результат с вариантом через строку, но объясните, почему арифметический алгоритм не зависит от символов.
Исходное число и рабочая копия
Разберите число 12030, одновременно найдя сумму цифр, их количество и число нулей. Сохраните original, а деление выполняйте над current. После цикла выведите оба значения и убедитесь, что исходное не потеряно. Отдельно обработайте original == 0: количество цифр должно быть один, нулевых цифр — одна. Затем восстановите обратную запись из извлечённых цифр и объясните, почему порядок получился зеркальным. Упражнение связывает арифметические операции с управлением состоянием и заставляет явно определить поведение особого случая.
Практикум: цифры числа и потеря ведущих нулей
Для числа 50720 получите справа налево цифры через % 10 и // 10, считая их сумму и количество нулей. Заполните первые три итерации вручную. Отдельно обработайте число 0, потому что обычный цикл while number > 0 не выполнится ни разу. Затем прочитайте строку "007" и сравните задачу о записи с задачей о числовом значении: после int ведущие нули исчезнут. Выберите представление согласно условию, а отрицательный знак обработайте явно.
Контрольная точка
Почему алгоритм извлекает цифры в обратном порядке? Покажите частное и остаток на одном шаге и предложите способ восстановить исходный порядок, если он нужен для вывода.
Частые вопросы
Что лучше для цифр: число или строка?
Арифметический подход полезен для понимания разрядов и задач без ведущих нулей. Строка сохраняет точную запись и удобна для шаблонов. Ограничения задачи определяют модель, а не привычка автора.