2015-12-11 11 views
15

Sono nuovo di Python e sto imparando gli operatori in questo momento. compresi che:Divisione di interi in Python 3 - risultato strano con numero negativo

  • L'operatore / viene utilizzato per floating point division e
  • // per integer division.

Esempio:

7//3 = 2 

E 7//-3=-3. Perché la risposta è -3?

Sono bloccato qui.

+1

Vedere anche [Perché i piani di divisione interi di Python] (http://python-history.blogspot.com.by/2010/08/why-pythons-integer-division-floors.html) –

risposta

26

// non è intero divisione, ma piano divisione:

7/-3 -> -2.33333... 
7//-3 -> floor(7/-3) -> floor(-2.33333...) -> -3 

PEP 238 sul Modifica della Divisione Operator:

L'operatore // sarà a disposizione per richiedere piano divisione senza ambiguità.

Vedi anche Why Python's Integer Division Floors (grazie a @eugene y) - In pratica 7//-3 è -7//3, così si vuole essere in grado di scrivere:

-7 = 3 * q + r 

Con q un intero (negativo, positivo o nul) e r un numero intero tale che 0 <= r < 3. Questo funziona solo se q = -3:

-7 = 3 * (-3) + 2 
8

// è l'operatore per la divisione piano.

Ciò significa che dopo la divisione è completata viene applicata la funzione "pavimento" (il valore recuperato dalla divisione viene arrotondato all'intero più vicino indipendentemente dal fatto che la parte decimale è maggiore o minore di 0,5)

Come per il tuo esempio, fai attenzione a notare che per le risposte negative l'operatore di divisione del piano continuerà ad arrotondare (ad es. -5/2 -> -2.5 -> -3).