Python
Целочисленное деление в Python
Целочисленное деление в Python записывается через //. Оно возвращает целую часть результата с округлением вниз. Рядом часто используют оператор %, который возвращает остаток от деления
Эта пара нужна в задачах про страницы, партии, время, индексы, группы и проверку делимости
Базовый пример
print(17 // 5)
print(17 % 5)
Вывод:
3
2
17 // 5 дает 3 полные группы по 5
17 % 5 дает остаток 2
Связь такая:
17 = 5 * 3 + 2
Обычное деление и целочисленное деление
print(17 / 5)
print(17 // 5)
Вывод:
3.4
3
/ возвращает обычный результат деления
// возвращает целый результат с округлением вниз
Если вам нужен точный дробный результат, используйте /. Если нужно количество полных групп, страниц или часов, чаще нужен //
Страницы и товары
Допустим, на странице показывается 10 товаров, всего товаров 53. Нужно понять, сколько полных страниц получится и сколько товаров останется
total_items = 53
per_page = 10
full_pages = total_items // per_page
rest = total_items % per_page
print(full_pages)
print(rest)
Вывод:
5
3
Если нужно количество страниц для показа всех товаров, включая неполную последнюю страницу:
total_items = 53
per_page = 10
pages = (total_items + per_page - 1) // per_page
print(pages)
Результат будет 6
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Время: минуты в часы и минуты
total_minutes = 135
hours = total_minutes // 60
minutes = total_minutes % 60
print(f'{hours} ч {minutes} мин')
Вывод:
2 ч 15 мин
Такой прием легко переносится на секунды, дни, недели и другие единицы
divmod вместо двух операций
Python умеет сразу возвращать частное и остаток через divmod()
hours, minutes = divmod(135, 60)
print(hours)
print(minutes)
Вывод:
2
15
divmod(a, b) возвращает то же, что пара a // b и a % b
Проверка делимости
Остаток помогает понять, делится ли число без остатка
number = 24
if number % 3 == 0:
print('делится на 3')
else:
print('не делится на 3')
Для четности:
number = 17
if number % 2 == 0:
print('четное')
else:
print('нечетное')
Отрицательные числа
Главная неожиданность: // округляет вниз, а не просто отбрасывает дробную часть
print(17 // 5)
print(-17 // 5)
Вывод:
3
-4
-17 / 5 равно -3.4, а округление вниз ведет к -4
Если нужно просто отбросить дробную часть к нулю, используйте int(a / b), но делайте это осознанно
print(int(-17 / 5))
Вывод:
-3
Деление на ноль
print(10 // 0)
Такой код вызовет ZeroDivisionError
В рабочем коде делитель нужно проверять:
total = 10
group_size = 0
if group_size == 0:
print('размер группы не может быть нулем')
else:
print(total // group_size)
Частые ошибки
- путать
/и// - забывать, что
//округляет вниз - не проверять отрицательные числа
- считать страницы через
total // per_pageи терять неполную последнюю страницу - забывать про деление на ноль
- не использовать
%, когда нужен остаток - писать две операции вместо
divmod(), когда нужны и частное, и остаток
Практика
Сделайте четыре упражнения
- Переведите 3672 секунды в часы, минуты и секунды
- Посчитайте количество страниц для 127 товаров по 20 товаров на странице
- Проверьте, является ли число 438 четным
- Сравните
-17 // 5иint(-17 / 5)
Что читать дальше
Для продолжения рядом подойдет материал Остаток от деления в Python
Если нужны нюансы с отрицательными числами, посмотрите Целочисленное деление в Python: отрицательные числа и остаток
// возвращает целочисленное частное, % возвращает остаток, а divmod() возвращает оба значения сразу
Для положительных чисел поведение обычно интуитивно. Для отрицательных важно помнить: // округляет вниз, поэтому результат может отличаться от простого отбрасывания дробной части