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)