Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 14 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

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.

Operadores aritméticos en Python

La siguiente tabla resume los operadores aritméticos en Python y cómo funcionan:

Operador Sintaxis Resultado
Suma (+)num1+num2Devuelve la suma de num1 y num2
Resta (-)num1-num2Devuelve la diferencia entre num1 y num2
Multiplicación (*)num1*num2Devuelve el producto de num1 y num2
Exponenciación (**)num1**num2Devuelve el resultado de num1 elevado a la potencia de num2; num1num2
División (/)num1/num2Devuelve el resultado cuando num1 se divide por num2 - incluida la parte fraccionaria
División del suelo (/)num1//num2Devuelve el cociente cuando num1 se divide por num2
Módulo (%)num1 % num2Devuelve 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//num2da 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 //

Piso-División-Uso-del-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 num2Utilice 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()

Piso-División-Uso-operador.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 real x 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.

python-floordivision-tutorial-ex1

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.

python-floordivision-tutorial-ex2

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

Ejemplos de división de pisos 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 encuentra item 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. 👩🏽‍💻

  • Bala Priya C
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba el lunes
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder