divmod

Функция divmod() возвращает одновременно результат целочисленного деления и остаток от деления в виде кортежа.

Синтаксис

divmod(a, b)

Аргументы

  • a:
    • Что означает: Делимое.
    • Возможные значения: Любое число (целое или вещественное).
  • b:
    • Что означает: Делитель.
    • Возможные значения: Любое число (целое или вещественное), кроме нуля.

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

Возвращает кортеж из двух элементов:

  1. Целая часть результата деления (a // b).
  2. Остаток от деления (a % b).

Если аргументы — целые числа, возвращаются целые значения. Если хотя бы один из аргументов вещественный, оба значения в результате также будут вещественными.

Примеры использования

print(divmod(10, 3))  # Вывод: (3, 1)
print(divmod(10, 2))  # Вывод: (5, 0)
print(divmod(7.5, 2.5))  # Вывод: (3.0, 0.0)
# Пример для отрицательных чисел
print(divmod(-10, 3))  # Вывод: (-4, 2)

Эквивалентный код

def pyplanet_divmod(a, b):
    if b == 0:
        raise ZeroDivisionError("Деление на ноль невозможно")
    return (a // b, a % b)

Частые ошибки

  1. Деление на ноль:

    print(divmod(10, 0))  # Ошибка: ZeroDivisionError
    

    Как исправить: Убедитесь, что делитель не равен нулю.

  2. Передача некорректных типов данных:

    print(divmod("10", 3))  # Ошибка: TypeError
    

    Как исправить: Преобразуйте строку в число с помощью функций int или float.

Часто задаваемые вопросы

  1. Работает ли divmod() с вещественными числами? Да, функция поддерживает вещественные числа. Например:

    print(divmod(7.5, 2.5))  # Вывод: (3.0, 0.0)
    

    Однако, стоит помнить о приближенном представлении вещественных чисел в ПК, что может давать на первый взгляд странные результаты:

    print(divmod(2.5, 0.1))  # Вывод: (24.0, 0.09999999999999987)
    
  2. Как divmod(a, b) работает с отрицательными числами? Поведение аналогично оператору // и % для отрицательных чисел.

    А правила таковы:

    1. (a // b) * b + (a % b) == a, и
    2. a % b имеет тот же знак, что и b

    Например:

    print(divmod(-10, 3))  # Вывод: (-4, 2)
    
  3. Можно ли использовать divmod() с комплексными числами? Нет, будет вызвано исключение TypeError.

  4. Какая разница между divmod() и отдельным использованием // и %? Функция divmod() более удобна, если нужны оба результата (целое деление и остаток) одновременно.