logo

Razdelitev tal v Pythonu

V naslednji vadnici bomo spoznali operacijo Floor Division z uporabo programskega jezika Python.

Toda preden začnemo, naj na kratko razumemo, kaj je razdelitev nadstropja.

Razumevanje razdelitve Floor

Tlorisno deljenje je običajna operacija deljenja, le da vrne največje možno celo število. To celo število je lahko manjše od običajnega izhoda deljenja ali pa mu je enako.

Funkcija tal je v matematičnem smislu označena s simbolom ⌊ ⌋.

Razumejmo zdaj delovanje operacije delitve tal. na primer

⌊36/5⌋

obj v Javi

Korak 1: Najprej izvedba delitve. Razdelili se bomo 36 avtor 5 .

36 ÷ 5 = 7,2

2. korak: Zdaj bomo izvedli funkcijo tal na vrednosti, ki jo dobimo po deljenju, tj. 7.2 .

⌊7,2⌋=7

Kot rezultat dobimo 7 kar je spodnja vrednost 7.2 . Zato deljenje po tleh pomeni deljenje in zaokroževanje navzdol na najbližje celo število.

Različni programski jeziki ponujajo posebno vgrajeno funkcijo ali operator za izračun razdelitve tal. Nekateri primeri so lahko:

  1. Lahko uporabimo nadstropje() metodo v programskem jeziku C++.
  2. Lahko uporabimo nadstropje() metodo v programskem jeziku Java.
  3. Lahko uporabimo // operator v programskem jeziku Python.

Vendar bomo razpravljali samo o uporabi operacije delitve tal v Pythonu s pomočjo operator z dvojno poševnico nazaj (//). .

Razumevanje razdelitve tal z uporabo Pythona

V programskem jeziku Python se tlorisno deljenje uporablja za deljenje dveh števil in rezultat zaokroži navzdol na najbližje celo število.

Preden se poglobimo v koncept talne delitve, se na kratko spomnimo na pomen delitve in delovanje math.floor() funkcijo v Pythonu.

Izvajanje navadnega deljenja v Pythonu

Dve števili lahko delimo s poševnico nazaj ( / ) operator deljenja v Pythonu. Oglejmo si naslednji primer, ki dokazuje isto:

Primer 1:

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

Izhod:

 13 / 4 = 3.25 

Pojasnilo:

V zgornjem delčku kode smo definirali dve spremenljivki kot a = 13 in b = 4 . Nato smo izvedli operacijo deljenja z uporabo poševnice nazaj ( / ) operator deljenja in dobljeno vrednost shranil v novo spremenljivko, c . Končno smo natisnili vrednost c .

Kot lahko vidimo, deljenje v Pythonu deluje na enak način kot deljenje v matematiki.

Razumevanje funkcije math.floor() v Pythonu

V Pythonu je vgrajen matematični modul, ki je sestavljen iz različnih uporabnih matematičnih pripomočkov za izračune.

Ena taka vgrajena funkcija matematika modul je math.floor() funkcijo. Ta funkcija sprejme številski vnos in vrne spodnjo vrednost tako, da jo zaokroži navzdol na najbližje celo število.

Oglejmo si naslednji primer, ki dokazuje isto:

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

Izhod:

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

Pojasnilo:

V zgornjem delčku kode smo uvozili nadstropje() funkcijo od matematika modul. Nato smo deklarirali dve spremenljivki kot a = 5,34 in b = -5,34 . Nato smo uporabili nadstropje() funkcija za izračun spodnjih vrednosti obeh spremenljivk in njihovo shranjevanje v nove spremenljivke, c in d . Končno smo natisnili rezultate za uporabnike.

Zdaj, ko smo razumeli koncepte deljenja in talnih števil v Pythonu. Pojdimo k podrobnostim, povezanim z delitvijo tal v Pythonu.

Izvedba Floor Division v Pythonu

Tlorisno deljenje je operacija v Pythonu, ki nam omogoča deljenje dveh števil in zaokroži dobljeno vrednost navzdol na najbližje celo število. Talna delitev se pojavi skozi operator z dvojno poševnico nazaj (//). . Sintaksa za isto je prikazana spodaj:

Sintaksa:

 res = var_1 // var_2 

Kje:

    resje rezultantna vrednost razdelitve talwas_1je dividendawas_2je delitelj

Delitev tal si lahko predstavljamo kot običajno delitev v kombinaciji z math.floor() klic funkcije.

Opomba: Delitev nadstropja lahko poljubno število zaokroži navzdol na najbližje celo število. Na primer, 3,99 bo še vedno zaokroženo navzdol na 3.

Oglejmo si zdaj primer, ki prikazuje delovanje razdelitve tal.

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

Izhod:

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

Pojasnilo:

V zgornjem delčku kode smo dve spremenljivki razglasili kot a = 13 in b = 5 . Nato smo uporabili // operater za izračun vrednosti delitve dna in shrani vrednost dna v novo spremenljivko, c . Nato smo izvedli običajno deljenje z uporabo / in shrani vrednost v drugo spremenljivko, d . Na koncu smo oba rezultata natisnili in ju primerjali.

Zdaj pa si oglejmo še en primer z uporabo math.floor() funkcijo.

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

Izhod:

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

Pojasnilo:

Uvozili smo nadstropje() funkcijo od matematika modul v zgornjem delčku kode. Nato smo deklarirali dve spremenljivki kot a = 17 in b = 5 . Nato smo uporabili nadstropje() funkcija, razdeljena a avtor b , in ga shranil v spremenljivko c. Nato smo izračunali talno vrednost z uporabo // in shrani vrednost v novo spremenljivko, d . Končno smo natisnili obe vrednosti in ju primerjali.

Izvajanje etažnega deljenja z negativnimi števili

Tlorisno deljenje lahko izvedemo tudi z negativnimi števili.

V primeru negativnih števil je rezultanta še vedno zaokrožena navzdol na najbližje celo število. Nekateri bi se lahko zmedli, če bi zaokroževanje negativnega števila pomenilo odmik od nič. Na primer, -23 je spuščen do -3 .

Oglejmo si primer, ki prikazuje razdelitev tal z negativnimi števili.

kako pretvoriti char v niz

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

Izhod:

 Floor Division: -10 // 4 = -3 

Pojasnilo:

V zgornjem delčku kode smo dve spremenljivki razglasili kot a = -10 in b = 4 . Nato smo uporabili // operater izračuna najnižjo vrednost in jo shrani v novo spremenljivko, c . Končno smo natisnili vrednost za uporabnika.

Z redno delitvijo, -10/4 bi se vrnil -2,5 ; pri etažnem deljenju pa se to število zaokroži navzdol na najbližje negativno celo število, tj. -3 .

Izvedba parterne delitve z lebdi

V Pythonu lahko izvedemo tudi razdelitev tal z lebdečimi elementi. Pri plovcih, ki delijo tla, je rezultat lebdeč, ki predstavlja najbližje celo število.

Oglejmo si naslednji primer, ki prikazuje razdelitev tal z uporabo plovcev.

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

Izhod:

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

Pojasnilo:

V zgornjem delčku kode smo inicializirali dva seznama. Nato smo uporabili za -loop za ponavljanje elementov teh seznamov, izračunavanje vrednosti za vsako operacijo delitve nadstropij in tiskanje rezultatov za uporabnike.

Posledično lahko opazimo, da se operacija etažnega deljenja izvaja z uporabo lebdečih vrednosti in float s celim številom vrne vrednost, zaokroženo navzdol na najbližje celo število, predstavljeno kot lebdeče.

Floor Division in Modulo v Pythonu

V matematiki je modulo koncept, ki je v glavnem povezan z delitvijo tal. Lahko tudi rečemo, da modulo pomeni ostanek pri deljenju med dvema številoma. Z drugimi besedami, z njim lahko preštejemo število ostankov.

V Pythonu lahko izračunamo modulo z uporabo odstotka ( % ) operater.

Oglejmo si primer, ki ponazarja razmerje med etažno delitvijo in modulom v Pythonu.

Primer 7.1:

Glede na 13 bonbonov in 4 jedce lahko izračunamo število bonbonov, ki jih dobi vsak jedec s pomočjo talne delitve.

Koda:

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

Izhod:

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

Pojasnilo:

V zgornjem delčku kode smo deklarirali nekaj spremenljivk, ki označujejo število bonbonov in jedcev. Nato smo uporabili // operater, da izvede razdelitev tal, da izračuna število bonbonov, ki jih dobi vsak jedec. Te vrednosti smo nato natisnili za uporabnika.

Zdaj izračunajmo skupno število bonbonov, ki si jih razdeli skupina. To ni zelo pomembno.

Primer 7.2:

Število bonbonov na osebo bomo pomnožili s številom jedcev.

Koda:

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

Izhod:

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

Pojasnilo:

V zgornjem delčku kode smo izračunali skupno število bonbonov, ki si jih deli skupina, tako da smo število bonbonov na osebo pomnožili s številom jedcev in natisnili dobljeno vrednost za uporabnike.

Skupno število polnih bonbonov v skupni rabi je 12 . Vendar je skupno število bonbonov 13 . Ta izjava namiguje, da bo en bonbon ostal in ga ne bomo pojedli.

Zgornji primer opisuje enega od načinov za izračun števila ostankov. Če pa nas zanima le število ostankov, ga lahko neposredno izračunamo s pomočjo modula.

Primer 7.3:

Kolikšno je število preostalih bonbonov, če imamo 13 bonbonov in 4 jedce?

Koda:

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

Izhod:

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

Pojasnilo:

V zgornjem delčku kode smo deklarirali spremenljivki, ki shranjujeta vrednost candies in eaters. Nato smo izračunali število ostankov bonbonov z uporabo % operator, ki označuje operacijo modulo. Končno smo natisnili nekaj izjav in posledičnih vrednosti za uporabnike. Posledično lahko vidimo, da so ostanki sladkarij 1 .

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

V Pythonu sta razdelitev tal in modul povezana z naslednjo enačbo:

Kje:

    aje dividenda.bje delitelj.

Na primer, preverimo, ali zgornja enačba velja za 13 bonbonov in 4 jedce.

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

Tako smo razumeli koncepte delitve tal in modula v Pythonu. Zdaj si bomo ogledali neko vgrajeno funkcijo, ki izračuna oboje.

Razumevanje funkcije divmod() v Pythonu

Python ponuja vgrajeno funkcijo, imenovano divmod() ki nam omogoča, da izračunamo talno deljenje in modulo med dvema številčnima vrednostma.

Sintaksa za divmod() funkcija je prikazana spodaj:

Sintaksa:

 res = divmod(var_1, var_2) 

Kje:

    resje rezultat kot tuple. Ta tuple ima rezultat deljenja tal in ostanek, ki ga daje modulo.was_1je dividenda.was_2je delitelj.

Oglejmo si zdaj naslednji primer, ki prikazuje divmod() funkcijo.

Primer 8:

Glede na 13 bonbonov in 4 jedce, koliko polnih bonbonov dobi vsak jedec in koliko bonbonov ostane?

Koda:

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

Izhod:

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

Pojasnilo:

V zgornjem delčku kode smo deklarirali nekaj spremenljivk. Uporabili smo divmod() funkcijo za izračun vrednosti deljenja tal in modula za podane spremenljivke. Te vrednosti smo nato natisnili za uporabnike.

Razumevanje prednosti nadstropja

V Pythonu, operater razdelitve tal // ima podobno stopnjo prednosti kot množenje ( * ), delitev ( / ), in modulo ( % ).

Ta izjava implicira, da če množimo in nato delimo po tleh, je najprej doseženo množenje, nato pa delitev po tleh in obratno.

Če pa na primer odštejemo dve števili in nato izvedemo deljenje po tleh, bo operacija deljenja po tleh utrla pot.

Oglejmo si primer, ki dokazuje isto.

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

Izhod:

 3 * 5 // 6 - 7 = -5 

Pojasnilo:

V zgornjem delčku kode smo nekatere spremenljivke razglasili kot a = 3, b = 5, c = 6 , in d = 7 . Nato smo izvedli operacijo in shranili nastalo vrednost v novo spremenljivko, je . Končno smo natisnili to vrednost za uporabnike.

Da bi razumeli, kako se ta rezultat izračuna, lahko vstavimo oklepaje okoli izrazov v pravilnem prednostnem vrstnem redu.

Spodnji primer prikazuje isto:

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

Izhod:

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

Pojasnilo:

charat v nizu

V zgornjem delčku kode smo nekatere spremenljivke razglasili kot a = 3, b = 5, c = 6 , in d = 7 . Nato smo izvedli isto operacijo, vendar z oklepaji in shranili rezultantno vrednost v novo spremenljivko, je . Končno smo natisnili to vrednost za uporabnike.

Kot lahko opazimo, dobimo podoben rezultat kot v prejšnjem primeru, kar pomeni, da je vrstni red izračuna:

Množenje → Talno deljenje → Odštevanje

Tukaj je postopni izračun zgornjega:

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

Pravilno smo razumeli etažno delitev in njeno uporabo v programskem jeziku Python.

Nazadnje si bomo ogledali napreden primer uporabe za razdelitev tal. V naslednjem primeru napredno ne pomeni težko; vendar je precej nenavaden.

Razumevanje vnaprejšnje uporabe razdelitve tal

Nekateri od nas morda vemo, da lahko izdelamo tudi objekte po meri, ki podpirajo operacijo delitve tal v Pythonu. To je mogoče s posebno metodo, imenovano __floordiv__() .

Metoda __floordiv__() v Pythonu

Operacija talnega deljenja v Pythonu se uporablja za deljenje dveh števil in zaokroži rezultat navzdol na najbližje celo število.

Deluje pod pokrovom, ker numerični tip izvaja posebno metodo, imenovano __floordiv__() . Potem, ko pokličemo // operator med dvema objektoma, the __floordiv__() metoda se kliče.

V Pythonu lahko tudi neposredno pokličemo __floordiv__() metoda. Oglejmo si naslednji primer, ki dokazuje isto:

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

Izhod:

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

Pojasnilo:

V zgornjem delčku kode smo dve spremenljivki razglasili kot a = 31 in b = 7 . Nato smo s pomočjo // operater in __floordiv__() metodo in njuni rezultantni vrednosti shranili v dve spremenljivki, c in d . Končno smo natisnili rezultate za uporabnike.

Iz zgoraj prikazanega rezultata lahko opazimo, da sta oba izraza dala enak rezultat. To je zato, ker se prvi izraz pretvori v drugi izraz. Z drugimi besedami, ti klici so enakovredni drug drugemu.

Zdaj bodo stvari postale zanimive. Poglejmo naslednji primer.

Primer 11.1:

V naslednjem primeru bomo ustvarili razred po meri, ki predstavlja cele vrednosti kot nize. Nato bomo ustvarili dva predmeta tega razreda po meri in na njima izvedli operacijo delitve tal.

Koda:

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

Izhod:

 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' 

Pojasnilo:

V zgornjem delčku kode smo definirali razred kot IntStr ki predstavlja celoštevilske vrednosti kot nize. Nato smo ustvarili dva predmeta IntStr razred. Končno smo razdelili tla intOne objekt s strani intTwo predmet in poskusil natisniti rezultat.

Vendar pa zgornji rezultat kaže a TypeError . To sporočilo o napaki to razkriva IntStr objekti ne podpirajo etažne delitve. Ta napaka je smiselna. Kako bi imel tip po meri kakršenkoli namig o predmetih nizov, ki ločujejo tla?

Vendar, kot se je izkazalo, lahko naredimo IntStr delitev podpornega objekta.

Prej smo se naučili, kdaj pokličemo // operaterja, pokličemo __floordiv__() metoda. Ta metoda se izvede nekje v razredu objekta. Objekti int na primer podpirajo delitev tal, ker je razred int uporabil __floordiv__() metoda.

Te posebne metode, npr __floordiv__() , imajo nekaj neverjetnega skupnega, da lahko te metode implementiramo v razred po meri. Z drugimi besedami, lahko naredimo, da objekti po meri podpirajo razdelitev tal v programskem jeziku Python.

Oglejmo si zdaj naslednji primer, ki dokazuje isto.

Primer 11.2:

V naslednjem primeru bomo implementirali __floordiv__() metoda v IntStr razred. Nato bomo ustvarili dva predmeta tega razreda po meri in na njima izvedli operacijo delitve tal.

Koda:

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

Izhod:

 17 // 4 = 4 

Pojasnilo:

V zgornjem delčku kode smo definirali razred kot IntStr ki predstavlja celoštevilske vrednosti kot nize. Izvedli smo tudi __floordiv__() metoda znotraj tega razreda. Ta metoda sprejme vrednost številskega niza od sebe in drugega predmeta. Te nizovne vrednosti smo pretvorili v cela števila in med njimi izvedli etažno deljenje. Nato smo rezultat pretvorili nazaj v niz in ustvarili novega IntStr predmet. Instancirali smo IntStr razreda z dvema predmetoma in med njima izvedla operacijo delitve tal. Končno smo natisnili rezultat za uporabnike.

Zdaj, ko uspešno razumemo metodo izdelave razreda po meri za podporo delitve tal.

Če nam ni všeč dejstvo, da moramo poklicati objekt.val da vidimo rezultat, lahko implementiramo __str__() metoda, ki neposredno vrne vrednost med tiskanjem.

Oglejmo si naslednji primer, ki dokazuje isto.

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

Izhod:

 17 // 4 = 4 

Pojasnilo:

V zgornjem delčku kode smo definirali razred kot IntStr ki predstavlja celoštevilske vrednosti kot nize. Izvedli smo tudi __floordiv__() metoda znotraj tega razreda. Nato smo definirali __str__() metoda, ki med tiskanjem neposredno vrne vrednosti niza. Instancirali smo IntStr razreda z dvema predmetoma in med njima izvedla operacijo delitve tal. Končno smo natisnili rezultat za uporabnike.