Python
Остаток от деления в Python
Остаток от деления в Python получают оператором %. Он показывает, что остается после деления одного числа на другое
Оператор % часто используют для проверки четности, циклических шаблонов, распределения по группам, работы со временем и задач на алгоритмы
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Базовый пример
number = 17
print(number % 5)
Вывод:
2
17 делится на 5 как 3 полные группы и остаток 2
Связь с целочисленным делением:
a = 17
b = 5
q = a // b
r = a % b
print(q)
print(r)
print(b * q + r)
Проверка четности
number = 18
if number % 2 == 0:
print('четное')
else:
print('нечетное')
Если остаток от деления на 2 равен нулю, число четное
Для списка чисел:
numbers = [1, 2, 3, 4, 5, 6]
for number in numbers:
if number % 2 == 0:
print(number)
Каждая третья строка
Остаток помогает делать повторяющиеся шаблоны
for index in range(1, 11):
if index % 3 == 0:
print(index, 'каждая третья')
else:
print(index, 'обычная')
Такой прием встречается в задачах с колонками, цветами строк, страницами и группами
Распределение по колонкам
items = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
for index, item in enumerate(items):
column = index % 3
print(item, 'колонка', column)
Вывод будет циклически повторять колонки 0, 1, 2
Если нужны колонки с номерами 1, 2, 3:
column = index % 3 + 1
Время и остаток
Остаток удобен для перевода секунд или минут
total_seconds = 3672
minutes = total_seconds // 60
seconds = total_seconds % 60
print(minutes, seconds)
Можно продолжить до часов:
total_seconds = 3672
hours = total_seconds // 3600
rest = total_seconds % 3600
minutes = rest // 60
seconds = rest % 60
print(f'{hours} ч {minutes} мин {seconds} сек')
divmod для частного и остатка
Если нужны оба значения, используйте divmod()
q, r = divmod(17, 5)
print(q)
print(r)
Это то же самое, что 17 // 5 и 17 % 5, но короче и выразительнее
Отрицательные числа
С отрицательными числами результат может удивить
print(-7 // 3)
print(-7 % 3)
Вывод:
-3
2
В Python остаток связан с округлением вниз у //. Поэтому отрицательные значения лучше проверять отдельно, особенно если вы переносите формулу из другого языка
Деление на ноль
print(10 % 0)
Такой код вызовет ZeroDivisionError
Перед операцией проверяйте делитель, если он приходит от пользователя или из внешних данных
divider = 0
if divider == 0:
print('делитель не может быть нулем')
else:
print(10 % divider)
Частые ошибки
- путать
%с процентом скидки - забывать, что деление на ноль невозможно
- не проверять отрицательные числа
- использовать
%, когда нужен обычный процент от суммы - забывать связь между
%и// - делать сложные циклические условия без промежуточного вывода
Что читать дальше
Базовая пара к остатку — Целочисленное деление в Python
Для отрицательных чисел посмотрите отдельный разбор Целочисленное деление в Python: отрицательные числа и остаток
% возвращает остаток от деления и часто используется вместе с //
Самые частые сценарии: четность, повторяющиеся шаблоны, разбиение на группы, время и алгоритмические задачи