En este tutorial aprenderás a realizar divisiones por el suelo en Python. Usarás el operador // de Python, la función floor del módulo math de Python, y más - con ejemplos de código.
Comenzaremos con una visión general de los operadores aritméticos en Python y aprenderemos cómo funciona el operador de división por el suelo //. A continuación, aprenderemos a utilizar otros métodos equivalentes incluyendo funciones de los módulos math y operator para realizar la división por el suelo.
Empecemos...
Operadores aritméticos en Python
En Python, puede utilizar operadores aritméticos para realizar operaciones aritméticas sencillas con números del tipo int
y float
tipos de datos. Estos operadores actúan sobre los operandos (los números) y devuelven el resultado de la operación.

La siguiente tabla resume los operadores aritméticos en Python y cómo funcionan:
Operador | Sintaxis | Resultado |
Suma (+) | num1+num2 | Devuelve la suma de num1 y num2 |
Resta (-) | num1-num2 | Devuelve la diferencia entre num1 y num2 |
Multiplicación (*) | num1*num2 | Devuelve el producto de num1 y num2 |
Exponenciación (**) | num1**num2 | Devuelve el resultado de num1 elevado a la potencia de num2 ; num1 num2 |
División (/) | num1/num2 | Devuelve el resultado cuando num1 se divide por num2 - incluida la parte fraccionaria |
División del suelo (/) | num1//num2 | Devuelve el cociente cuando num1 se divide por num2 |
Módulo (%) | num1 % num2 | Devuelve el resto cuando num1 se divide por num2 |
Veamos algunos ejemplos que utilizan estos operadores aritméticos. Puedes probar estos ejemplos en un REPL de Python o en Editor de Python en línea de Geekflare.
>>> num1 = 18
>>> num2 = 5
>>> num1 + num2
23
>>> num1 - num2
13
>>> num1 * num2
90
>>> num1 ** num2
1889568
En este ejemplo, num1
tiene 18 años y num2
es 5. La operación de división num1/num2
devuelve el resultado incluyendo la parte fraccionaria.
El número 5 entra tres veces en 18 dejando un resto de tres. Por lo tanto, la operación de división por el suelo, num1//num2
da el cociente 3, mientras que el operador módulo da el resto, también 3 en este caso.
>>> num1/num2
3.6
>>> num1//num2
3
>>> num1 % num2
3
Esto debería darte una idea de cómo funcionan los operadores división, división piso y módulo. A continuación, aprenderemos sobre el operador de división piso en detalle.
⚠️ En Python 2, la operación de división (/) trunca el resultado al entero más cercano, de forma similar a la operación de división por el suelo en Python 3. Este tutorial explica cómo funciona la operación de división por el suelo en Python 3.x.
División por el suelo con el operador //

Consideremos una operación de división con un dividendo y un divisor. En num1/num2
, num1
es el dividendo y num2
es el divisor. Para realizar la división por el suelo de num1
y num2
Utilice num1//num2
.
En operador de división de planta (//) devuelve el cociente de la operación de división -como un número entero o de coma flotante- en función de los tipos de datos de los operandos.
El operador de división por el suelo no garantiza que la respuesta sea siempre un número entero. Si el dividendo (num1
) o el divisor (num2
) es un flotador, entonces el resultado de num1//num2
es un flotador. He aquí algunos ejemplos.
>>> 18.0//5
3.0
>>> 10.0//4
2.0
>>> 15//4.0
3.0
Si necesita que el resultado sea un número entero, deberá convertirlo explícitamente en un número entero utilizando int()
función:
>>> int(18.0//5)
3
>>> int(10.0//4)
2
>>> int(15//4.0)
3
¿Qué ocurre bajo el capó?
Cuando se utiliza el operador de división por el suelo //, el método especial (también llamado método dunder) __floordiv__()
se llama. Por lo tanto, también puede utilizar la función __floordiv__()
en cualquier número entero o de coma flotante, como se muestra a continuación:
num1 = 18
num2 = 5
num1.__floordiv__(num2)
# Output: 3
División por el suelo con operator.floordiv()

💡 Para realizar la división por el suelo en Python, también puedes utilizar la función floordiv()
en la función operator
módulo.
Python módulo operador contiene las definiciones de funciones eficientes que pueden realizar todas las operaciones aritméticas. Por lo tanto, para realizar la división por el suelo, también puede utilizar la función floordiv()
del módulo operador - en lugar del operador //.
Utilización de la floordiv()
del módulo operador equivale a utilizar el operador de división por el suelo.
>>> import operator
>>> operator.floordiv(18,5)
# Output: 3
>>> operator.floordiv(12,5.0)
# Output: 2.0
División por el suelo con math.floor()
¿Cómo funciona la función suelo?
En matemáticas, el
floor()
toma cualquier número realx
como entrada y devuelve un número entero (resultado). Este resultado es el entero mayor es decir inferior o igual a el número real x.
Para entenderlo mejor, tomemos algunos ejemplos y visualicemos estos números en una recta numérica.
Ejemplo 1: Consideremos el número 2,3. El mayor número entero menor o igual que 2,3 es 2, por lo que floor(2,3) devolverá 2.

Ejemplo 2: También puedes aplicar la misma definición cuando trabajes con números negativos. Consideremos el número -1,7. El mayor número entero que es menor o igual que -1,7 es -2, por lo que floor(-1,7) devolverá -2.

Verifiquemos los resultados anteriores utilizando el floor()
del módulo matemático.
>>> from math import floor
>>> floor(2.3)
2
>>> floor(-1.7)
-2
Para realizar la división en pisos, puede llamar a la función floor()
con num1/num2
como argumento. Como trunca o redondea el resultado al entero más próximo, es equivalente a la operación de división por el suelo.
Puede importar explícitamente el floor()
de la función math
como se muestra:
from math import floor
num1 = 18
num2 = 5
floor(num1/num2)
# Output: 3
Alternativamente, también puede importar sólo el math
y luego acceder al módulo floor()
utilizando math.floor()
.
import math
num1 = 18
num2 = 5
math.floor(num1/num2)
# Output: 3
A diferencia del floordiv()
del módulo operador y el operador de división por el suelo //, utilizando math.floor(num1/num2)
garantiza que el resultado es un número entero. Este método hace que el código sea legible y elimina el paso de fundición de tipos.
import math
num1 = 18.0
num2 = 5
math.floor(num1/num2)
# Output: 3
Ejemplos de división en planta en Python

Concluyamos nuestro debate con un ejemplo práctico: Búsqueda binaria. ✅
📑 La búsqueda binaria es un algoritmo de búsqueda eficiente que permite buscar un elemento objetivo a través de matrices ordenadas en O(log n) tiempo, donde n es el tamaño de la matriz.
Este algoritmo funciona dividiendo el intervalo de búsqueda por la mitad en cada paso. Esto se hace dependiendo de si el punto medio del intervalo coincide con el objetivo (¡la búsqueda termina cuando se encuentra la coincidencia!) o es menor o mayor que el objetivo. Como el tamaño de la matriz se reduce a la mitad en cada paso, el punto medio no siempre se evalúa como un número entero.
itemlist = [5,7,18,21,34,45]
item = 7
Considere la siguiente implementación del algoritmo de búsqueda binaria. La función binary_search()
recibe un número (item
) y una lista (itemlist
) y busca la aparición del item
en itemlist
.
- Si el
item
la función devuelve el índice en el que se encuentraitem
ocurre. - Si no, devuelve
None
.
def binary_search(item, itemlist):
# get the list size
listsize = len(itemlist) - 1
# start at the two ends of the list
lowerIdx = 0
upperIdx = listsize
while lowerIdx <= upperIdx:
# calculate the middle point
# use normal division instead of floor division
midPt = (lowerIdx + upperIdx)/ 2
# if item is found, return the index
if itemlist[midPt] == item:
return midPt
# otherwise get the next midpoint
if item > itemlist[midPt]:
lowerIdx = midPt + 1
else:
upperIdx = midPt - 1
if lowerIdx > upperIdx:
return None
Esta implementación es funcionalmente correcta, excepto que no hemos tenido en cuenta el midPt
no se evalúa a un número entero a medida que avanza la búsqueda.
binary_search(item,itemlist)
Si llamamos a la función, nos encontramos con un TypeError
indicando que los índices de la lista deben ser enteros o slices, no float.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-a5f12ebc3145> in <module>
----> 1 binary_search(item,itemlist)
<ipython-input-2-524ef6900b1f> in binary_search(item, itemlist)
12
13 # if item is found, return the index
---> 14 if itemlist[midPt] == item:
15 return midPt
16 # otherwise get the next midpoint
TypeError: list indices must be integers or slices, not float
Modificamos la definición de la función para utilizar el operador de división piso:
def binary_search(item, itemlist):
# get the list size
listsize = len(itemlist) - 1
# start at the two ends of the list
lowerIdx = 0
upperIdx = listsize
while lowerIdx <= upperIdx:
# calculate the middle point
# use floor division
midPt = (lowerIdx + upperIdx)// 2
# if item is found, return the index
if itemlist[midPt] == item:
return midPt
# otherwise get the next midpoint
if item > itemlist[midPt]:
lowerIdx = midPt + 1
else:
upperIdx = midPt - 1
if lowerIdx > upperIdx:
return None
La función devuelve el índice en el que se encuentra el elemento 7, que es el índice uno.
binary_search(item,itemlist)
# Output: 1
Conclusión
Espero que este tutorial te haya ayudado a entender cómo realizar la división por el suelo en Python. Aquí tienes un resumen de los diferentes métodos que has aprendido:
- En Python, a operador b realiza la operación definida por el operador con a y b como operandos y devuelve el resultado de la operación.
- Puedes utilizar el operador de división por el suelo // de Python; a//b devuelve el cociente de la operación de división a/b.
- Alternativamente, puede utilizar el equivalente floordiv() definida en el módulo operador de Python con la sintaxis: operador.floordiv(a,b) para obtener el resultado de a//b.
- Todos los métodos anteriores devuelven el cociente pero el tipo de datos puede ser un float o un int dependiendo de los valores de a y b. Así que tendrás que convertir el valor de retorno a un entero.
- En floor() del módulo matemático de Python también se puede utilizar para realizar la división por el suelo: math.floor(a,b) es equivalente a a//b y devuelve un número entero. Si desea que el resultado sea un número entero, utilice la función floor del módulo math.
A continuación, aprenda a trabajar con defaultdict en Python. 👩🏽💻