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: отрицательные числа и остаток

% возвращает остаток от деления и часто используется вместе с //

Самые частые сценарии: четность, повторяющиеся шаблоны, разбиение на группы, время и алгоритмические задачи

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

Настройки cookie

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