Целочисленное деление (//) в Python 3

Поясните, пожалуйста, как работает целочисленное деление в Python 3. Мне не понятен один конкретный пример:

print(4//3)
print(-4//3)

По моей логике, результатами обоих выражений должно быть число (±) 1. Но если в первом примере мои предположения оправдываются, то во втором - нет. Откуда я взял, что результат именно (±) 1? Потому, что ответами без округления будут: 1,3333333... -1,333333... соответственно.


Ответы (3 шт):

Автор решения: cauf

Целочисленное деление отбрасывает дробную часть, приводя ближайшее МЕНЬШЕЕ целое число. Если в случае 4//3, результатом деления будет 1,3333, ближайшее меньшее целое будет 1, то при -4//3 с результатом -1,3333 таким числом будет -2, так как -1 > -1,3333 > -2

→ Ссылка
Автор решения: CrazyElf

Дополню ответ @cauf наглядной иллюстрацией, чуть расширив ваш код:

print(4//3, '<=', 4/3)
print(-4//3, '<=', -4/3) 

1 <= 1.3333333333333333
-2 <= -1.3333333333333333
→ Ссылка
Автор решения: Nezerix

Целочисленное деление окргляет не в сторону 0, а в меньшую сторону. То есть для отрицательных значений модуль числа увеличивается, а для положительных - уменьшается. Если Вам нужно округление обычное, то используйте round(4/3)

round(4/3)=1
round(-4/3)=-1

У round() есть второй параметр - до скольки знаков округление:

round(4/3,1)=1.3
round(-4/3,5)=1.33333

Надеюсь я ответил на Ваш вопрос.

→ Ссылка