Глиф Учебники

Деление в Python: /, // и %

Справочник · Python · 1 минута чтения

Python
print(17 / 5)
print(17 // 5)
print(17 % 5)
print(divmod(17, 5))
Вывод
3.4
3
2
(3, 2)
ЗнакЧто даётДля 17 и 5
/обычное деление, результат всегда дробный3.4
//целая часть от деления (округление вниз)3
%остаток от деления2
divmod(a, b)целую часть и остаток сразу(3, 2)

Проверка: 17 = 5 × 3 + 2.

/ всегда даёт дробное число

Python
print(10 / 2)
print(10 // 2)
print(int(10 / 2))
Вывод
5.0
5
5

Даже когда делится нацело, / возвращает float. Если нужно целое — пишите //. Для очень больших чисел / вдобавок теряет точность, а // считает точно.

Отрицательные числа

// округляет вниз — к меньшему числу, а не к нулю. Остаток % при этом имеет тот же знак, что и делитель:

Python
print(-17 // 5)
print(-17 % 5)
print(int(-17 / 5))
print(17 // -5, 17 % -5)
Вывод
-4
3
-3
-4 -3

−17 / 5 = −3.4, вниз — это −4. Остаток: −17 = 5 × (−4) + 3. Зато int(-17 / 5) отбрасывает дробную часть и даёт −3.

Сравнение с Pascal

В Pascal div и mod отбрасывают дробную часть — округляют к нулю. Для положительных чисел результаты одинаковы, для отрицательных — нет:

ВыражениеPascalPython
17 и 5: частное, остаток17 div 5 = 3, 17 mod 5 = 217 // 5 = 3, 17 % 5 = 2
−17 и 5: частное, остаток-17 div 5 = −3, -17 mod 5 = −2-17 // 5 = −4, -17 % 5 = 3

Если решение задачи переносится с Pascal и там бывают отрицательные числа, это место нужно проверить. Зато в Python n % 2 для любого целого n даёт 0 или 1, и проверка нечётности n % 2 == 1 работает и для отрицательных чисел.

Частые применения

Python
n = 2047
print(n % 2 == 0)
print(n % 10)
print(n // 10)
seconds = 3725
print(seconds // 3600, seconds % 3600 // 60, seconds % 60)
Вывод
False
7
204
1 2 5

Дробные числа

// и % работают и с дробными, результат тоже дробный: 7.5 // 2 даёт 3.0, 7.5 % 2 — 1.5.

Деление на ноль

Делить на ноль нельзя ни одним из способов — программа остановится:

Текст
ZeroDivisionError: division by zero

Если делитель может оказаться нулём (например, количество элементов пустого списка), проверьте его заранее через if или перехватите ошибку через try и except — см. урок Файлы и исключения.