logo

Poschodová divízia v Pythone

V nasledujúcom návode sa zoznámime s operáciou Floor Division pomocou programovacieho jazyka Python.

Ale skôr ako začneme, stručne pochopme, čo je rozdelenie podlahy.

Pochopenie divízie podlahy

Delenie poschodia je normálna operácia delenia, ibaže vracia najväčšie možné celé číslo. Toto celé číslo môže byť buď menšie ako výstup normálneho delenia, alebo sa mu môže rovnať.

Funkcia podlahy je v matematickom vyjadrení označená symbolom ⌊ ⌋.

Poďme teraz pochopiť fungovanie operácie Floor division. Napríklad,

⌊36/5⌋

Krok 1: Najprv vykonajte rozdelenie. Rozdelíme sa 36 podľa 5 .

36 ÷ 5 = 7,2

Krok 2: Teraz vykonáme funkciu podlahy na hodnote, ktorú získame po delení, t.j. 7.2 .

⌊7,2⌋=7

V dôsledku toho dostaneme 7 čo je spodná hodnota 7.2 . Delenie podľa podlahy teda znamená delenie a zaokrúhlenie nadol na najbližšie celé číslo.

Rôzne programovacie jazyky ponúkajú konkrétnu vstavanú funkciu alebo operátora na výpočet rozdelenia podlahy. Niektoré príklady môžu byť:

  1. Môžeme použiť poschodie () metóda v programovacom jazyku C++.
  2. Môžeme použiť poschodie () metóda v programovacom jazyku Java.
  3. Môžeme použiť // operátor v programovacom jazyku Python.

Budeme však diskutovať iba o použití operácie rozdelenia podlahy v Pythone s pomocou operátor dvojitej spätnej lomky (//). .

Pochopenie rozdelenia poschodí pomocou Pythonu

V programovacom jazyku Python sa delenie podlahy používa na rozdelenie dvoch čísel a zaokrúhlenie výsledku nadol na najbližšie celé číslo.

Predtým, ako sa ponoríme hlbšie do konceptu delenia podlahy, v krátkosti si pripomeňme význam delenia a fungovanie math.floor() funkciu v Pythone.

Vykonávanie pravidelného delenia v Pythone

Dve čísla môžeme rozdeliť pomocou spätnej lomky ( / ) operátor divízie v Pythone. Pozrime sa na nasledujúci príklad, ktorý to demonštruje:

Príklad 1:

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

Výkon:

 13 / 4 = 3.25 

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme definovali dve premenné ako a = 13 a b = 4 . Potom sme vykonali operáciu delenia pomocou spätnej lomky ( / ) operátor delenia a uloženú výslednú hodnotu do novej premennej, c . Konečne sme vytlačili hodnotu c .

Ako vidíme, delenie v Pythone funguje rovnako ako delenie v matematike.

Pochopenie funkcie math.floor() v Pythone

V Pythone je zabudovaný matematický modul, ktorý pozostáva z rôznych užitočných matematických nástrojov na výpočty.

Jednou z takýchto vstavaných funkcií matematika modul je math.floor() funkciu. Táto funkcia prijíma číselný vstup a vracia hodnotu dna zaokrúhlením nadol na najbližšie celé číslo.

Pozrime sa na nasledujúci príklad, ktorý to demonštruje:

Príklad 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) 

Výkon:

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

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme importovali poschodie () funkcia z matematika modul. Potom sme deklarovali dve premenné ako a = 5,34 a b = -5,34 . Potom sme použili poschodie () funkcia na výpočet minimálnych hodnôt oboch premenných a ich uloženie do nových premenných, c a d . Nakoniec sme pre používateľov vytlačili výsledky.

Teraz, keď sme pochopili koncepty delenia a podlažia čísel v Pythone. Poďme na podrobnosti spojené s rozdelením podlahy v Pythone.

Vykonávanie oddelenia podlahy v Pythone

Delenie podlahy je operácia v Pythone, ktorá nám umožňuje rozdeliť dve čísla a zaokrúhliť výslednú hodnotu nadol na najbližšie celé číslo. K deleniu podlahy dochádza cez operátor dvojitej spätnej lomky (//). . Syntax pre to isté je uvedená nižšie:

Syntax:

 res = var_1 // var_2 

Kde:

rozdelenie reťazcov c++
    resje výsledná hodnota delenia podlahywas_1je dividendawas_2je deliteľ

Delenie podlahy môžeme považovať za bežné delenie kombinované s math.floor() volanie funkcie.

Poznámka: Delenie podlahy môže zaokrúhliť akékoľvek číslo nadol na najbližšie celé číslo. Napríklad 3,99 bude stále zaokrúhlené nadol na 3.

Uvažujme teraz o príklade, ktorý demonštruje fungovanie delenia podlahy.

Príklad 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) 

Výkon:

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

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme deklarovali dve premenné ako a = 13 a b = 5 . Potom sme použili // operátor na výpočet hodnoty rozdelenia podlahy a uloženie hodnoty podlahy do novej premennej, c . Potom sme vykonali pravidelné delenie pomocou / operátor a uložil hodnotu do inej premennej, d . Nakoniec sme oba výsledky vytlačili a porovnali.

Teraz sa pozrime na ďalší príklad s použitím math.floor() funkciu.

Príklad 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) 

Výkon:

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

Vysvetlenie:

Doviezli sme poschodie () funkcia z matematika modul vo vyššie uvedenom úryvku kódu. Potom sme deklarovali dve premenné ako a = 17 a b = 5 . Potom sme použili poschodie () funkcia, delená a podľa b a uložili ju do premennej c. Potom sme vypočítali hodnotu podlahy pomocou // operátor a uloží hodnotu do novej premennej, d . Nakoniec sme obe hodnoty vytlačili a porovnali.

Vykonávanie delenia podlahy so zápornými číslami

Delenie podlahy môžeme vykonať aj pomocou záporných čísel.

V prípade záporných čísel je výsledná hodnota stále zaokrúhlená nadol na najbližšie celé číslo. Niektorí sa môžu zmiasť zaokrúhlením záporného čísla smerom nadol. napr. -23 je položená nadol -3 .

Uvažujme príklad demonštrujúci rozdelenie podlahy zápornými číslami.

Príklad 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) 

Výkon:

 Floor Division: -10 // 4 = -3 

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme deklarovali dve premenné ako a = -10 a b = 4 . Potom sme použili // operátor na výpočet minimálnej hodnoty a jej uloženie do novej premennej, c . Nakoniec sme vytlačili hodnotu pre používateľa.

Pri pravidelnom delení, -10/4 by sa vrátil -2.5 ; pri delení podľa podlahy sa však toto číslo zaokrúhli nadol na najbližšie záporné celé číslo, t. j. na -3 .

Vykonávanie divízie podlahy s plavákmi

V Pythone môžeme vykonať aj delenie podlahy s plavákmi. Keď sa podlaha delí, výsledkom je plavák predstavujúci najbližšie celé číslo.

Uvažujme nasledujúci príklad, ktorý demonštruje rozdelenie podlahy pomocou plavákov.

Príklad 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) 

Výkon:

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

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme inicializovali dva zoznamy. Potom sme použili pre -loop na iteráciu cez prvky týchto zoznamov, vypočítal hodnoty pre každú operáciu delenia poschodia a vytlačil výsledky pre používateľov.

V dôsledku toho môžeme pozorovať, že operácia delenia podlahy sa vykonáva pomocou floatov a float s celým číslom vráti hodnotu zaokrúhlenú nadol na najbližšie celé číslo reprezentované ako floats.

Floor Division a Modulo v Pythone

V matematike je modulo pojem spojený hlavne s delením podlahy. Môžeme tiež povedať, že modulo znamená zvyšok pri delení medzi dve čísla. Inými slovami, môžeme s ním spočítať počet zvyškov.

Modulo môžeme vypočítať v Pythone pomocou percenta ( % ) operátor.

Uvažujme o príklade ilustrujúcom vzťah medzi delením poschodia a modulom v Pythone.

Príklad 7.1:

Vzhľadom na 13 cukríkov a 4 jedákov môžeme pomocou rozdelenia podlahy vypočítať počet cukríkov, ktoré dostane každý jedlík.

kód:

 # 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) 

Výkon:

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

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme deklarovali niektoré premenné označujúce počet cukríkov a jedákov. Potom sme použili // operátora, aby vykonal rozdelenie podlahy s cieľom vypočítať počet cukríkov, ktoré každý jedlík dostane. Tieto hodnoty sme potom vytlačili pre používateľa.

Vypočítajme teraz celkový počet cukríkov zdieľaných v skupine. Toto nie je veľmi dôležité.

Príklad 7.2:

Počet cukríkov na osobu vynásobíme počtom jedákov.

kód:

 # 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) 

Výkon:

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

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme vypočítali celkový počet cukríkov zdieľaných v skupine vynásobením počtu cukríkov na osobu počtom jedákov a vytlačili výslednú hodnotu pre používateľov.

Celkový počet zdieľaných plných cukríkov je 12 . Celkový počet cukríkov je však 13 . Toto vyhlásenie znamená, že jeden cukrík zostane a nebude sa jesť.

Vyššie uvedený príklad popisuje jeden spôsob výpočtu počtu zvyškov. Ak nás však zaujíma len počet zvyškov, vieme si ho priamo vypočítať pomocou modulo.

Príklad 7.3:

Aký je počet zvyšných cukríkov vzhľadom na 13 cukríkov a 4 jedákov?

kód:

 # 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) 

Výkon:

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

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme deklarovali premenné uchovávajúce hodnotu cukríky a jedličky. Potom sme vypočítali počet zostávajúcich cukríkov pomocou % operátor označujúci operáciu modulo. Nakoniec sme pre používateľov vytlačili niektoré vyhlásenia a výsledné hodnoty. V dôsledku toho môžeme vidieť, že zvyšné cukríky sú 1 .

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

V Pythone sú delenie podlahy a modulo spojené podľa nasledujúcej rovnice:

Kde:

    aje dividenda.bje deliteľ.

Overme si napríklad, že platí vyššie uvedená rovnica s 13 cukríkmi a 4 jedlíkmi.

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

Takto sme pochopili koncepty delenia poschodí a modulo v Pythone. Teraz sa pozrieme na nejakú vstavanú funkciu, ktorá počíta oboje.

Pochopenie funkcie divmod() v Pythone

Python ponúka vstavanú funkciu tzv divmod() čo nám umožňuje vypočítať delenie podlahy aj modulo medzi dvoma číselnými hodnotami.

Syntax pre divmod() funkcia je zobrazená nižšie:

Syntax:

 res = divmod(var_1, var_2) 

Kde:

    resje výsledok ako tuple. Táto n-tica má výsledok delenia podlahy a zvyšok daný modulom.was_1je dividenda.was_2je deliteľ.

Uvažujme teraz o nasledujúcom príklade, ktorý demonštruje divmod() funkciu.

Príklad 8:

Pri počte 13 cukríkov a 4 jedlíkoch, koľko plných cukríkov dostane každý jedlík a koľko cukríkov zostáva?

kód:

 # 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) 

Výkon:

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

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme deklarovali niektoré premenné. Použili sme divmod() funkcia na výpočet hodnoty delenia podlahy a modulo pre dané premenné. Tieto hodnoty sme potom vytlačili pre používateľov.

Pochopenie priority divízie podlahy

V Pythone, operátor poschodovej divízie // má podobnú úroveň priority ako násobenie ( * ), rozdelenie ( / ) a modulo ( % ).

Z tohto tvrdenia vyplýva, že ak násobíme a potom delíme podlažia, najskôr sa dosiahne násobenie a potom delenie podlažia a naopak.

Ak však napríklad odpočítame dve čísla a potom vykonáme rozdelenie poschodia, operácia rozdelenia poschodia pripraví cestu.

Uvažujme o príklade, ktorý demonštruje to isté.

Príklad 9.1:

 # 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) 

Výkon:

 3 * 5 // 6 - 7 = -5 

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme deklarovali niektoré premenné ako a = 3, b = 5, c = 6 , a d = 7 . Potom sme vykonali operáciu a uložili výslednú hodnotu do novej premennej, to je . Nakoniec sme túto hodnotu vytlačili pre používateľov.

Aby sme pochopili, ako sa tento výsledok počíta, môžeme okolo výrazov vložiť zátvorky v správnom poradí.

Nižšie uvedený príklad zobrazuje to isté:

Príklad 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) 

Výkon:

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

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme deklarovali niektoré premenné ako a = 3, b = 5, c = 6 , a d = 7 . Potom sme vykonali rovnakú operáciu, ale so zátvorkami a výslednú hodnotu sme uložili do novej premennej, to je . Nakoniec sme túto hodnotu vytlačili pre používateľov.

Ako môžeme pozorovať, dostaneme podobný výsledok ako v predchádzajúcom príklade, čo znamená, že poradie výpočtu je:

Násobenie → Delenie podlahy → Odčítanie

Tu je postupný výpočet vyššie uvedeného:

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

Správne sme pochopili rozdelenie poschodí a jeho použitie v programovacom jazyku Python.

Nakoniec sa pozrieme na pokročilý prípad použitia pre rozdelenie podlahy. V nasledujúcom prípade, pokročilé neznamená ťažké; je to však dosť nezvyčajné.

Pochopenie predbežného použitia divízie podlahy

Niektorí z nás si možno uvedomujú, že v Pythone môžeme vytvárať aj vlastné objekty podporujúce operáciu delenia poschodí. To je možné pomocou špeciálnej metódy, známej ako __floordiv__() .

Metóda __floordiv__() v Pythone

Operácia delenia podlahy v Pythone sa používa na rozdelenie dvoch čísel a zaokrúhlenie výsledku nadol na najbližšie celé číslo.

Funguje to pod kapotou, pretože číselný typ implementuje špeciálnu metódu tzv __floordiv__() . Potom, kedykoľvek zavoláme // operátor medzi dvoma objektmi, __floordiv__() zavolá sa metóda.

V Pythone môžeme tiež priamo volať __floordiv__() metóda. Pozrime sa na nasledujúci príklad, ktorý to demonštruje:

Príklad 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) 

Výkon:

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

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme deklarovali dve premenné ako a = 31 a b = 7 . Potom sme vykonali rozdelenie podlahy pomocou // operátor a __floordiv__() a uložil ich výsledné hodnoty do dvoch premenných, c a d . Nakoniec sme pre používateľov vytlačili výsledky.

Z vyššie uvedeného výstupu môžeme pozorovať, že oba výrazy priniesli rovnaký výsledok. Je to preto, že prvý výraz sa skonvertuje na druhý výraz. Inými slovami, tieto hovory sú navzájom ekvivalentné.

Teraz to bude zaujímavé. Uvažujme o nasledujúcom príklade.

Príklad 11.1:

V nasledujúcom príklade vytvoríme vlastnú triedu reprezentujúcu celočíselné hodnoty ako reťazce. Potom vytvoríme dva objekty tejto vlastnej triedy a vykonáme na nich operáciu delenia podlahy.

kód:

 # 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) 

Výkon:

 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' 

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme definovali triedu ako IntStr ktorý predstavuje celočíselné hodnoty ako reťazce. Potom sme vytvorili dva objekty IntStr trieda. Nakoniec máme podlahu rozdeliť intOne objekt podľa intTwo objekt a pokúsili sa vytlačiť výsledok.

Vyššie uvedený výstup však naznačuje a TypeError . Toto chybové hlásenie to prezrádza IntStr objekty nepodporujú delenie podlahy. Táto chyba dáva zmysel. Ako by mal vlastný typ poňatia o objektoch reťazcov rozdeľujúcich podlahu?

Ako sa však ukázalo, dokážeme IntStr objektová podpora členenie podlahy.

Predtým sme sa učili kedykoľvek zavoláme // operátora, voláme __floordiv__() metóda. Táto metóda sa vykonáva niekde v triede objektu. Napríklad objekty int podporujú rozdelenie podlahy, pretože trieda int použila triedu __floordiv__() metóda.

Tieto špeciálne metódy, napr __floordiv__() , majú niečo úžasné spoločné, že tieto metódy môžeme implementovať do vlastnej triedy. Inými slovami, môžeme zabezpečiť, aby vlastné objekty podporovali rozdelenie podlahy v programovacom jazyku Python.

Uvažujme teraz o nasledujúcom príklade, ktorý demonštruje to isté.

Príklad 11.2:

V nasledujúcom príklade implementujeme __floordiv__() metóda do IntStr trieda. Potom vytvoríme dva objekty tejto vlastnej triedy a vykonáme na nich operáciu delenia podlahy.

kód:

 # 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) 

Výkon:

 17 // 4 = 4 

Vysvetlenie:

Vo vyššie uvedenom úryvku kódu sme definovali triedu ako IntStr ktorý predstavuje celočíselné hodnoty ako reťazce. Implementovali sme tiež __floordiv__() metóda v rámci tejto triedy. Táto metóda prijíma hodnotu číselného reťazca zo seba a iného objektu. Tieto hodnoty reťazca sme previedli na celé čísla a vykonali sme medzi nimi rozdelenie podľa podlahy. Potom sme výsledok skonvertovali späť na reťazec a vytvorili nový IntStr objekt. Vytvorili sme inštanciu IntStr triedy s dvoma objektmi a medzi nimi vykonal operáciu delenia podlahy. Nakoniec sme pre používateľov vytlačili výslednú hodnotu.

Teraz, keď sme úspešne pochopili metódu vytvorenia vlastnej triedy na podporu delenia podlahy.

Ak sa nám nepáči, že musíme zavolať objekt.val aby sme videli výsledok, môžeme implementovať __str__() metóda, ktorá priamo vracia hodnotu pri tlači.

Pozrime sa na nasledujúci príklad, ktorý demonštruje to isté.

Príklad 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) 

Výkon:

 17 // 4 = 4 

Vysvetlenie:

čísla v abecede

Vo vyššie uvedenom úryvku kódu sme definovali triedu ako IntStr ktorý predstavuje celočíselné hodnoty ako reťazce. Implementovali sme tiež __floordiv__() metóda v rámci tejto triedy. Potom sme definovali __str__() metóda, ktorá priamo vracia hodnoty reťazca počas tlače. Vytvorili sme inštanciu IntStr triedy s dvoma objektmi a medzi nimi vykonal operáciu delenia podlahy. Nakoniec sme pre používateľov vytlačili výslednú hodnotu.