Rozdział 5 · Pobawmy się liczbami!

Ujemne dzielenie całkowite przez floor

Najczęstsza niespodzianka w tym temacie — co robi // z liczbami ujemnymi. Analizujemy na osi liczbowej.

Co się stanie, jeśli podzielisz się resztą negatywne liczba? Tutaj Python zachowuje się inaczej, niż wielu oczekuje ze szkoły — i ważne jest, aby to zrozumieć teraz, a nie w momencie debugowania.

Zaokrąglenie jest zawsze w dół — czyli do minus nieskończoności

// w Python nazywa się floor division — „dzielenie z zaokrąglanie na podłogę” mniejszego , a dla liczb ujemnych "mniej" oznacza "bardziej ujemne":

-6-5-4-3-2-101-4
-7 // 2 = -4 — zaokrąglenie na podłogę oznacza przesunięcie się w LEWO wzdłuż osi liczby, do −∞
otricatelnoe_floor.py
print(-7 // 2)    #-4, nie -3! Python zaokrągleń do minus nieskończoności
print(7 // 2)     #3 – Dla liczb dodatnich nie ma różnicy przy zaokrągleniu „do zera”
print(-7 / 2)     # -3.5 – Dzielenie normalne uczciwie pokazuje część ułamkową
Nie „zaokrąglanie do zera”
W odniesieniu do innych języków programowania -7 // 2 dałoby -3 (zaokrąglone do zera). W Python wynik to -4: To świadomy wybór języka, aby poniższy wzór działał zawsze, bez wyjątków dla liczb ujemnych.

Reszta na dzieleniu negatywnym

Reszta wpisu Python zawsze pokrywa się z tym znakiem dzielnik:

otricatelnyj_ostatok.py
print(-7 % 2)     #1 – Reszta jest dodatnia, ponieważ dzielnik (2) jest dodatni
print(7 % -2)     #-1 – Reszta jest ujemna, ponieważ dzielnik (-2) jest ujemny

Tożsamość, która zawsze działa

Bez względu na to, jak zmieniają się znaki, dla dowolnych a oraz b (z wyjątkiem dzielenia przez 0) jest prawdziwe:

a == (a // b) * b + a % b
-7 == (-7 // 2) * 2 + (-7 % 2)
-7 == (-4) * 2 + 1
-7 == -8 + 1
-7 == -7 ✓
Tożsamość dzielenia z resztą jest testowana w przykładzie -7 i 2
tozhdestvo.py
a, b = -7, 2
print((a // b) * b + a % b == a)   #True – Tożsamość zawsze działa
Praktyka: Ujemna część floor-a.
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →