Как выполнить деление пола в Python

Опубликовано: 2022-11-02

В этом уроке вы узнаете, как выполнить деление пола в Python. Вы будете использовать оператор Python //, функцию floor из математического модуля Python и многое другое — с примерами кода.

Мы начнем с обзора арифметических операторов в Python и узнаем, как работает оператор деления пола //. Затем мы узнаем, как использовать другие эквивалентные методы, включая функции из математических и операторных модулей, для выполнения деления этажей.

Давайте начнем…

Арифметические операторы в Python

В Python вы можете использовать арифметические операторы для выполнения простых арифметических операций над числами типов данных int и float . Эти операторы действуют на операнды (числа) и возвращают результат операции.

Арифметические операторы в Python

В следующей таблице приведены арифметические операторы в Python и то, как они работают:

Оператор Синтаксис Результат
Дополнение (+) num1+num2 Возвращает сумму num1 и num2
Вычитание (-) num1-num2 Возвращает разницу между num1 и num2
Умножение (*) num1*num2 Возвращает произведение num1 и num2
Возведение в степень (**) num1**num2 Возвращает результат num1 , возведенный в степень num2 ; num1 num2
Разделение (/) num1/num2 Возвращает результат num2 на число 2, включая num1 часть.
Этажность (/) num1//num2 Возвращает частное от деления num1 на num2
Модуль (%) num1 % num2 Возвращает остаток от деления num1 на num2

Давайте рассмотрим несколько примеров, в которых используются эти арифметические операторы. Вы можете попробовать эти примеры в Python REPL или в онлайн-редакторе Python на Geekflare.

 >>> num1 = 18 >>> num2 = 5 >>> num1 + num2 23 >>> num1 - num2 13 >>> num1 * num2 90 >>> num1 ** num2 1889568

В этом примере num1 равно 18, а num2 равно 5. Операция деления num1/num2 возвращает результат, включая дробную часть.

Число 5 входит в число 18 три раза, а в остатке остается три. Таким образом, операция деления пола, num1//num2 , дает частное 3, а оператор по модулю дает остаток — в данном случае также 3.

 >>> num1/num2 3.6 >>> num1//num2 3 >>> num1 % num2 3

Это должно дать вам представление о том, как работают операторы деления, деления по этажам и по модулю. Далее мы подробно узнаем об операторе деления этажей.

️ В Python 2 операция деления (/) усекает результат до ближайшего целого числа — аналогично операции деления нижнего предела в Python 3. В этом руководстве обсуждается, как операция деления нижнего предела работает в Python 3.x.

Разделение этажей с помощью оператора //

Этаж-подразделение-использование-оператора

Рассмотрим операцию деления с делимым и делителем. В num1/num2 num1 делимое, а num2 — делитель. Чтобы выполнить деление пола num1 и num2 , используйте num1//num2 .

Оператор деления пола (//) возвращает частное операции деления — как целое число или число с плавающей запятой — в зависимости от типов данных операндов.

Оператор деления этажа не гарантирует, что ответ всегда будет целым числом. Если делимое ( num1 ) или делитель ( num2 ) является числом с плавающей запятой, то результатом num1//num2 является число с плавающей запятой. Вот несколько примеров.

 >>> 18.0//5 3.0 >>> 10.0//4 2.0 >>> 15//4.0 3.0

Если вам нужно, чтобы результат был целым числом, вам нужно явно преобразовать его в целое число, используя функцию int() :

 >>> int(18.0//5) 3 >>> int(10.0//4) 2 >>> int(15//4.0) 3

Что происходит под капотом?

Когда вы используете оператор деления этажей //, вызывается специальный метод (также называемый методом dunder) __floordiv__() . Следовательно, вы также можете использовать метод __floordiv__() для любого целого числа или числа с плавающей запятой, как показано ниже:

 num1 = 18 num2 = 5 num1.__floordiv__(num2) # Output: 3

Разделение этажей с использованием operator.floordiv()

Floor-Division-Using-operator.floordiv

Чтобы выполнить деление этажей в Python, вы также можете использовать floordiv() в модуле operator .

Модуль оператора Python содержит определения эффективных функций, которые могут выполнять все арифметические операции. Поэтому для выполнения деления этажей вы также можете использовать floordiv() из модуля оператора — вместо оператора //.

Использование функции floordiv() из модуля оператора эквивалентно использованию оператора деления этажа.

 >>> import operator >>> operator.floordiv(18,5) # Output: 3 >>> operator.floordiv(12,5.0) # Output: 2.0

Деление пола с использованием math.floor()

Как работает функция пола?

В математике функция floor() принимает любое вещественное число x в качестве входных данных и возвращает целое число (результат). Этот результат представляет собой наибольшее целое число , меньшее или равное действительному числу x.

Чтобы лучше понять это, давайте возьмем несколько примеров и визуализируем эти числа на числовой прямой.

Пример 1 : Рассмотрим число 2.3. Наибольшее целое число, меньшее или равное 2,3, равно 2; поэтому пол (2.3) вернет 2.

python-floordivision-tutorial-ex1

Пример 2: Вы можете применить то же определение и при работе с отрицательными числами. Рассмотрим число -1,7. Наибольшее целое число, меньшее или равное -1,7, равно -2; поэтому пол (-1,7) вернет -2.

python-floordivision-tutorial-ex2

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

 >>> from math import floor >>> floor(2.3) 2 >>> floor(-1.7) -2

Чтобы выполнить деление этажей, вы можете вызвать функцию floor() с num1/num2 в качестве аргумента. Поскольку он усекает или округляет результат до ближайшего целого числа, он эквивалентен операции деления пола.

Вы можете явно импортировать функцию floor() из math модуля, как показано ниже:

 from math import floor num1 = 18 num2 = 5 floor(num1/num2) # Output: 3

В качестве альтернативы вы также можете импортировать только math модуль, а затем получить доступ к функции floor() с помощью math.floor() .

 import math num1 = 18 num2 = 5 math.floor(num1/num2) # Output: 3

В отличие от функции floordiv() из модуля оператора и оператора деления пола //, использование math.floor(num1/num2) гарантирует, что результатом будет целое число. Этот метод делает код читабельным и устраняет этап приведения типов.

 import math num1 = 18.0 num2 = 5 math.floor(num1/num2) # Output: 3

Примеры разделения пола в Python

Примеры Floor-Division-in-Python

Давайте завершим наше обсуждение практическим примером: бинарный поиск.

Двоичный поиск — это эффективный алгоритм поиска, который позволяет искать целевой элемент в отсортированных массивах за время O(log n) , где n — размер массива.

Этот алгоритм работает путем деления интервала поиска пополам на каждом шаге. Это делается в зависимости от того, соответствует ли середина интервала целевому значению (поиск заканчивается, когда совпадение найдено!) или меньше или больше целевого значения. Поскольку размер массива уменьшается наполовину на каждом шаге, средняя точка не всегда оценивается как целое число.

 itemlist = [5,7,18,21,34,45] item = 7

Рассмотрим следующую реализацию алгоритма бинарного поиска. Функция binary_search() принимает число ( item ) и список ( itemlist ) и ищет вхождение item в itemlist .

  • Если item найден, функция возвращает индекс, по которому item встречается.
  • В противном случае он возвращает None .
 def binary_search(item, itemlist): # get the list size listsize = len(itemlist) - 1 # start at the two ends of the list lowerIdx = 0 upperIdx = listsize while lowerIdx <= upperIdx: # calculate the middle point # use normal division instead of floor division midPt = (lowerIdx + upperIdx)/ 2 # if item is found, return the index if itemlist[midPt] == item: return midPt # otherwise get the next midpoint if item > itemlist[midPt]: lowerIdx = midPt + 1 else: upperIdx = midPt - 1 if lowerIdx > upperIdx: return None

Эта реализация функционально верна, за исключением того, что мы не учли, что midPt не вычисляется до целого числа в ходе поиска.

 binary_search(item,itemlist)

Если мы вызовем функцию, мы столкнемся с TypeError , утверждающей, что индексы списка должны быть целыми числами или срезами, а не числами с плавающей запятой.

 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-3-a5f12ebc3145> in <module> ----> 1 binary_search(item,itemlist) <ipython-input-2-524ef6900b1f> in binary_search(item, itemlist) 12 13 # if item is found, return the index ---> 14 if itemlist[midPt] == item: 15 return midPt 16 # otherwise get the next midpoint TypeError: list indices must be integers or slices, not float

Мы модифицируем определение функции, чтобы использовать оператор деления пола:

 def binary_search(item, itemlist): # get the list size listsize = len(itemlist) - 1 # start at the two ends of the list lowerIdx = 0 upperIdx = listsize while lowerIdx <= upperIdx: # calculate the middle point # use floor division midPt = (lowerIdx + upperIdx)// 2 # if item is found, return the index if itemlist[midPt] == item: return midPt # otherwise get the next midpoint if item > itemlist[midPt]: lowerIdx = midPt + 1 else: upperIdx = midPt - 1 if lowerIdx > upperIdx: return None

Функция возвращает индекс, по которому найден элемент 7, то есть индекс один.

 binary_search(item,itemlist) # Output: 1

Вывод

Я надеюсь, что это руководство помогло вам понять, как выполнить деление пола в Python. Вот краткое изложение различных методов, которые вы изучили:

  • В Python оператор b выполняет операцию, определенную оператором с a и b в качестве операндов, и возвращает результат операции.
  • Вы можете использовать оператор деления этажа Python //; a//b возвращает частное операции деления a/b.
  • В качестве альтернативы вы можете использовать эквивалентную функцию floordiv() , определенную в модуле оператора Python, с синтаксисом: operator.floordiv(a,b) для получения результата a//b.
  • Все вышеперечисленные методы возвращают частное, но тип данных может быть числом с плавающей запятой или целым числом в зависимости от значений a и b. Таким образом, вам придется привести возвращаемое значение к целому числу.
  • Функцию floor() из математического модуля Python также можно использовать для деления пола: math.floor(a,b) эквивалентна a//b и возвращает целое число. Если вы хотите, чтобы результат был целым числом, рассмотрите возможность использования функции пола из математического модуля.

Затем узнайте, как работать с defaultdict в Python.