Cómo realizar la división de piso en Python

Publicado: 2022-11-02

En este tutorial, aprenderá cómo realizar una división de piso en Python. Utilizará el operador // de Python, la función de piso del módulo matemático de Python y más, con ejemplos de código.

Comenzaremos con una descripción general de los operadores aritméticos en Python y aprenderemos cómo funciona el operador de división de piso //. Luego, aprenderemos a usar otros métodos equivalentes, incluidas las funciones de los módulos matemático y de operador, para realizar la división de pisos.

Empecemos…

Operadores aritméticos en Python

En Python, puede usar operadores aritméticos para realizar operaciones aritméticas simples en números de tipos de datos int y float . Estos operadores actúan sobre 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+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 de piso (/) num1//num2 Devuelve el cociente cuando num1 se divide por num2
Módulo (%) num1 % num2 Devuelve el resto cuando num1 se divide por num2

Tomemos algunos ejemplos que usan estos operadores aritméticos. Puede probar estos ejemplos en un REPL de Python o en el 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 es 18 y num2 es 5. La operación de división num1/num2 devuelve el resultado, incluida la parte fraccionaria.

El número 5 cabe tres veces en 18 dejando un resto de tres. Por lo tanto, la operación de división de piso, 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 darle una idea de cómo funcionan los operadores de división, división de piso y módulo. A continuación, aprenderemos en detalle sobre el operador de división de piso.

️ En Python 2, la operación de división (/) trunca el resultado al entero más cercano, similar a la operación de división de piso en Python 3. Este tutorial explica cómo funciona la operación de división de piso en Python 3.x.

División de piso usando el operador //

Floor-Division-Using-the-Operator

Considere 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 de piso de num1 y num2 , use num1//num2 .

El operador de división de piso (//) devuelve el cociente de la operación de división, como un número entero o un número de coma flotante, según los tipos de datos de los operandos.

El operador de división de piso no asegura que la respuesta sea siempre un número entero. Si el dividendo ( num1 ) o el divisor ( num2 ) es un flotante, entonces el resultado de num1//num2 es un flotante. Aquí están 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, entonces debe convertirlo explícitamente en un número entero usando la función int() :

 >>> int(18.0//5) 3 >>> int(10.0//4) 2 >>> int(15//4.0) 3

¿Qué sucede debajo del capó?

Cuando usa el operador de división de piso //, se llama al método especial (también llamado método dunder) __floordiv__() . Por lo tanto, también puede usar el __floordiv__() en cualquier número entero o de punto flotante, como se muestra a continuación:

 num1 = 18 num2 = 5 num1.__floordiv__(num2) # Output: 3

División de piso usando operator.floordiv()

Floor-Division-Using-operator.floordiv

Para realizar la división de piso en Python, también puede usar la función floordiv() en el módulo del operator .

El módulo de operador de Python contiene las definiciones de funciones eficientes que pueden realizar todas las operaciones aritméticas. Por lo tanto, para realizar la división de piso, también puede usar la función floordiv() del módulo del operador, en lugar del operador //.

Usar la función floordiv() del módulo de operador es equivalente a usar el operador de división de piso.

 >>> import operator >>> operator.floordiv(18,5) # Output: 3 >>> operator.floordiv(12,5.0) # Output: 2.0

División de piso usando math.floor()

¿Cómo funciona la función de suelo?

En matemáticas, la función floor() toma cualquier número real x como entrada y devuelve un número entero (resultado). Este resultado es el entero más grande que es menor o igual que el número real x.

Para entender esto mejor, tomemos algunos ejemplos y visualicemos estos números en una recta numérica.

Ejemplo 1 : Considere el número 2.3. El entero más grande que es menor o igual a 2,3 es 2; entonces piso (2.3) devolverá 2.

python-floordivision-tutorial-ex1

Ejemplo 2: También puede aplicar la misma definición cuando trabaje con números negativos. Considere el número -1.7. El entero más grande que es menor o igual a -1.7 es -2; entonces piso (-1.7) devolverá -2.

python-floordivision-tutorial-ex2

Verifiquemos los resultados anteriores usando la función floor() del módulo matemático.

 >>> from math import floor >>> floor(2.3) 2 >>> floor(-1.7) -2

Para realizar la división de piso, puede llamar a la función floor() con num1/num2 como argumento. Como trunca o redondea el resultado al entero más cercano, es equivalente a la operación de división de piso.

Puede importar explícitamente la función floor() desde el módulo math , como se muestra:

 from math import floor num1 = 18 num2 = 5 floor(num1/num2) # Output: 3

Alternativamente, también puede importar solo el módulo math y luego acceder a la función floor() usando math.floor() .

 import math num1 = 18 num2 = 5 math.floor(num1/num2) # Output: 3

A diferencia de la función floordiv() del módulo de operador y el operador de división de piso //, el uso de math.floor(num1/num2) garantiza que el resultado sea un número entero. Este método hace que el código sea legible y elimina el paso de conversión de tipos.

 import math num1 = 18.0 num2 = 5 math.floor(num1/num2) # Output: 3

Ejemplos de división de pisos en Python

Ejemplos de división de piso en Python

Concluyamos nuestra discusión con un ejemplo práctico: búsqueda binaria.

La búsqueda binaria es un algoritmo de búsqueda eficiente que le permite buscar un elemento de destino a través de matrices ordenadas en tiempo O (log n) , 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 una coincidencia!) o si 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() toma un número ( item ) y una lista ( itemlist ) y busca la ocurrencia del item en itemlist .

  • Si se encuentra el item , la función devuelve el índice en el que se encuentra el item .
  • De lo contrario, 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 que midPt no 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 que indica que los índices de la lista deben ser enteros o segmentos, no flotantes.

 --------------------------------------------------------------------------- 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 usar el operador de división de 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 comprender cómo realizar la división de pisos en Python. Aquí tienes un resumen de los diferentes métodos que has aprendido:

  • En Python, un operador b realiza la operación definida por el operador con a y b como operandos y devuelve el resultado de la operación.
  • Puede usar el operador de división de piso de Python //; a//b devuelve el cociente de la operación de división a/b.
  • Alternativamente, puede usar la función equivalente floordiv() definida en el módulo operator de Python con la sintaxis: operator.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 flotante o int según los valores de a y b. Así que tendrás que convertir el valor devuelto en un número entero.
  • La función floor() del módulo de matemáticas de Python también se puede usar para realizar una división de piso: math.floor(a,b) es equivalente a a//b y devuelve un número entero. Cuando desee que el resultado sea un número entero, considere usar la función de suelo del módulo matemático.

A continuación, aprenda a trabajar con defaultdict en Python.