División en Python 2.7. y 3.3 [duplicate]


Esta pregunta ya tiene una respuesta aquí:

¿Cómo puedo dividir dos números en Python 2.7 y obtener el resultado con decimales?

No entiendo por qué hay diferencia:

En Python 3:

>>> 20/15
1.3333333333333333

En Python 2:

>>> 20/15
1

¿No es esto un módulo en realidad?

Author: Alex.K., 2014-01-23

4 answers

En python 2.7, el operador / es la división entera si las entradas son enteros.

Si quieres división flotante (que es algo que siempre prefiero), simplemente usa esta importación especial:

from __future__ import division

Véalo aquí:

>>> 3 / 2
1
>>> from __future__ import division
>>> 3 / 2
1.5
>>>

La división entera se logra usando //, y modulo usando %

>>> 3 % 2
1
>>> 3 // 1
3
>>>

EDITAR

Como ha comentado user2357112, esta importación debe hacerse antes que cualquier otra importación normal.

 82
Author: bgusach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-23 19:07:56

En Python 3, / es división flotante

En Python 2, / es la división entera (suponiendo int entradas)

Tanto en 2 y 3, // es la división entera

(Para obtener la división flotante en Python 2 se requiere que cualquiera de los operandos sea un flotador, ya sea como 20. o float(20))

 35
Author: mhlester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-23 19:05:11

En Python 2.x, asegúrese de tener al menos un operando de su división en float. Múltiples maneras de lograr esto como los siguientes ejemplos:

20. / 15
20 / float(15)
 14
Author: woozyking,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-23 19:00:20

"/" es la división entera en python 2 por lo que va a redondear a un número entero. Si desea que se devuelva un decimal, simplemente cambie el tipo de una de las entradas a float:

float(20)/15 #1.33333333

 9
Author: Bryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-23 19:02:01