logo

Розподіл підлоги в Python

У наступному посібнику ми дізнаємося про операцію Floor Division за допомогою мови програмування Python.

Але перш ніж ми почнемо, давайте коротко розберемося, що таке поділ підлоги.

Розуміння поділу підлоги

Поверхове ділення є звичайною операцією ділення, за винятком того, що воно повертає найбільше можливе ціле число. Це ціле число може бути меншим за результат звичайного ділення або дорівнювати йому.

Математична функція підлоги позначається символом ⌊ ⌋.

Давайте тепер зрозуміємо роботу операції поділу поверху. Наприклад,

⌊36/5⌋

Крок 1: Спочатку виконуємо ділення. Будемо ділитися 36 за 5 .

36 ÷ 5 = 7,2

крок 2: Тепер ми виконаємо функцію підлоги для значення, яке ми отримаємо після ділення, тобто 7.2 .

⌊7,2⌋=7

В результаті отримуємо 7 що є мінімальною вартістю 7.2 . Отже, поділ на підлогу означає ділення та округлення до найближчого цілого числа.

Різні мови програмування пропонують певну вбудовану функцію або оператор для обчислення поділу підлоги. Деякі приклади можуть бути:

  1. Ми можемо використовувати поверх() метод на мові програмування C++.
  2. Ми можемо використовувати поверх() метод на мові програмування Java.
  3. Ми можемо використовувати // оператор на мові програмування Python.

Однак ми будемо обговорювати лише використання операції поділу підлоги в Python за допомогою оператор подвійної зворотної косої риски (//). .

Розуміння поділу поверхів за допомогою Python

У мові програмування Python ділення на підлогу використовується для ділення двох чисел і округлення результату до найближчого цілого.

Перш ніж зануритися глибше в концепцію поділу підлоги, давайте коротко нагадаємо собі значення поділу та роботу math.floor() функція в Python.

Виконання звичайного ділення в Python

Ми можемо розділити два числа за допомогою зворотної косої риски ( / ) оператор ділення в Python. Розглянемо наступний приклад, який демонструє те ж саме:

приклад 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 і b = 4 . Потім ми виконали операцію поділу за допомогою зворотної косої риски ( / ) оператор ділення та зберіг результуюче значення в новій змінній, в . Нарешті ми надрукували значення в .

Як ми бачимо, ділення в Python працює так само, як ділення в математиці.

Розуміння функції math.floor() у Python

У Python є вбудований математичний модуль, який складається з різних корисних математичних утиліт для обчислень.

Одна з таких вбудованих функцій математика модуль є math.floor() функція. Ця функція приймає числові дані та повертає мінімальне значення, округляючи його до найближчого цілого числа.

Розглянемо наступний приклад, який демонструє те ж саме:

приклад 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 і b = -5,34 . Потім ми використали поверх() функція для обчислення мінімальних значень обох змінних і збереження їх у нових змінних, в і d . Нарешті ми надрукували результати для користувачів.

Тепер, коли ми зрозуміли поняття поділу чисел у Python. Давайте перейдемо до деталей, пов’язаних із поділом поверхів у Python.

Виконання Floor Division у Python

Поділ на поверх — це операція в Python, яка дозволяє нам розділити два числа та округлити отримане значення до найближчого цілого. Поділ підлоги відбувається через оператор подвійної зворотної косої риски (//). . Нижче наведено його синтаксис:

scanner.next java

Синтаксис:

 res = var_1 // var_2 

Де:

bash довжина рядка
    резє результуючою величиною ділення підлогиwas_1є дивідендомwas_2є дільником

Ми можемо думати про поділ підлоги як про регулярний поділ у поєднанні з math.floor() виклик функції.

Примітка. Поділ на підлогу може округлити будь-яке число до найближчого цілого. Наприклад, 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 і b = 5 . Потім ми використали // оператор для обчислення мінімального значення ділення та збереження мінімального значення в новій змінній, в . Потім ми виконали регулярне ділення за допомогою / і зберіг значення в іншій змінній, d . Нарешті ми надрукували обидва результати та порівняли їх.

Тепер давайте розглянемо інший приклад, використовуючи math.floor() функція.

Приклад 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 і b = 5 . Потім ми використали поверх() функція, розділ a за b і зберіг її у змінній c. Потім ми розрахували мінімальну вартість за допомогою // і зберіг значення в новій змінній, d . Нарешті ми надрукували обидва значення та порівняли їх.

Виконання поверхового ділення з від’ємними числами

Ми також можемо виконати поділ на підлогу, використовуючи від’ємні числа.

У випадку від’ємних чисел результуюче значення все одно округлюється до найближчого цілого числа. Деякі можуть заплутатися, оскільки округлення від’ємного числа означає відхід від нуля. Наприклад, -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 і b = 4 . Потім ми використали // оператор для обчислення мінімального значення та збереження його в новій змінній, в . Нарешті ми надрукували значення для користувача.

З регулярним поділом, -10/4 повернувся б -2,5 ; однак при поділі на підлогу це число округлюється до найближчого від’ємного цілого числа, тобто до -3 .

Виконання поділу з поплавками

Ми також можемо виконати поділ поверху за допомогою float у Python. Якщо плаваюча речовина, що розділяє поверх, результатом є float, що представляє найближче ціле число.

Розглянемо наступний приклад, що демонструє поділ підлоги за допомогою поплавців.

Приклад 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 

Пояснення:

У наведеному вище фрагменті коду ми ініціалізували два списки. Потім ми використали для -loop для повторення елементів цих списків, обчислення значень для кожної операції поділу поверху та друку результатів для користувачів.

У результаті ми можемо спостерігати, що операція ділення поверху виконується з використанням числа з плаваючою речовиною, а float з цілим числом повертає значення, округлене до найближчого цілого числа, представленого як числа з плаваючою речовиною.

Floor Division і Modulo в Python

У математиці модуль — це поняття, яке в основному пов’язане з поділом на підлогу. Можна також сказати, що модуль означає залишок від ділення двох чисел. Іншими словами, з ним ми можемо порахувати кількість залишків.

Ми можемо обчислити модуль за допомогою Python, використовуючи відсоток ( % ) оператор.

Давайте розглянемо приклад, який ілюструє зв’язок між поділом підлоги та модулем у Python.

Приклад 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 

Пояснення:

У наведеному вище фрагменті коду ми оголосили змінні, що зберігають значення candies і eaters. Потім ми обчислили кількість залишків цукерок за допомогою % оператор, що позначає операцію по модулю. Нарешті ми надрукували деякі твердження та результуючі значення для користувачів. В результаті ми бачимо, що залишки цукерок є 1 .

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

У Python поділ поверху та модуль пов’язані таким рівнянням:

Де:

    aє дивідендом.bє дільником.

Наприклад, давайте перевіримо, що наведене вище рівняння виконується для 13 цукерок і 4 їдців.

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

Таким чином, ми зрозуміли поняття поверхового поділу та модуля в Python. Тепер ми розглянемо деяку вбудовану функцію, яка обчислює обидва.

Розуміння функції divmod() у Python

Python пропонує вбудовану функцію під назвою divmod() що дозволяє нам обчислити як ділення підлоги, так і модуль між двома числовими значеннями.

Синтаксис для divmod() функція показана нижче:

Синтаксис:

 res = divmod(var_1, var_2) 

Де:

    резє результатом у вигляді кортежу. Цей кортеж має результат ділення на поверх і залишок, отриманий за модулем.was_1є дивідендом.was_2є дільником.

Тепер розглянемо наступний приклад, який демонструє divmod() функція.

Приклад 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 

Пояснення:

У наведеному вище фрагменті коду ми оголосили деякі змінні. Ми використали divmod() функція для обчислення значення ділення підлоги та модуля для заданих змінних. Потім ми надрукували ці значення для користувачів.

примітивні типи даних у java

Розуміння пріоритету поверхового розподілу

У Python — оператор поділу поверхів // має такий же рівень пріоритету, як і множення ( * ), поділ ( / ), і по модулю ( % ).

Це твердження означає, що якщо ми множимо, а потім ділимо на підлогу, спочатку досягається множення, а потім ділення на підлогу і навпаки.

Однак, якщо ми, наприклад, віднімемо два числа, а потім виконаємо ділення на поверх, операція поділу на поверх прокладе шлях.

Розглянемо приклад, який демонструє те ж саме.

Приклад 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 

Пояснення:

У наведеному вище фрагменті коду ми оголосили деякі змінні як a = 3, b = 5, c = 6 , і d = 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 

Пояснення:

У наведеному вище фрагменті коду ми оголосили деякі змінні як a = 3, b = 5, c = 6 , і d = 7 . Потім ми виконали ту саму операцію, але з дужками, і зберегли результуюче значення в новій змінній, Це є . Нарешті ми надрукували це значення для користувачів.

Як ми бачимо, ми отримуємо такий же результат, як і в попередньому прикладі, тобто порядок обчислень такий:

Множення → Поверх Ділення → Віднімання

Ось поетапний розрахунок вищезазначеного:

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

Ми правильно зрозуміли поділ підлоги та її використання в мові програмування Python.

Нарешті, ми розглянемо розширений випадок використання підлогового поділу. У наступному випадку просунутий не означає важкий; однак це досить незвичайно.

Розуміння попереднього використання поділу підлоги

Деякі з нас, можливо, знають, що ми також можемо створювати власні об’єкти, які підтримують операцію поділу поверхів у Python. Це можливо за допомогою спеціального методу, відомого як __floordiv__() .

Метод __floordiv__() у Python

Операція ділення на підлогу в Python використовується для ділення двох чисел і округлення результату до найближчого цілого.

Це працює під капотом, оскільки числовий тип реалізує спеціальний метод під назвою __floordiv__() . Тоді, коли ми телефонуємо до // оператор між двома об'єктами, the __floordiv__() викликається метод.

У Python ми також можемо безпосередньо викликати __floordiv__() метод. Розглянемо наступний приклад, який демонструє те ж саме:

Приклад 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 

Пояснення:

що таке хеш-сет в java

У наведеному вище фрагменті коду ми оголосили дві змінні як а = 31 і b = 7 . Потім ми виконали поділ підлоги за допомогою // оператор і __floordiv__() метод і зберігає їх результуючі значення у двох змінних, в і d . Нарешті ми надрукували результати для користувачів.

З наведених вище результатів можна помітити, що обидва вирази дали однаковий результат. Це тому, що перший вираз перетворюється на другий вираз. Іншими словами, ці виклики еквівалентні один одному.

Тепер стане цікаво. Розглянемо наступний приклад.

Приклад 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' 

Пояснення:

У наведеному вище фрагменті коду ми визначили клас як IntStr який представляє цілі значення у вигляді рядків. Тоді ми створили два об’єкти IntStr клас. Нарешті у нас є підлога intOne об'єкт за intTwo і спробував надрукувати результат.

Однак наведений вище вихід вказує на a TypeError . Це повідомлення про помилку показує це IntStr об'єкти не підтримують поділ поверхів. Ця помилка має сенс. Як користувальницький тип матиме будь-яку підказку про об’єкти рядків, що розділяють підлогу?

Однак, як виявилося, ми можемо зробити це IntStr поділ опори об'єкта.

Раніше ми дізнавалися, коли телефонуємо // оператора ми телефонуємо __floordiv__() метод. Цей метод виконується десь у класі об’єкта. Наприклад, об’єкти int підтримують поділ поверхів, оскільки клас int застосував __floordiv__() метод.

Ці спеціальні методи, як __floordiv__() , мають щось дивовижне спільне, що ми можемо реалізувати ці методи в спеціальному класі. Іншими словами, ми можемо змусити користувальницькі об’єкти підтримувати поділ поверхів на мові програмування Python.

Тепер розглянемо наступний приклад, який демонструє те саме.

Приклад 11.2:

У наступному прикладі ми реалізуємо __floordiv__() метод в IntStr клас. Потім ми створимо два об’єкти цього спеціального класу та виконаємо над ними операцію поділу поверхів.

код:

 # 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 

Пояснення:

У наведеному вище фрагменті коду ми визначили клас як IntStr який представляє цілі значення у вигляді рядків. Ми також реалізували __floordiv__() метод у цьому класі. Цей метод приймає числове значення рядка від себе та іншого об’єкта. Ми перетворили ці рядкові значення на цілі числа та виконали між ними поділ. Потім ми перетворили результат назад у рядок і створили новий IntStr об'єкт. Ми створили екземпляр IntStr класу з двома об’єктами та виконав операцію поділу поверху між ними. Нарешті ми надрукували результуюче значення для користувачів.

Тепер ми успішно розуміємо метод створення спеціального класу для підтримки поділу поверхів.

Якщо нам не подобається те, що ми повинні дзвонити object.val щоб побачити результат, ми можемо реалізувати __str__() метод, який безпосередньо повертає значення під час друку.

Розглянемо наступний приклад, який демонструє те ж саме.

Приклад 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 

Пояснення:

У наведеному вище фрагменті коду ми визначили клас як IntStr який представляє цілі значення у вигляді рядків. Ми також реалізували __floordiv__() метод у цьому класі. Потім ми визначили __str__() метод, який безпосередньо повертає рядкові значення під час друку. Ми створили екземпляр IntStr класу з двома об’єктами та виконав операцію поділу поверху між ними. Нарешті ми надрукували результуюче значення для користувачів.