logo

Floor Division en Python

En el següent tutorial, coneixerem el funcionament de Floor Division mitjançant el llenguatge de programació Python.

Però abans de començar, anem a entendre breument què és la divisió Floor.

Entendre la divisió de pis

La divisió de planta és una operació de divisió normal, excepte que retorna el nombre enter més gran possible. Aquest nombre enter pot ser inferior o igual a la sortida normal de la divisió.

La funció del sòl es representa amb el símbol ⌊ ⌋ en termes matemàtics.

Entenem ara el funcionament de l'operació de la divisió Floor. Per exemple,

⌊36/5⌋

Pas 1: Realitzar primer la divisió. Ens dividirem 36 per 5 .

36 ÷ 5 = 7.2

Pas 2: Ara, realitzarem la funció de sòl sobre el valor que obtenim després de la divisió, és a dir, 7.2 .

⌊7.2⌋=7

Com a resultat, aconseguim 7 que és el valor sòl de 7.2 . Per tant, la divisió del sòl significa dividir i arrodonir cap a baix al nombre enter més proper.

Els diferents llenguatges de programació ofereixen una funció o un operador integrat per calcular la divisió del sòl. Alguns exemples poden ser:

  1. Podem utilitzar el pis () mètode en el llenguatge de programació C++.
  2. Podem utilitzar el pis () mètode en el llenguatge de programació Java.
  3. Podem utilitzar el // operador en el llenguatge de programació Python.

Tanmateix, només parlarem de l'ús de l'operació de divisió del sòl a Python amb l'ajuda de l' operador de doble barra invertida (//). .

Entendre la divisió del sòl amb Python

En el llenguatge de programació Python, la divisió de planta s'utilitza per dividir dos nombres i arrodoneix el resultat a l'enter més proper.

Abans d'aprofundir en el concepte de divisió del sòl, recordem breument el significat de la divisió i el funcionament del math.floor() funció en Python.

Realització de la divisió regular en Python

Podem dividir dos nombres utilitzant la barra invertida ( / ) operador de divisió en Python. Considerem el següent exemple que demostra el mateix:

Exemple 1:

 # declaring variables a = 13 b = 4 # performing regular division c = a / b # printing the result print(a, '/', b, '=', c) 

Sortida:

 13 / 4 = 3.25 

Explicació:

En el fragment de codi anterior, hem definit dues variables com a = 13 i b = 4 . Aleshores hem realitzat una operació de divisió utilitzant la barra invertida ( / ) operador de divisió i va emmagatzemar el valor resultant en una nova variable, c . Finalment, hem imprès el valor de c .

Com podem veure, la divisió a Python funciona de la mateixa manera que la divisió a les matemàtiques.

Entendre la funció math.floor() a Python

Hi ha un mòdul matemàtic integrat a Python que consta de diferents utilitats matemàtiques útils per als càlculs.

Una d'aquestes funcions integrades del matemàtiques mòdul és el math.floor() funció. Aquesta funció accepta una entrada numèrica i retorna el valor mínim arrodonint-lo a l'enter més proper.

Considerem el següent exemple que demostra el mateix:

Exemple 2:

 # importing the floor() function from the math module from math import floor # declaring the variables a = 5.34 b = -5.34 # using the floor() function c = floor(a) d = floor(b) # printing the values print('Floor value of', a, '=', c) print('Floor value of', b, '=', d) 

Sortida:

 Floor value of 5.34 = 5 Floor value of -5.34 = 6 

Explicació:

Al fragment de codi anterior, hem importat el fitxer pis () funció des del matemàtiques mòdul. Aleshores hem declarat dues variables com a = 5,34 i b = -5,34 . Després hem utilitzat el pis () funció per calcular els valors mínims de les dues variables i emmagatzemar-los en variables noves, c i d . Finalment, hem imprès els resultats per als usuaris.

Ara que hem entès els conceptes de dividir i emparar números a Python. Anem als detalls associats a la divisió del sòl a Python.

Realització de Floor Division en Python

La divisió del sòl és una operació de Python que ens permet dividir dos nombres i arrodoneix el valor resultant fins a l'enter més proper. La divisió del sòl es produeix a través del operador de doble barra invertida (//). . La sintaxi del mateix es mostra a continuació:

Sintaxi:

 res = var_1 // var_2 

On:

    resés el valor resultant de la divisió del sòlera_1és el dividendera_2és el divisor

Podem pensar en la divisió del sòl com la divisió regular combinada amb la math.floor() crida de funció.

Nota: la divisió del sòl pot arrodonir qualsevol nombre cap avall al nombre enter més proper. Per exemple, 3,99 encara s'arrodonirà a 3.

Considerem ara un exemple que demostra el funcionament de la divisió del sòl.

Exemple 3:

 # declaring the variables a = 13 b = 5 # using the // operator c = a // b # comparing the floor value with regular division d = a / b # printing the values print('Floor Division:', a, '//', b, '=', c) print('Regular Division:', a, '/', b, '=', d) 

Sortida:

sharwanand
 Floor Division: 13 // 5 = 2 Regular Division: 13 / 5 = 2.6 

Explicació:

En el fragment de codi anterior, hem declarat dues variables com a a = 13 i b = 5 . Després hem utilitzat el // operador per calcular el valor de la divisió del sòl i emmagatzemar el valor del sòl en una variable nova, c . Aleshores hem realitzat la divisió regular utilitzant el / operador i va emmagatzemar el valor en una altra variable, d . Finalment, hem imprès els dos resultats i els hem comparat.

Ara, considerem un altre exemple amb l' math.floor() funció.

Exemple 4:

 # importing the floor() function from the math module from math import floor # declaring the variables a = 17 b = 5 # using the floor() function c = floor(a / b) # comparing the floor() function with // operator d = a // b # printing the values print('Floor Division using floor() function:', c) print('Floor Division using // operator:', d) 

Sortida:

 Floor Division using floor() function: 3 Floor Division using // operator: 3 

Explicació:

Hem importat el pis () funció des del matemàtiques mòdul al fragment de codi anterior. Aleshores hem declarat dues variables com a = 17 i b = 5 . Després vam utilitzar el pis () funció, dividida a per b , i el va emmagatzemar a la variable c. Aleshores hem calculat el valor del sòl amb el // operador i va emmagatzemar el valor en una nova variable, d . Finalment, hem imprès els dos valors i els hem comparat.

Realització de la divisió del sòl amb nombres negatius

També podem fer la divisió del sòl amb nombres negatius.

En el cas dels nombres negatius, el valor resultant encara s'arrodoneix a l'enter més proper. Alguns es poden confondre arrodonint un nombre negatiu per avall implica anar-se'n de zero. Per exemple, -2.3 està enterrat fins a -3 .

Considerem un exemple que demostra la divisió del sòl amb nombres negatius.

Exemple 5:

 # declaring the variables a = -10 b = 4 # calculating floor value using // operator c = a // b # printing the value print('Floor Division:', a, '//', b, '=', c) 

Sortida:

 Floor Division: -10 // 4 = -3 

Explicació:

En el fragment de codi anterior, hem declarat dues variables com a a = -10 i b = 4 . Després hem utilitzat el // operador per calcular el valor del sòl i emmagatzemar-lo en una nova variable, c . Finalment, hem imprès el valor per a l'usuari.

Amb una divisió regular, -10 / 4 tornaria -2.5 ; tanmateix, amb una divisió de planta, aquest nombre s'arrodoneix a l'enter negatiu més proper, és a dir, a -3 .

Realització de la divisió de terra amb flotadors

També podem realitzar la divisió de sòl amb flotadors en Python. Quan es divideix el sòl flotants, el resultat és un flotant que representa l'enter més proper.

Considerem l'exemple següent que demostra la divisió del sòl mitjançant flotadors.

Exemple 6:

 # initializing the lists a = [17.5, 10, 13.4] b = [3.3, 2.5, 3] # using for-loop to iterate through the list for i in range(0, 3): # calculating the floor division value c = a[i] // b[i] # printing the result print(a[i], '//', b[i], '=', c) 

Sortida:

 17.5 // 3.3 = 5.0 10 // 2.5 = 4.0 13.4 // 3 = 4.0 

Explicació:

Al fragment de codi anterior, hem inicialitzat dues llistes. Després hem utilitzat el per -bucle per iterar pels elements d'aquestes llistes, calcular els valors per a cada operació de divisió de planta i imprimir els resultats per als usuaris.

Com a resultat, podem observar que l'operació de divisió del sòl es realitza utilitzant flotants i float amb sencer retorna el valor arrodonit cap avall al nombre enter més proper representat com a flotants.

Floor Division i Modulo en Python

En matemàtiques, el mòdul és un concepte principalment associat a la divisió del sòl. També podem dir que mòdul significa la resta de la divisió entre dos nombres. En altres paraules, podem comptar el nombre de restes amb ell.

Podem calcular el mòdul a Python utilitzant el percentatge ( % ) operador.

Considerem un exemple que il·lustra la relació entre la divisió del sòl i el mòdul a Python.

Exemple 7.1:

Tenint en compte 13 caramels i 4 menjadors, podem calcular el nombre de caramels que obté cada menjador amb l'ajuda de la divisió de terra.

Codi:

 # declaring variables numberOfCandies = 13 numberOfEaters = 4 # using floor division to calculate the number of candies each eater gets candiesPerEater = numberOfCandies // numberOfEaters # printing values print('Number of Candies:', numberOfCandies) print('Number of Eaters:', numberOfEaters) print('The number of candies each eater gets:', candiesPerEater) 

Sortida:

 Number of Candies: 13 Number of Eaters: 4 The number of candies each eater gets: 3 

Explicació:

comanda arp

En el fragment de codi anterior, hem declarat algunes variables que signifiquen el nombre de caramels i menjars. Després hem utilitzat el // que l'operador realitzi la divisió del sòl per calcular el nombre de caramels que rep cada menjador. Després hem imprès aquests valors per a l'usuari.

Calculem ara el nombre total de caramels compartits entre el grup. Això no és molt important.

Exemple 7.2:

Multiplicarem el nombre de caramels per persona pel nombre de menjadors.

Codi:

 # calculating the total number of candies being shared among the group totalCandiesShared = candiesPerEater * numberOfEaters # printing values print('The total number of candies being shared among the group:', totalCandiesShared) 

Sortida:

 The total number of candies being shared among the group: 12 

Explicació:

En el fragment de codi anterior, hem calculat el nombre total de caramels que es comparteixen entre el grup multiplicant el nombre de caramels per persona pel nombre de menjadors i hem imprès el valor resultant per als usuaris.

El nombre total de caramels complets compartits és 12 . No obstant això, el nombre total de caramels és 13 . Aquesta afirmació implica que sobrarà un dolç i no es menjarà.

L'exemple anterior descriu una manera de calcular el nombre de restes. Tanmateix, si només ens interessa el nombre de restes, el podem calcular directament amb l'ajuda del mòdul.

Exemple 7.3:

Donats 13 caramels i 4 menjadors, quin és el nombre de caramels sobrants?

Codi:

 # declaring variables numberOfCandies = 13 numberOfEaters = 4 # using modulo to calculate the leftover candies leftoverCandies = numberOfCandies % numberOfEaters # printing values print('Number of Candies:', numberOfCandies) print('Number of Eaters:', numberOfEaters) print('Total number of Leftover Candies:', leftoverCandies) 

Sortida:

 Number of Candies: 13 Number of Eaters: 4 Total number of Leftover Candies: 1 

Explicació:

En el fragment de codi anterior, hem declarat les variables que emmagatzemen el valor de caramels i menjars. Aleshores hem calculat el nombre de caramels sobrants amb el % operador que significa l'operació mòdul. Finalment, hem imprès algunes declaracions i valors resultants per als usuaris. Com a resultat, podem veure que el caramel sobrant és 1 .

a = b * (a // b) + (a % b)

A Python, la divisió del sòl i el mòdul estan relacionats per l'equació següent:

On:

    aés el dividend.bés el divisor.

Per exemple, verifiquem que l'equació anterior es compleix amb els 13 caramels i els 4 menjadors.

13 = 4 * (13 // 4) + (13 % 4)
13 = 4 * 3 + 1
13 = 13

Així, hem entès els conceptes de divisió de sòl i mòdul a Python. Ara, veurem alguna funció integrada que calcula totes dues.

Comprensió de la funció divmod() a Python

Python ofereix una funció integrada anomenada divmod() que ens permet calcular tant la divisió del sòl com el mòdul entre dos valors numèrics.

La sintaxi per a divmod() la funció es mostra a continuació:

Sintaxi:

 res = divmod(var_1, var_2) 

On:

    resés el resultat com una tupla. Aquesta tupla té el resultat de la divisió del sòl i la resta donada pel mòdul.era_1és el dividend.era_2és el divisor.

Considerem ara l'exemple següent que demostra divmod() funció.

Exemple 8:

Donats 13 caramels i 4 menjadors, quants caramels plens obté cada menjador i quants caramels queden?

Codi:

 # declaring variables numberOfCandies = 13 numberOfEaters = 4 # using the divmod() function nCandies, nLeftovers = divmod(numberOfCandies, numberOfEaters) # printing values print('Number of Candies:', numberOfCandies) print('Number of Eaters:', numberOfEaters) print('Number of Candies per eater:', nCandies) print('Total number of Leftover Candies:', nLeftovers) 

Sortida:

 Number of Candies: 13 Number of Eaters: 4 Number of Candies per eater: 3 Total number of Leftover Candies: 1 

Explicació:

En el fragment de codi anterior, hem declarat algunes variables. Hem utilitzat el divmod() funció per calcular el valor de la divisió del sòl i el mòdul per a les variables donades. Després hem imprès aquests valors per als usuaris.

Entendre la precedència de la divisió de planta

A Python, l'operador de divisió de planta // té el mateix nivell de precedència que la multiplicació ( * ), divisió ( / ), i mòdul ( % ).

Aquesta afirmació implica que si multipliquem, i després dividim planta, primer s'aconsegueix la multiplicació, i després la divisió de planta i viceversa.

Tanmateix, si per exemple restem dos nombres i després fem una divisió de planta, l'operació de divisió de planta obrirà el camí.

Considerem un exemple que demostra el mateix.

Exemple 9.1:

js settimeout
 # declaring some variables a = 3 b = 5 c = 6 d = 7 # performing an operation e = a * b // c - d # printing the result print(a, '*', b, '//', c, '-', d, '=', e) 

Sortida:

 3 * 5 // 6 - 7 = -5 

Explicació:

Al fragment de codi anterior, hem declarat algunes variables com a a = 3, b = 5, c = 6 , i d = 7 . Aleshores hem realitzat una operació i hem emmagatzemat el valor resultant en una nova variable, És . Finalment, hem imprès aquest valor per als usuaris.

Per entendre com es calcula aquest resultat, podem inserir parèntesis al voltant dels termes en l'ordre de precedència correcte.

L'exemple que es mostra a continuació representa el mateix:

Exemple 9.2:

 # declaring some variables a = 3 b = 5 c = 6 d = 7 # performing an operation e = ((a * b) // c) - d # printing the result print('((', a, '*', b, ') //', c, ') -', d, '=', e) 

Sortida:

 (( 3 * 5 ) // 6 ) - 7 = -5 

Explicació:

Al fragment de codi anterior, hem declarat algunes variables com a a = 3, b = 5, c = 6 , i d = 7 . Aleshores hem realitzat la mateixa operació però amb parèntesis i hem emmagatzemat el valor resultant en una nova variable, És . Finalment, hem imprès aquest valor per als usuaris.

Com podem observar que obtenim el resultat similar al de l'exemple anterior, el que significa que l'ordre de càlcul és:

Multiplicació → Divisió de pis → Resta

Aquí teniu el càlcul pas a pas de l'anterior:

3 * 5 // 6 - 7
((3 * 5) // 6) - 7
(15 // 6) - 7
2 - 7
-5

Hem entès correctament la divisió del sòl i el seu ús en el llenguatge de programació Python.

Finalment, veurem un cas d'ús avançat per a la divisió del sòl. En el cas següent, avançat no implica dur; tanmateix, és força inusual.

Comprendre l'ús avançat de la divisió del sòl

Alguns de nosaltres podríem ser conscients que també podem crear objectes personalitzats que admetin l'operació de divisió del sòl a Python. Això pot ser possible mitjançant un mètode especial conegut com __floordiv__() .

El mètode __floordiv__() a Python

L'operació de divisió de planta en Python s'utilitza per dividir dos nombres i arrodoneix el resultat a l'enter més proper.

Funciona sota el capó perquè un tipus numèric implementa un mètode especial anomenat __floordiv__() . Aleshores, sempre que cridem al // operador entre dos objectes, el __floordiv__() es crida el mètode.

A Python, també podem trucar directament a __floordiv__() mètode. Considerem el següent exemple que demostra el mateix:

Exemple 10:

 # declaring some variables a = 31 b = 7 # performing floor division using the // operator c = a // b # performing floor division using the __floordiv__() method d = (a).__floordiv__(b) # printing the results of both operations print('Using the // operator:
', a, '//', b, '=', c) print('Using the __floordiv__() method:
 (', a, ').__floordiv__(', b, ') =', c) 

Sortida:

 Using the // operator: 31 // 7 = 4 Using the __floordiv__() method: ( 31 ).__floordiv__( 7 ) = 4 

Explicació:

En el fragment de codi anterior, hem declarat dues variables com a a = 31 i b = 7 . Després vam realitzar la divisió del sòl amb el // operador i __floordiv__() mètode i van emmagatzemar els seus valors resultants en dues variables, c i d . Finalment, hem imprès els resultats per als usuaris.

A partir de la sortida mostrada anteriorment, podem observar que ambdues expressions han donat el mateix resultat. Això es deu al fet que la primera expressió es converteix en la segona expressió. En altres paraules, aquestes trucades són equivalents entre si.

Ara, les coses es posaran interessants. Considerem l'exemple següent.

Exemple 11.1:

Crearem una classe personalitzada que representi els valors enters com a cadenes a l'exemple següent. A continuació, crearem dos objectes d'aquesta classe personalitzada i realitzarem l'operació de divisió de planta sobre ells.

Codi:

 # creating a class representing integer values as string class IntStr: def __init__(self, val): self.val = val # instantiating the class with two objects intOne = IntStr('17') intTwo = IntStr('4') # printing the result of the floor division operation print(intOne // intTwo) 

Sortida:

 Traceback (most recent call last): File 'D:Python_programspycase.py', line 11, in print(intOne // intTwo) TypeError: unsupported operand type(s) for //: 'IntStr' and 'IntStr' 

Explicació:

En el fragment de codi anterior, hem definit una classe com IntStr que representa els valors enters com a cadenes. Aleshores hem creat dos objectes del IntStr classe. Per últim, tenim la divisió de planta intOne objecte per la intDos objecte i va intentar imprimir el resultat.

java dormir

Tanmateix, la sortida anterior indica a TypeError . Aquest missatge d'error ho revela IntStr els objectes no admeten la divisió del sòl. Aquest error té sentit. Com tindria el tipus personalitzat cap indici d'objectes de cordes que divideixen el sòl?

No obstant això, segons resulta, podem fer el IntStr divisió del sòl de suport d'objectes.

Anteriorment, vam aprendre sempre que truquem // operador, anomenem el __floordiv__() mètode. Aquest mètode s'executa en algun lloc de la classe de l'objecte. Per exemple, els objectes int admeten la divisió de planta perquè la classe int ha aplicat el __floordiv__() mètode.

Aquests mètodes especials, com __floordiv__() , tenen alguna cosa sorprenent en comú que podem implementar aquests mètodes a la classe personalitzada. En altres paraules, podem fer que els objectes personalitzats admetin la divisió de planta en el llenguatge de programació Python.

Considerem ara l'exemple següent que demostra el mateix.

Exemple 11.2:

En l'exemple següent, implementarem el __floordiv__() mètode en el IntStr classe. A continuació, crearem dos objectes d'aquesta classe personalitzada i realitzarem l'operació de divisió de planta sobre ells.

Codi:

 # creating a class representing integer values as string class IntStr: def __init__(self, val): self.val = val def __floordiv__(self, other): intOne = int(self.val) intTwo = int(other.val) res = intOne // intTwo return IntStr(str(res)) # instantiating the class with two objects intOne = IntStr('17') intTwo = IntStr('4') # performing floor division operation res = intOne // intTwo # printing the result of the floor division operation print(intOne.val, '//', intTwo.val, '=', res.val) 

Sortida:

 17 // 4 = 4 

Explicació:

En el fragment de codi anterior, hem definit una classe com IntStr que representa els valors enters com a cadenes. També hem implementat el __floordiv__() mètode dins d'aquesta classe. Aquest mètode accepta el valor de la cadena numèrica de si mateix i d'un altre objecte. Hem convertit aquests valors de cadena en nombres enters i hem fet una divisió de planta entre ells. Aleshores hem tornat a convertir el resultat en una cadena i hem creat una nova IntStr objecte. Vam instanciar el IntStr classe amb dos objectes i va realitzar una operació de divisió de planta entre ells. Finalment, hem imprès el valor resultant per als usuaris.

Ara que entenem amb èxit el mètode per fer una classe personalitzada per donar suport a la divisió del sòl.

Si no ens agrada el fet que hem de trucar objecte.val per veure el resultat, podem implementar el __str__() mètode que retorna directament el valor durant la impressió.

Considerem l'exemple següent que demostra el mateix.

Exemple 11.3:

 # creating a class representing integer values as string class IntStr: def __init__(self, val): self.val = val def __floordiv__(self, other): intOne = int(self.val) intTwo = int(other.val) res = intOne // intTwo return IntStr(str(res)) def __str__(self): return self.val # instantiating the class with two objects intOne = IntStr('17') intTwo = IntStr('4') # performing floor division operation res = intOne // intTwo # printing the result of the floor division operation print(intOne, '//', intTwo, '=', res) 

Sortida:

 17 // 4 = 4 

Explicació:

En el fragment de codi anterior, hem definit una classe com IntStr que representa els valors enters com a cadenes. També hem implementat el __floordiv__() mètode dins d'aquesta classe. Aleshores hem definit el __str__() mètode que retorna directament els valors de cadena durant la impressió. Vam instanciar el IntStr classe amb dos objectes i va realitzar una operació de divisió de planta entre ells. Finalment, hem imprès el valor resultant per als usuaris.