Сообщить об ошибке.

Функция divmod() в Python, делит числа с остатком

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

Синтаксис:

divmod(divident, divisor)

Параметры:

  • divident - делимое, число, которое нужно разделить;
  • divisor - делитель, число, на которое необходимо делить.

Возвращаемое значение:

  • tuple - кортеж вида (частное, остаток)

Описание:

Функция divmod() возвращает кортеж, содержащий частное и остаток. Не поддерживает комплексные числа. Со смешанными типами операндов применяются правила для двоичных арифметических операторов.

Для целых результат аналогичен (a // b, a % b).

Для чисел с плавающей запятой результат аналогичен (q, a % b), где q обычно равен math.floor(a / b), однако может может быть и на единицу меньше. Так или иначе, q * b + a % b приближено к a, если a % b не нуль, то имеет тот же знак, что и b, и 0 <= abs(a % b) < abs(b).

Примеры деление чисел с остатком

Итак, когда divmod() может быть полезен? Буквально, когда необходимо разделить два числа и узнать, каков остаток от этого деления.

На практике divmod() часто встречается при преобразовании одной единицы измерения в более удобные единицы измерения. По крайней мере, это общий вариант использования.

Пример с единицами времени

50000 секунд - это МНОГО секунд. Для большинства людей эта цифра в секундах ничего не скажет и многие спросят, сколько это в часах и минутах! Итак, как преобразовать 50000 в соответствующее количество часов и минут?

Для этого можно использовать divmod(), чтобы разделить 50000 на 60, что преобразует 50000 секунд в минуты, а также сообщит, сколько секунд не удалось преобразовать в минуты:

>>> divmod(50000, 60)
# (833, 20)

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

>>> divmod(833, 60)
# (13, 53)

Если собрать все вместе, то это выглядит так:

>>> seconds = 50000
>>> minutes, seconds = divmod(seconds, 60)
>>> hours, minutes = divmod(minutes, 60)
>>> hours, minutes, seconds
# (13, 53, 20)

Допустим, в памяти есть огромный объект, занимающий 25895632957 бит. Сколько это памяти в более читаемых единицах? (Байт имеет 8 бит, килобайт — 1024 байта, мегабайт — 1024 килобайта и т. д.) Попробуйте сами преобразовать биты в более читаемые единицы компьютерной памяти.

Общие примеры использования

>>> divmod(15, 8)
# (1, 7)

>>> lst = [x for x in range(1, 10) if x%2]
>>> lst
# [1, 3, 5, 7, 9]
>>> for el in lst:
...     res = divmod(el, 2)
...     print(res)
... 
# (0, 1)
# (1, 1)
# (2, 1)
# (3, 1)
# (4, 1)