Пишем код и вспоминаем основы школьной арифметики.
Деление в Python используется для математических вычислений и реализации алгоритмов с проверкой условий. В обоих случаях для этого применяют специальные операторы, предусмотренные в языке программирования.
Из этой статьи вы узнаете:
Алексей Ушаровский
Principal software engineer в Oracle, эксперт Skillbox по бэкенду и Java в энтерпрайзе.
Оператор деления
Деление в Python может быть обычным и целочисленным. Операторы для них различаются:
- / — обычное деление;
- // — целочисленное деление, в результате которого мы получаем результат без остатка.
Для получения остатка от деления используется оператор %.
Деление в Python имеет стандартный математический приоритет — оно выполняется после вычисления выражений в скобках и возведения чисел в степень.
Порядок выполнения | Оператор | Описание |
---|---|---|
1 | () | Скобки |
2 | ** | Возведение в степень |
3 | ~x, +x, -x | Битовое отрицание, унарный плюс и минус |
4 | *, /, //, % | Умножение, деление, целочисленное деление, остаток от деления |
5 | +, – | Сложение и вычитание |
Обычное деление
Деление с остатком — самая простая для понимания операция деления в Python. Она обозначается с помощью символа косой черты / и работает как обычное деление, которое мы ежедневно производим при подсчёте денег, расстояний, объёмов жидкостей и так далее.
Вот как она используется:
print(5 / 2) # 2.5 print(6 / 3) # 2.0 print(45 / 4) # 11.25
Результат операции деления с остатком всегда представлен в виде числа с плавающей точкой — float. Это работает даже в том случае, если делимое и делитель явно привести к целым значениям int:
print(int(5) / int(2)) # 2.5 print(int(6) / int(3)) # 2.0 print(int(45) / int(4)) # 11.25
Такая особенность появилась в Python 3.x. В более ранних версиях языка результат деления двух целых чисел также был целым числом.
В некоторых случаях нововведение может привести к непредсказуемым результатам работы кода. Например, к появлению десятичных периодических дробей:
print(1 / 3) # 0.3333333333333333
Об этом лучше помнить при написании кода и округлять результат до нужной точности или проводить целочисленное деление.
Деление без остатка
В Python предусмотрена операция целочисленного деления, которая обозначается двойной косой чертой //. Результатом такого выражения будет целое число без остатка:
print(5 // 2) # 2 print(6 // 3) # 2 print(45 // 4) # 11
Дробная часть не показана в результатах, но если делимое или делитель будет числом с плавающей точкой, то она вернётся:
print(5 // 2.0) # 2.0 print(5.0 // 2) # 2.0
И это ещё одна особенность вычислений, о которой надо помнить. К примеру, если вывод программы всегда должен быть без дробной части, то надо привести все числа к целочисленному типу перед вычислением. Это можно сделать до или после деления:
print(5 // int(2.0)) # 2 print(int((5.0) // 2)) # 2
Как найти остаток или деление по модулю
Остаток — это дробная часть числа, которая отбрасывается при целочисленном делении. При необходимости её можно получить с помощью оператора %. В математике это называется делением по модулю.
Рассмотрим операцию на примере целочисленного деления 10 на 3. Результатом будет 3, а 1 Python отбросит и не выведет в результат. Если нам нужно получить остаток, то можно использовать %:
print(10 % 3) # 1
Получение остатка от деления часто применяется для реализации различных алгоритмов. К примеру, с помощью этого оператора можно искать чётные числа. Напишем для этого простую функцию:
def is_even(number): # Если остаток от деления на 2 равен нулю, то число чётное if number % 2 == 0: print(‘Число чётное’) else: print(‘Число нечётное’) is_even(12) # Число чётное is_even(13) # Число нечётное
Деление на ноль
В Python, как и в большинстве других языков программирования, запрещено деление на ноль. Если попытаться провести эту операцию, то интерпретатор сообщит нам об исключении ZeroDivisionError, остановит выполнение кода и выведет в консоль ошибку.
Если мы знаем, что деление на ноль может возникнуть в ходе работы программы, то такое исключение надо обработать в коде. Например, мы хотим создать калькулятор. Пользователь нашего приложения может ввести любое число в качестве делителя, в том числе ноль.
Обработаем такой вариант события и выведем ему сообщение, что операция невозможна:
a = 10 b = 0 try: result = a / b except ZeroDivisionError: print(“Делить на ноль нельзя!”) else: print(result)
В примере выше делитель равен нулю, поэтому Python выполнит код и выведет в консоль текст Делить на ноль нельзя!. Если в переменной b будет любое число, отличное от 0, то пользователь увидит только результат деления с остатком.
Сокращённая запись
Иногда нам нужно разделить значение переменной на какое-то число и перезаписать в неё же результат вычисления. Обычно это делают так:
a = 10 a = a // 2 # В итоге в переменной a будет храниться число 5
Такую форму записи называют инфиксной. Но можно сократить её, использовав префиксное выражение:
a = 10 a //= 2 # В этом случае в переменной a тоже будет число 5
Такие выражения работают со всеми операторами деления в Python:
- a /= b — деление с остатком;
- a //= b — целочисленное деление;
- a %= b — вычисление остатка от деления, где a — делимое, b — делитель.
Это число, полученное из исходного заменой всех нулей на единицы и наоборот.