logo

Флоор Дивисион у Питхон-у

У следећем туторијалу научићемо о операцији Флоор Дивисион користећи програмски језик Питхон.

Али пре него што почнемо, хајде да укратко разумемо шта је подела спрата.

Разумевање поделе спрата

Дељење спратова је нормална операција дељења, осим што враћа највећи могући цео број. Овај цео број може бити или мањи од нормалног излаза дељења или једнак њему.

Функција пода је математички означена симболом ⌊ ⌋.

Хајде да сада разумемо рад операције одељења спрата. На пример,

⌊36/5⌋

Корак 1: Прво извршите поделу. Поделићемо се 36 од стране 5 .

36 ÷ 5 = 7.2

Корак 2: Сада ћемо извршити функцију спрата на вредности коју добијемо након дељења, тј. 7.2 .

⌊7.2⌋=7

Као резултат, добијамо 7 што је подна вредност од 7.2 . Дакле, подела на спрат значи дељење и заокруживање на најближи цео број.

Различити програмски језици нуде одређену уграђену функцију или оператор за израчунавање етажне поделе. Неки примери могу бити:

  1. Можемо користити под() метода у програмском језику Ц++.
  2. Можемо користити под() метод у програмском језику Јава.
  3. Можемо користити // оператор у програмском језику Питхон.

Међутим, разговараћемо само о употреби операције поделе спратова у Питхон-у уз помоћ оператор двоструке обрнуте косе црте (//). .

Разумевање поделе спратова помоћу Питхон-а

У програмском језику Питхон, подела на спрат се користи за дељење два броја и заокружује резултат на најближи цео број.

Пре него што дубље заронимо у концепт поделе спрата, хајде да се укратко подсетимо значења поделе и деловања матх.флоор() функција у Питхон-у.

Извођење регуларне поделе у Питхон-у

Можемо поделити два броја користећи обрнуту косу црту ( / ) оператор дељења у Пајтону. Хајде да размотримо следећи пример који показује исто:

Пример 1:

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

Излаз:

 13 / 4 = 3.25 

Објашњење:

У горњем исечку кода дефинисали смо две променљиве као а = 13 и б = 4 . Затим смо извршили операцију дељења користећи обрнуту косу црту ( / ) оператор дељења и сместио резултујућу вредност у нову променљиву, ц . Коначно смо одштампали вредност ц .

Као што видимо, дељење у Питхон-у функционише на исти начин као што дељење функционише у математици.

Разумевање функције матх.флоор() у Питхон-у

У Питхон-у постоји уграђени математички модул који се састоји од различитих корисних математичких услужних програма за прорачуне.

Једна таква уграђена функција матх модул је матх.флоор() функција. Ова функција прихвата нумерички унос и враћа вредност пода заокружујући је на најближи цео број.

Хајде да размотримо следећи пример који показује исто:

Пример 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) 

Излаз:

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

Објашњење:

У горњем исечку кода увезли смо под() функција из матх модул. Затим смо декларисали две променљиве као а = 5,34 и б = -5,34 . Затим смо користили под() функција за израчунавање доњих вредности обе променљиве и складиштење у новим променљивим, ц и д . Коначно смо одштампали резултате за кориснике.

Сада када смо разумели концепте дељења и подних бројева у Питхон-у. Хајде да пређемо на детаље везане за поделу у Питхону.

Перформинг Флоор Дивисион у Питхон-у

Дељење спрата је операција у Питхон-у која нам омогућава да поделимо два броја и заокружи резултујућу вредност на најближи цео број. Подна подела се јавља кроз оператор двоструке обрнуте косе црте (//). . Синтакса за исто је приказана у наставку:

Синтакса:

 res = var_1 // var_2 

Где:

    ресје резултујућа вредност спратне поделевас_1је дивидендавас_2је делилац

Поделу на спрат можемо замислити као редовну поделу комбиновану са матх.флоор() позив функције.

Напомена: Подела спрата може заокружити било који број на најближи цео број. На пример, 3,99 ће и даље бити заокружено на 3.

Размотримо сада пример који показује рад поделе спрата.

Пример 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) 

Излаз:

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

Објашњење:

У горњем исечку кода, две променљиве смо декларисали као а = 13 и б = 5 . Затим смо користили // оператор да израчуна вредност спрата и похрани вредност пода у нову променљиву, ц . Затим смо извршили редовну поделу користећи / оператор и сачували вредност у другој променљивој, д . Коначно смо одштампали оба резултата и упоредили их.

стринг низа у ц

Сада, хајде да размотримо још један пример користећи матх.флоор() функција.

Пример 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) 

Излаз:

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

Објашњење:

јава тхров изузетак

Увезли смо под() функција из матх модул у горњем исечку кода. Затим смо декларисали две променљиве као а = 17 и б = 5 . Затим смо користили под() функција, подељена а од стране б , и сачувао га у променљивој ц. Затим смо израчунали вредност пода користећи // оператор и сачували вредност у новој променљивој, д . Коначно смо одштампали обе вредности и упоредили их.

Извођење спратне поделе са негативним бројевима

Такође можемо извршити поделу помоћу негативних бројева.

У случају негативних бројева, резултујућа вредност се и даље заокружује на најближи цео број. Неки би се могли збунити ако заокружите негативан број наниже, што значи да ћете отићи од нуле. На пример, -23 је спуштен до -3 .

Хајде да размотримо пример који показује дељење спрата негативним бројевима.

Пример 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) 

Излаз:

 Floor Division: -10 // 4 = -3 

Објашњење:

У горњем исечку кода, две променљиве смо декларисали као а = -10 и б = 4 . Затим смо користили // оператор да израчуна подну вредност и сачува је у новој променљивој, ц . Коначно смо одштампали вредност за корисника.

Са редовном поделом, -10/4 би се вратио -2.5 ; међутим, са поделом спрата, овај број се заокружује на најближи негативан цео број, тј. -3 .

Извођење спратне поделе са пловцима

Такође можемо да извршимо дељење пода са плутајућим у Питхон-у. Када подела на спрат плута, резултат је флоат који представља најближи цео број.

Размотримо следећи пример који демонстрира поделу помоћу пловака.

Пример 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) 

Излаз:

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

Објашњење:

У горњем исечку кода иницијализовали смо две листе. Затим смо користили за -петља за понављање кроз елементе ових листа, израчунавање вредности за сваку операцију дељења спрата и штампање резултата за кориснике.

Као резултат тога, можемо приметити да се операција дељења спрата изводи помоћу флоат-а и флоат са целим бројем враћа вредност заокружујућу на најближи цео број представљен као флоат.

Флоор Дивисион и Модуло у Питхон-у

У математици, модуло је концепт који се углавном повезује са поделом спрата. Такође можемо рећи да модул значи остатак у подели између два броја. Другим речима, можемо да пребројимо број остатака са њим.

Можемо израчунати модуло у Питхон-у користећи проценат ( % ) оператор.

Хајде да размотримо пример који илуструје однос између спратне поделе и модула у Питхон-у.

Пример 7.1:

С обзиром на 13 бомбона и 4 једача, можемо израчунати број бомбона који сваки једе добије уз помоћ спратне поделе.

код:

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

Излаз:

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

Објашњење:

У горњем исечку кода, декларисали смо неке варијабле које означавају број слаткиша и једача. Затим смо користили // оператер да изврши поделу пода како би израчунао број бомбона који добија сваки једач. Затим смо одштампали ове вредности за корисника.

Хајде да сада израчунамо укупан број бомбона подељених у групи. Ово није битно.

Пример 7.2:

Помножићемо број бомбона по особи са бројем једача.

код:

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

Излаз:

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

Објашњење:

У горњем исечку кода, израчунали смо укупан број бомбона који се деле у групи тако што смо помножили број бомбона по особи са бројем оних који једу и одштампали резултујућу вредност за кориснике.

Укупан број подељених пуних бомбона је 12 . Међутим, укупан број бомбона је 13 . Ова изјава имплицира да ће један слаткиш остати и неће се јести.

Горњи пример описује један начин израчунавања броја остатака. Међутим, ако нас занима само број остатака, можемо га директно израчунати уз помоћ модула.

Пример 7.3:

С обзиром на 13 бомбона и 4 једача, колики је број преосталих бомбона?

код:

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

Излаз:

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

Објашњење:

У горњем исечку кода смо декларисали променљиве које чувају вредност бомбона и јела. Затим смо израчунали број преосталих бомбона користећи % оператор који означава операцију по модулу. Коначно смо одштампали неке изјаве и резултујуће вредности за кориснике. Као резултат, видимо да је остатак слаткиша 1 .

а = б * (а // б) + (а % б)

У Питхон-у, подела спрата и модуло су повезани следећом једначином:

Где:

    аје дивиденда.бје делилац.

На пример, хајде да проверимо да горња једначина важи са 13 бомбона и 4 јела.

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

Дакле, разумели смо концепте спратне поделе и модула у Питхон-у. Сада ћемо погледати неку уграђену функцију која израчунава и једно и друго.

Разумевање функције дивмод() у Питхон-у

Питхон нуди уграђену функцију тзв дивмод() што нам омогућава да израчунамо и поделу и модул између две нумеричке вредности.

Синтакса за дивмод() функција је приказана испод:

Синтакса:

 res = divmod(var_1, var_2) 

Где:

    ресје резултат као тор. Овај скуп има резултат дељења спрата и остатак дат модулом.вас_1је дивиденда.вас_2је делилац.

Хајде да сада размотримо следећи пример који показује дивмод() функција.

Пример 8:

С обзиром на 13 бомбона и 4 једача, колико пуних бомбона добије сваки једач, а колико бомбона је остало?

код:

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

Излаз:

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

Објашњење:

У горњем исечку кода, декларисали смо неке променљиве. Користили смо дивмод() функција за израчунавање вредности спрата и модула за дате варијабле. Затим смо одштампали ове вредности за кориснике.

Разумевање приоритета спратне поделе

У Питхон-у, оператор поделе спрата // има сличан ниво приоритета као множење ( * ), подела ( / ), и модуло ( % ).

Ова тврдња подразумева да ако множимо, а затим делимо на спрат, прво се постиже множење, а затим дељење на спрат и обрнуто.

Међутим, ако, на пример, одузмемо два броја и затим извршимо дељење спрата, операција дељења спрата ће отворити пут.

Хајде да размотримо пример који показује исто.

Пример 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) 

Излаз:

 3 * 5 // 6 - 7 = -5 

Објашњење:

претворити из цхар у инт јава

У горњем исечку кода, неке променљиве смо декларисали као а = 3, б = 5, ц = 6 , и д = 7 . Затим смо извршили операцију и сместили резултујућу вредност у нову променљиву, То је . Коначно смо одштампали ову вредност за кориснике.

Да бисмо разумели како се овај резултат израчунава, можемо уметнути заграде око појмова у исправном редоследу приоритета.

Пример приказан у наставку приказује исто:

Пример 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) 

Излаз:

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

Објашњење:

У горњем исечку кода, неке променљиве смо декларисали као а = 3, б = 5, ц = 6 , и д = 7 . Затим смо извршили исту операцију, али са заградама и сместили резултујућу вредност у нову променљиву, То је . Коначно смо одштампали ову вредност за кориснике.

Као што можемо приметити, добијамо сличан резултат као из претходног примера, што значи да је редослед израчунавања:

Множење → Дељење на спрат → Одузимање

Ево поступног израчунавања горе наведеног:

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

Правилно смо разумели поделу спрата и његову употребу у програмском језику Питхон.

На крају ћемо погледати напредни случај употребе за поделу. У следећем случају, напредно не значи тешко; међутим, прилично је необично.

Разумевање напредне употребе спратне поделе

Неки од нас су можда свесни да такође можемо да направимо прилагођене објекте који подржавају операцију поделе пода у Питхон-у. Ово може бити могуће кроз посебан метод познат као __флоордив__() .

Метода __флоордив__() у Питхон-у

Операција дељења спрата у Питхон-у се користи за дељење два броја и заокружује резултат на најближи цео број.

Ради испод хаубе јер нумерички тип имплементира посебан метод тзв __флоордив__() . Онда, кад год позовемо // оператор између два објекта, тхе __флоордив__() метода се позива.

У Питхон-у, такође можемо директно позвати __флоордив__() методом. Хајде да размотримо следећи пример који показује исто:

центос вс рхел

Пример 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) 

Излаз:

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

Објашњење:

У горњем исечку кода, две променљиве смо декларисали као а = 31 и б = 7 . Затим смо извршили поделу спрата користећи // оператер и __флоордив__() метод и ускладиштили њихове резултујуће вредности у две променљиве, ц и д . Коначно смо одштампали резултате за кориснике.

Из резултата приказаног изнад, можемо приметити да су оба израза дала исти резултат. То је зато што се први израз претвара у други израз. Другим речима, ови позиви су еквивалентни један другом.

Сада ће ствари постати занимљиве. Хајде да размотримо следећи пример.

Пример 11.1:

Направићемо прилагођену класу која представља целобројне вредности као низове у следећем примеру. Затим ћемо креирати два објекта ове прилагођене класе и извршити операцију поделе спрата на њима.

код:

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

Излаз:

 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' 

Објашњење:

У горњем исечку кода дефинисали смо класу као ИнтСтр који представља целобројне вредности као низове. Затим смо креирали два објекта ИнтСтр класа. Коначно, имамо под-поделу интОне објекат од стране интТво објекат и покушао да одштампа резултат.

Међутим, горњи излаз указује на а ТипеЕррор . Ова порука о грешци то открива ИнтСтр објекти не подржавају поделу. Ова грешка има смисла. Како би прилагођени тип имао било какав траг о објектима низова који деле спрат?

Међутим, како се испоставило, можемо направити ИнтСтр подела пода за подршку објекта.

Раније смо учили кад год позовемо // оператер, ми зовемо __флоордив__() методом. Овај метод се извршава негде у класи објекта. На пример, инт објекти подржавају поделу јер је класа инт применила __флоордив__() методом.

Ове посебне методе, као __флоордив__() , имају нешто невероватно заједничко што ове методе можемо имплементирати у прилагођену класу. Другим речима, можемо учинити да прилагођени објекти подржавају поделу у програмском језику Питхон.

Размотримо сада следећи пример који показује исто.

Пример 11.2:

У следећем примеру ћемо имплементирати __флоордив__() метод у ИнтСтр класа. Затим ћемо креирати два објекта ове прилагођене класе и извршити операцију поделе спрата на њима.

код:

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

Излаз:

 17 // 4 = 4 

Објашњење:

У горњем исечку кода дефинисали смо класу као ИнтСтр који представља целобројне вредности као низове. Такође смо имплементирали __флоордив__() метода у оквиру ове класе. Овај метод прихвата вредност нумеричког низа од себе и другог објекта. Конвертовали смо ове вредности низа у целе бројеве и извршили поделу између њих. Затим смо конвертовали резултат назад у стринг и креирали нови ИнтСтр објекат. Инстанцирали смо ИнтСтр класе са два објекта и извршио операцију поделе спрата између њих. Коначно смо одштампали резултујућу вредност за кориснике.

Сада када смо успешно разумели метод прављења прилагођене класе која подржава поделу.

Ако нам се не свиђа чињеница да морамо да зовемо објекат.вал да видимо резултат, можемо применити __стр__() метод који директно враћа вредност током штампања.

Размотримо следећи пример који показује исто.

Пример 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) 

Излаз:

 17 // 4 = 4 

Објашњење:

У горњем исечку кода дефинисали смо класу као ИнтСтр који представља целобројне вредности као низове. Такође смо имплементирали __флоордив__() метода у оквиру ове класе. Затим смо дефинисали __стр__() метод који директно враћа вредности стрингова током штампања. Инстанцирали смо ИнтСтр класе са два објекта и извршио операцију поделе спрата између њих. Коначно смо одштампали резултујућу вредност за кориснике.