logo

Floor Division v Pythonu

V následujícím tutoriálu se seznámíme s operací Floor Division pomocí programovacího jazyka Python.

Než však začneme, stručně si porozuměme, co je dělení podlah.

Pochopení rozdělení podlahy

Dělení podlaží je normální operace dělení, kromě toho, že vrací největší možné celé číslo. Toto celé číslo může být buď menší než výstup normálního dělení, nebo se mu může rovnat.

Funkce podlahy je matematicky označena symbolem ⌊ ⌋.

Pojďme nyní pochopit fungování operace Floor division. Například,

⌊36/5⌋

Krok 1: Nejprve proveďte rozdělení. Rozdělíme se 36 podle 5 .

36 ÷ 5 = 7,2

Krok 2: Nyní provedeme spodní funkci na hodnotě, kterou získáme po dělení, tj. 7.2 .

⌊7,2⌋=7

V důsledku toho dostáváme 7 což je minimální hodnota 7.2 . Podlahové dělení tedy znamená dělení a zaokrouhlení dolů na nejbližší celé číslo.

Různé programovací jazyky nabízejí konkrétní vestavěnou funkci nebo operátor pro výpočet rozdělení podlaží. Některé příklady mohou být:

  1. Můžeme použít podlaha() metoda v programovacím jazyce C++.
  2. Můžeme použít podlaha() metoda v programovacím jazyce Java.
  3. Můžeme použít // operátor v programovacím jazyce Python.

Budeme však diskutovat pouze o použití operace rozdělení podlahy v Pythonu s pomocí operátor dvojitého zpětného lomítka (//). .

Pochopení dělení podlahy pomocí Pythonu

V programovacím jazyce Python se dělení podlahy používá k dělení dvou čísel a zaokrouhlování výsledku dolů na nejbližší celé číslo.

Než se ponoříme hlouběji do pojmu dělení podlahy, připomeňme si krátce význam dělení a fungování math.floor() funkce v Pythonu.

Provádění pravidelného dělení v Pythonu

Dvě čísla můžeme rozdělit pomocí zpětného lomítka ( / ) operátor divize v Pythonu. Podívejme se na následující příklad demonstrující totéž:

Příklad 1:

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

Výstup:

 13 / 4 = 3.25 

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme definovali dvě proměnné jako a = 13 a b = 4 . Poté jsme provedli operaci rozdělení pomocí zpětného lomítka ( / ) operátor dělení a uloží výslednou hodnotu do nové proměnné, C . Konečně jsme vytiskli hodnotu C .

Jak vidíme, dělení v Pythonu funguje stejně jako dělení v matematice.

Pochopení funkce math.floor() v Pythonu

V Pythonu je vestavěný matematický modul, který se skládá z různých užitečných matematických nástrojů pro výpočty.

Jedna taková vestavěná funkce matematika modul je math.floor() funkce. Tato funkce přijímá číselný vstup a vrací minimální hodnotu zaokrouhlením dolů na nejbližší celé číslo.

Podívejme se na následující příklad demonstrující totéž:

Pří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ýstup:

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

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme importovali podlaha() funkce z matematika modul. Poté jsme deklarovali dvě proměnné jako a = 5,34 a b = -5,34 . Poté jsme použili podlaha() funkce pro výpočet minimálních hodnot obou proměnných a jejich uložení do nových proměnných, C a d . Konečně jsme uživatelům vytiskli výsledky.

Nyní, když jsme pochopili koncepty dělení a spodních čísel v Pythonu. Pojďme k detailům spojeným s dělením podlahy v Pythonu.

Provádění Floor Division v Pythonu

Podlahové dělení je operace v Pythonu, která nám umožňuje vydělit dvě čísla a zaokrouhlit výslednou hodnotu dolů na nejbližší celé číslo. K rozdělení podlahy dochází prostřednictvím operátor dvojitého zpětného lomítka (//). . Syntaxe pro totéž je uvedena níže:

Syntax:

 res = var_1 // var_2 

Kde:

    resje výsledná hodnota dělení podlahywas_1je dividendawas_2je dělitel

Podlahové dělení si můžeme představit jako pravidelné dělení kombinované s math.floor() volání funkce.

Poznámka: Dělení patra může zaokrouhlit libovolné číslo dolů na nejbližší celé číslo. Například 3,99 bude stále zaokrouhleno dolů na 3.

Podívejme se nyní na příklad demonstrující fungování dělení podlahy.

Pří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ýstup:

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

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme deklarovali dvě proměnné jako a = 13 a b = 5 . Poté jsme použili // operátor vypočítá hodnotu dělení podlahy a uloží hodnotu podlahy do nové proměnné, C . Poté jsme provedli pravidelné dělení pomocí / operátor a uložil hodnotu do jiné proměnné, d . Nakonec jsme oba výsledky vytiskli a porovnali.

Nyní se podívejme na další příklad pomocí math.floor() funkce.

Pří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ýstup:

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

Vysvětlení:

Dovezli jsme podlaha() funkce z matematika modul ve výše uvedeném úryvku kódu. Poté jsme deklarovali dvě proměnné jako a = 17 a b = 5 . Poté jsme použili podlaha() funkce, dělená A podle b a uložil ji do proměnné c. Potom jsme vypočítali hodnotu podlahy pomocí // operátor a uložil hodnotu do nové proměnné, d . Nakonec jsme obě hodnoty vytiskli a porovnali.

Provádění dělení podlahy se zápornými čísly

Můžeme také provést dělení podlahy pomocí záporných čísel.

V případě záporných čísel je výsledná hodnota stále zaokrouhlena dolů na nejbližší celé číslo. Někteří se mohou zmást, když zaokrouhlí záporné číslo dolů, znamená to, že se od nuly odchází. Například, -23 je pod podlahou -3 .

Uvažujme příklad demonstrující dělení podlahy zápornými čísly.

Pří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ýstup:

 Floor Division: -10 // 4 = -3 

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme deklarovali dvě proměnné jako a = -10 a b = 4 . Poté jsme použili // operátor vypočítat hodnotu podlahy a uložit ji do nové proměnné, C . Konečně jsme vytiskli hodnotu pro uživatele.

S pravidelným rozdělením, -10/4 by se vrátil -2.5 ; avšak s dělením podlahy je toto číslo zaokrouhleno dolů na nejbližší záporné celé číslo, tj. na -3 .

Provádění podlahové divize s plováky

V Pythonu můžeme také provádět dělení podlahy pomocí plovoucích. Když plovoucí dělení podlahy, výsledkem je plovák představující nejbližší celé číslo.

Uvažujme následující příklad demonstrující rozdělení podlahy pomocí plováků.

Pří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ýstup:

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

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme inicializovali dva seznamy. Poté jsme použili pro -loop pro iteraci prvků těchto seznamů, vypočítal hodnoty pro každou operaci rozdělení podlaží a vytiskl výsledky pro uživatele.

V důsledku toho můžeme pozorovat, že operace dělení podlahy se provádí pomocí floatů a float s celým číslem vrací hodnotu zaokrouhlenou dolů na nejbližší celé číslo reprezentované jako plovoucí.

Floor Division a Modulo v Pythonu

V matematice je modulo pojem spojený hlavně s dělením podlahy. Můžeme také říci, že modulo znamená zbytek v dělení mezi dvěma čísly. Jinými slovy, můžeme s ní počítat počet zbytků.

Můžeme vypočítat modulo v Pythonu pomocí procent ( % ) operátor.

Podívejme se na příklad ilustrující vztah mezi dělením podlaží a modulem v Pythonu.

Příklad 7.1:

Vzhledem k 13 bonbónům a 4 jedlíkům můžeme pomocí rozdělení podlahy vypočítat počet bonbónů, které každý jedlík dostane.

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ýstup:

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

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme deklarovali některé proměnné označující počet bonbónů a jedlíků. Poté jsme použili // operátora, aby provedl rozdělení podlahy, aby vypočítal počet bonbónů, které každý jedlík dostane. Tyto hodnoty jsme následně vytiskli pro uživatele.

Pojďme nyní vypočítat celkový počet bonbónů sdílených ve skupině. To není moc důležité.

Příklad 7.2:

Počet bonbónů na osobu vynásobíme počtem jedlíků.

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ýstup:

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

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme vypočítali celkový počet bonbónů sdílených ve skupině vynásobením počtu bonbónů na osobu počtem jedlíků a vytiskli výslednou hodnotu pro uživatele.

Celkový počet sdílených plných bonbonů je 12 . Celkový počet bonbónů je však 13 . Toto prohlášení znamená, že jeden bonbón zůstane a nebude se jíst.

algoritmus mergesort

Výše uvedený příklad popisuje jeden způsob výpočtu počtu zbytků. Pokud nás však zajímá pouze počet zbytků, můžeme si jej přímo spočítat pomocí modulo.

Příklad 7.3:

Vzhledem k 13 bonbónům a 4 jedlíkům, jaký je počet zbylých bonbonů?

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ýstup:

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

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme deklarovali proměnné ukládající hodnotu cukroví a jedlíci. Poté jsme vypočítali počet zbylých bonbónů pomocí % operátor označující operaci modulo. Konečně jsme pro uživatele vytiskli několik výpisů a výsledných hodnot. Ve výsledku vidíme, že zbylé cukroví je 1 .

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

V Pythonu souvisí dělení podlahy a modulo pomocí následující rovnice:

Kde:

    Aje dividenda.bje dělitel.

Ověřte například, že platí výše uvedená rovnice s 13 bonbóny a 4 jedlíky.

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

Tak jsme pochopili koncepty dělení podlahy a modulo v Pythonu. Nyní se podíváme na nějakou vestavěnou funkci, která vypočítá obojí.

Pochopení funkce divmod() v Pythonu

Python nabízí vestavěnou funkci tzv divmod() což nám umožňuje vypočítat jak dělení podlahy, tak modulo mezi dvěma číselnými hodnotami.

Syntaxe pro divmod() funkce je zobrazena níže:

Syntax:

 res = divmod(var_1, var_2) 

Kde:

    resje výsledek jako n-tice. Tato n-tice má výsledek dělení podlahy a zbytek je dán modulem.was_1je dividenda.was_2je dělitel.

Podívejme se nyní na následující příklad, který demonstruje divmod() funkce.

Příklad 8:

Při 13 bonbonech a 4 jedlících, kolik plných bonbónů dostane každý jedlík a kolik bonbonů zbývá?

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ýstup:

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

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme deklarovali některé proměnné. Použili jsme divmod() funkce pro výpočet hodnoty dělení podlahy a modulo pro dané proměnné. Tyto hodnoty jsme následně vytiskli uživatelům.

Pochopení přednosti podlahové divize

V Pythonu, operátor podlahové divize // má podobnou úroveň priority jako násobení ( * ), divize ( / ) a modulo ( % ).

Z tohoto tvrzení vyplývá, že pokud vynásobíme a poté rozdělíme na podlahu, dosáhneme nejprve násobení a poté dělení podlahy a naopak.

Pokud však například odečteme dvě čísla a poté provedeme dělení podlaží, operace dělení podlaží připraví cestu.

Podívejme se na příklad demonstrující totéž.

Pří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ýstup:

 3 * 5 // 6 - 7 = -5 

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme deklarovali některé proměnné jako a = 3, b = 5, c = 6 , a d = 7 . Poté jsme provedli operaci a uložili výslednou hodnotu do nové proměnné, to je . Nakonec jsme tuto hodnotu vytiskli pro uživatele.

Abychom pochopili, jak se tento výsledek počítá, můžeme kolem výrazů vložit závorky ve správném pořadí priority.

Níže uvedený příklad ukazuje totéž:

Pří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ýstup:

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

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme deklarovali některé proměnné jako a = 3, b = 5, c = 6 , a d = 7 . Poté jsme provedli stejnou operaci, ale se závorkami a výslednou hodnotu uložili do nové proměnné, to je . Nakonec jsme tuto hodnotu vytiskli pro uživatele.

Jak můžeme pozorovat, dostáváme podobný výsledek jako v předchozím příkladu, což znamená, že pořadí výpočtu je:

Násobení → Dělení podlahy → Odečítání

Zde je postupný výpočet výše uvedeného:

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

Správně jsme pochopili rozdělení podlaží a jeho použití v programovacím jazyce Python.

Nakonec se podíváme na pokročilý případ použití pro rozdělení podlahy. V následujícím případě pokročilé neznamená těžké; je to však spíše neobvyklé.

Pochopení pokročilého použití podlahové divize

Někteří z nás si možná uvědomují, že v Pythonu můžeme také vytvářet vlastní objekty podporující operaci dělení podlaží. To je možné pomocí speciální metody známé jako __floordiv__() .

Metoda __floordiv__() v Pythonu

Operace dělení podlahy v Pythonu se používá k dělení dvou čísel a zaokrouhlení výsledku dolů na nejbližší celé číslo.

Funguje to pod kapotou, protože numerický typ implementuje speciální metodu tzv __floordiv__() . Poté, kdykoli zavoláme // operátor mezi dvěma objekty, __floordiv__() zavolá se metoda.

V Pythonu můžeme také přímo volat __floordiv__() metoda. Podívejme se na následující příklad demonstrující totéž:

Pří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ýstup:

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

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme deklarovali dvě proměnné jako a = 31 a b = 7 . Poté jsme provedli rozdělení podlahy pomocí // operátor a __floordiv__() a uložil jejich výsledné hodnoty do dvou proměnných, C a d . Konečně jsme uživatelům vytiskli výsledky.

Z výše uvedeného výstupu můžeme pozorovat, že oba výrazy přinesly stejný výsledek. Důvodem je, že první výraz se převede na druhý výraz. Jinými slovy, tato volání jsou si navzájem ekvivalentní.

Teď budou věci zajímavé. Uvažujme o následujícím příkladu.

Příklad 11.1:

V následujícím příkladu vytvoříme vlastní třídu reprezentující celočíselné hodnoty jako řetězce. Poté vytvoříme dva objekty této vlastní třídy a provedeme na nich operaci rozdělení 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ýstup:

 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' 

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme definovali třídu jako IntStr který představuje celočíselné hodnoty jako řetězce. Poté jsme vytvořili dva objekty IntStr třída. Konečně máme podlahu rozdělit intonovat objekt podle intTwo objekt a pokusili se vytisknout výsledek.

Výše uvedený výstup však ukazuje a TypeError . Tato chybová zpráva to prozrazuje IntStr objekty nepodporují dělení podlahy. Tato chyba dává smysl. Jak by měl vlastní typ nějaké vodítko k objektům řetězců rozdělujících podlahu?

Jak se však ukázalo, můžeme to udělat IntStr dělení podlaží podpory objektu.

Dříve jsme se učili, kdykoli zavoláme // operátora, nazýváme __floordiv__() metoda. Tato metoda se provádí někde ve třídě objektu. Například objekty int podporují dělení podlaží, protože třída int použila __floordiv__() metoda.

Tyto speciální metody, jako __floordiv__() , mají něco úžasného společného, ​​že tyto metody můžeme implementovat do vlastní třídy. Jinými slovy, můžeme zajistit, aby uživatelské objekty podporovaly rozdělení podlaží v programovacím jazyce Python.

Podívejme se nyní na následující příklad demonstrující totéž.

Příklad 11.2:

V následujícím příkladu budeme implementovat __floordiv__() metoda do IntStr třída. Poté vytvoříme dva objekty této vlastní třídy a provedeme na nich operaci rozdělení 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ýstup:

 17 // 4 = 4 

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme definovali třídu jako IntStr který představuje celočíselné hodnoty jako řetězce. Také jsme implementovali __floordiv__() metoda v této třídě. Tato metoda přijímá hodnotu číselného řetězce ze sebe a jiného objektu. Tyto hodnoty řetězce jsme převedli na celá čísla a provedli jsme mezi nimi dělení na podlahu. Výsledek jsme pak převedli zpět na řetězec a vytvořili nový IntStr objekt. Vytvořili jsme instanci IntStr třídy se dvěma objekty a provedl mezi nimi operaci rozdělení podlahy. Konečně jsme pro uživatele vytiskli výslednou hodnotu.

Nyní, když jsme úspěšně pochopili metodu vytvoření vlastní třídy pro podporu dělení podlahy.

Pokud se nám nelíbí, že musíme zavolat objekt.val abychom viděli výsledek, můžeme implementovat __str__() metoda, která přímo vrací hodnotu při tisku.

Uvažujme následující příklad demonstrující totéž.

Pří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ýstup:

 17 // 4 = 4 

Vysvětlení:

Ve výše uvedeném úryvku kódu jsme definovali třídu jako IntStr který představuje celočíselné hodnoty jako řetězce. Také jsme implementovali __floordiv__() metoda v této třídě. Poté jsme definovali __str__() metoda, která při tisku přímo vrací hodnoty řetězce. Vytvořili jsme instanci IntStr třídy se dvěma objekty a provedl mezi nimi operaci rozdělení podlahy. Konečně jsme pro uživatele vytiskli výslednou hodnotu.