В языке Python есть базовые математические операции, о них сегодня и пойдёт речь. Умение эффективно применять математические операции в рамках программирования – важный навык, который необходимо развивать, потому как с числами предстоит работать постоянно. Алгоритмы, функции, теория множеств, алгебра логики, комбинаторика и статистика — программисты пользуются ими регулярно и повсеместно. Но не всё так страшно. Да, понимание математики на высоком уровне помогает стать высококвалифицированным программистом, но оно не является для этого обязательным условием. Тем не менее базовые вещи знать придётся. А в основе всех мощных математических инструментов лежат простые и понятные операции.
Сложение (+)
И самая простая, и понятная из них — сложение. Никаких "подводных камней": берём два или более чисел, пишем между ними знак "+" и присваиваем результат выражения переменной (или сразу выводим сумму на экран):
Сложим несколько вещественных чисел и выведем их на экран без предварительной инициализации результирующей переменной:
Вообще говоря, если хотя бы одно из слагаемых — число вещественное, то вещественным будет и весь результат.
Вычитание (-)
Вычитание – это обратная операция сложению. Оператором выступает знак "-":
С вещественными числами здесь та же ситуация: если хотя бы один операнд имеет тип float, то и результат будет float:
Умножение (*)
Как и две предыдущие операции, умножение в Python не таит в себе никаких скрытых или неочевидных особенностей. Умножаем два или более чисел при помощи оператора "звёздочка" (*):
В этот раз обойдёмся без создания переменных
Деление (/)
Сложение, вычитание и умножение тривиальны, а вот с делением не всё так просто. В Python существует три вида деления и столько же разных операторов. Начнём с истинного деления, за которое отвечает оператор "/". Его главным отличием является то, что, вне зависимости от типов операндов, будет возвращен вещественный результат (float).
Делимое и делитель — int числа, а частое — float
Этот вид деления наиболее близок к обычному и знакомому нам математическому. И здесь тоже нельзя делить на ноль:
Целочисленное деление (//)
Оператор "//" возвращает int, если оба операнда — целые числа, и float — если хотя бы один операнд является вещественным числом. В любом из вариантов дробная часть будет отброшена, а результат округлён вниз.
Видно, что результат округлился в меньшую сторону и остался целочисленным, поскольку и делимое, и делитель — int числа. При изменении любого из операндов на вещественное число, результат также изменится и станет float. Об округлении вниз важно помнить, когда работа идёт с отрицательными числами.
На ноль всё ещё нельзя делить!
Остаток от деления (%)
Остаток от деления ещё называют делением по модулю. Оператор "%" сначала делит, а затем возвращает остаток.
На ноль всё ещё нельзя делить!
Остаток может не быть целочисленным:
Но вся прелесть данного оператора заключается не в возвращаемом им значении остатка. Главная фишка деления по модулю в том, что с его помощью легко проверяется факт делимости одного числа на другое
А отсюда вытекают и проверки на чётность/нечётность:
Возведение в степень (**)
Нетипичный оператор для большинства других языков программирования. Тем он и удобен. Парная "звёздочка" (**) выполняет классическое математическое возведение числа "a" в степень "b":
И показатель степени, и основание могут быть отрицательными:
И дробными:
*степень 0.5 аналогична квадратному корню
Операндов у возведения в степень также может быть несколько. В таком случае оператор "**" работает, как право-ассоциативный (т.е. операции выполняются справа-налево):
*Сначала выполняется 2 ** 3, а затем уже 2 ** 8.
В завершении — про приоритет операций. Если в выражении используются разные операторы, то порядок их выполнения будет следующим:
1) возведение в степень;
2) умножение, деление, целочисленное деление и деление по модулю;
3) сложение и вычитание.