Rozdział 4 · Python lubi liczby

Dzielenie: /, //, % i divmod()

Trzy powiązane operatory dzielenia — i dlaczego dzielenie ujemnych liczb całkowitych nie działa tak, jak się wydaje na pierwszy rzut oka.

W dzieleniu w Python faktycznie są trzy powiązane, ale różne operatory — i mylenie ich jest jednym z najczęstszych błędów u początkujących.

17 cukierków dla 5 dzieci

Wyobraźmy sobie zadanie: mamy 17 cukierków i dzielimy je równo między 5 dzieci.

🍬🍬🍬🍬🍬🍬🍬🍬🍬🍬🍬🍬🍬🍬🍬🍬🍬
konfety.py
candies = 17
children = 5

print(candies / children)   # 3.4 — dokładne dzielenie ułamkowe
print(candies // children)  #3 – 3 cukierki dla każdego dziecka
print(candies % children)   #2 – 2 cukierki pozostawione nierozdanymi

Każde dziecko otrzymuje candies // children całe cukierki, i candies % children to, ile zostało „zostało”

divmod_demo.py
print(divmod(17, 5))  # (3, 2)

Trochę głębiej: Negatywny podział floor-

Z liczbami ujemnymi // zachowuje się inaczej niż „po prostu odrzuć część ułamkową” na bok, minus nieskończoność (floor):

otricatelnoe.py
print(-7 // 3)  #-3 zamiast -2
print(-7 % 3)   # 2
-4-3-2-10-7 // 3-7 / 3
-7 // 3 zaokrągla w dół, do -3 (w stronę minus nieskończoności), a nie do -2
Dlaczego to, a nie inaczej
// w Python definiuje się jako „floor division”
Praktyka: dzielenie, reszta i divmod()
interaktywny laptop bezpośrednio w przeglądarce – w tym negatywny floor-division
Otwórz praktykę →