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":
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 ✓
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