Divmod: примеры (PYTHON)
divmod(a: number, b: number): tupleОписание функции divmod
Функция divmod() в Python возвращает кортеж, состоящий из частного и остатка от деления двух аргументов. Она используется в ситуациях, когда требуется одновременно получить результат целочисленного деления (частное) и остаток от этого деления.
Синтаксис: divmod(a, b).
Аргументы:
- a (обязательный) – делимое (число). Может быть целым числом (int) или числом с плавающей точкой (float).
- b (обязательный) – делитель (число). Также может быть int или float.
Возвращаемое значение:
- Кортеж из двух элементов (q, r), где q = a // b (частное, результат целочисленного деления), а r = a % b (остаток от деления). Для целых чисел это следует математическому соотношению: a = b * q + r. Для чисел с плавающей точкой результат определяется как q = math.floor(a / b).
Короткие примеры использования
Работа с целыми числами:
divmod(20, 3)(6, 2)
Работа с числами с плавающей точкой:
divmod(7.5, 2.5)(3.0, 0.0)
Отрицательные числа:
divmod(-10, 3)(-4, 2)
Второй аргумент отрицательный:
divmod(10, -3)(-4, -2)
Похожие функции в Python
Прямыми альтернативами для получения отдельных компонентов являются операторы:
- // (целочисленное деление):
20 // 36
- % (остаток от деления):
20 % 32
divmod() предпочтительнее, когда нужны оба значения сразу, так как это предотвращает повторное вычисление одного и того же деления и повышает читаемость кода.
Аналоги функции в других языках
JavaScript: Отдельные операторы ~~(a/b) (или Math.floor()) и %.
let a = 20, b = 3;
console.log(Math.floor(a/b), a % b);6 2
PHP: Функции intdiv() и оператор %.
$q = intdiv(20, 3);
$r = 20 % 3;
echo "$q, $r";6, 2
Java: Для целых чисел операторы / и %, для получения частного как целого числа тип аргументов должен быть целым.
int q = 20 / 3;
int r = 20 % 3;
System.out.println(q + " " + r);6 2
Golang: Операторы / и % для целых чисел. Для одновременного получения есть возможность множественного присваивания.
q, r := 20/3, 20%3
fmt.Println(q, r)6 2
В отличие от Python, во многих языках нет встроенной функции, возвращающей кортеж, и требуется использовать два оператора.
Типичные ошибки
Деление на ноль:
divmod(10, 0)ZeroDivisionError: integer division or modulo by zero
Передача нечисловых аргументов:
divmod('10', 2)TypeError: unsupported operand type(s) for divmod(): 'str' and 'int'
Передача только одного аргумента:
divmod(10)TypeError: divmod expected 2 arguments, got 1
Изменения в последних версиях
В Python 3.x функция divmod() для комплексных чисел была удалена и вызывает TypeError. В Python 2 она поддерживалась. В остальном поведение функции стабильно на протяжении многих версий.
Расширенные примеры применения
Преобразование секунд в минуты и секунды:
seconds = 3678
minutes, remaining_seconds = divmod(seconds, 60)
print(f'{minutes} минут {remaining_seconds} секунд')61 минут 18 секунд
Преобразование общего количества сантиметров в метры и сантиметры:
total_cm = 325
meters, cm = divmod(total_cm, 100)
print(f'{meters} м {cm} см')3 м 25 см
Разбиение числа на разряды для вывода с разделителями (например, для денежных сумм):
def format_number(num):
result = []
while num > 0:
num, remainder = divmod(num, 1000)
result.append(str(remainder).zfill(3) if num > 0 else str(remainder))
return ' '.join(reversed(result))
print(format_number(1234567))1 234 567
Проверка делимости и получение неполного частного в одной операции для обработки пагинации:
total_items = 47
items_per_page = 10
full_pages, items_on_last_page = divmod(total_items, items_per_page)
num_pages = full_pages + (1 if items_on_last_page else 0)
print(f'Полных страниц: {full_pages}, элементов на последней: {items_on_last_page}, всего страниц: {num_pages}')Полных страниц: 4, элементов на последней: 7, всего страниц: 5
Обработка координат при работе с графикой или игровыми картами (перевод линейного индекса в строку и столбец):
def index_to_coords(index, width):
row, col = divmod(index, width)
return row, col
print(index_to_coords(17, 5))(3, 2)