Арифметические операции

На этом занятии рассмотрим виды и работу арифметических операторов в Python. И как уже говорили, в этом языке имеется три базовых типа для представления чисел:

  • int – для целочисленных значений;
  • float – для вещественных;
  • complex – для комплексных.

С этими числами можно выполнять следующие арифметические операции:

Оператор

Описание

Приоритет

+

сложение

2

-

вычитание

2

*

умножение

3

/, //

деление

3

%

остаток деления

3

**

возведение в степень

4

И введем несколько определений:

Операнд – то, к чему применяется оператор. Например, в умножении 5 * 2 есть два операнда: левый операнд равен 5, а правый операнд равен 2. Иногда их называют «аргументами» вместо «операндов».

Унарным называется оператор, который применяется к одному операнду.

Например, оператор унарный минус "-" меняет знак числа на противоположный:
#унарный минус
a=1; a=-a 
print(a)

Обратите внимание как записаны два оператора в одну строчку: они разделены точкой с запятой. Так тоже можно делать. Если каждый оператор начинается с новой строки, то точку с запятой ставить не обязательно, если пишем несколько операторов в одну строчку, то они разделяются точкой с запятой.

Бинарным называется оператор, который применяется к двум операндам.

Тот же минус существует и в бинарной форме:

a = 1; b = 2
c = b-a #бинарный минус
print(c)

Раз мы начали говорить об операциях + и -, то продолжим и отметим, что, в общем случае, можно использовать унарный плюс и минус, например:

a=2;
print(+a, -a)

Конечно, +a это то же самое, что и a, поэтому, в основном, используется унарный минус. По приоритету унарные операции выше бинарных операций. Например, вот такая запись:

print(-a+b)

означает, что число –a возводится в степень 2, то есть, унарный минус имеет больший приоритет, чем бинарная операция ** возведения в степень.

Если же используются бинарные сложение и вычитание:

a=2; b=-10
print(a+b)
print(a-b)

то их приоритет становится наименьшим среди всех арифметических операций (они выполняются в последнюю очередь).

Следующая бинарная операция умножение работает так, как мы привыкли ее использовать в математике:

a=2; b=-5.8; c=2.3
print( a+b*c )

Здесь сначала выполнится умножение, а затем – сложение. Если необходимо изменить приоритет выполнения операций, то используются круглые скобки:

print( (a+b)*c )

Далее, деление двух чисел (или переменных) можно выполнить двумя способами. Первый – традиционный, делает деление, привычное в математике, например:

3/2

получим ожидаемый результат 1,5. Однако те из вас, кто имеет опыт программирования на таких языках как С++ или Java, знают, что при делении двух целочисленных значений, результат также получался целочисленным. Но в Python это не так! Его арифметические операции работают в соответствии с классическими правилами математики и деление здесь – это всегда полноценное деление двух значений, какими бы они ни были.

Однако, если все же требуется выполнить целочисленное деление (то есть, с отбрасыванием дробной части), то используется такой оператор:

3//2

И, как видите, теперь результат 1, а не 1,5. Причем, это целочисленное деление будет выполняться и с вещественными числами:

3.2//2

Вот такие два оператора деления существуют в Python.

Если же хотим вычислить остаток от целочисленного деления, то используется оператор:

x % y

С положительными целыми числами он работает также как и во многих других языках программирования. Например,

4 % 5  # 0
7 % 5 # 2

и так далее, мы будем получать числа от 0 до 4. Но с отрицательными числами вычисления будут отличаться от того же языка С++. Например,

-9 % 5 # (в С++ это -4, а в Python – это 1)

Почему так? Дело в том, что когда то давно инженеры фирмы Intell неверно математически реализовали данную операцию. И язык С++ как наследник этой интеловской архитектуры реализует данную операцию путем вынесения знака «-» за скобки и вычисления обычного остатка от деления. Язык же Python делает это так, как принято в математике. Сначала находится ближайшее наименьшее число кратное 5. Это число -10 (для числа -9) и остаток берется как разность между этими числами:

то есть, остатки всегда будут положительными в диапазоне от 0 до 4, как это и должно быть по математике.

Все рассмотренные операторы (*, /, //, %) имеют одинаковый приоритет и выполняются слева-направо. То есть, если записать

a/b*c

то это следует интерпретировать как формулу

Следующая операция – возведение в степень. В самом простом варианте она записывается так:

x=2; y=5;
x**y

здесь x, y могут быть и дробными числами. Например:

x=1.96; y=0.5;
x**y

Это будет соответствовать извлечению квадратного корня из 1,96. Если запишем такую конструкцию:

27**(1/3)

то получим кубический корень из 27. Причем, обратите внимание, круглые скобки у степени здесь обязательны, т.к. приоритет операции ** выше, чем у деления. Если записать вот так:

27**1/3

то это будет эквивалентно такому выражению:

Вот на это следует обращать внимание. И еще один нюанс. Операция возведения в степень выполняется справа-налево. То есть, если записать вот такую строчку:

2**3**2

Это будет эквивалентно степени:

Сначала (справа) вычисляется 3**2 = 9, а затем, 2**9 = 512. Все остальные арифметические операции работают слева-направо.

Используя оператор присваивания совместно с арифметическими операторами, можно выполнять некоторые полезные арифметические преобразования переменных. Например, очень часто требуется увеличить или уменьшить некую переменную на определенное число. Это можно сделать вот так:

i = 5; j = 3
i = i+1
j = j-2
print(i, j)

Но, можно и короче, вот так:

i = 5; j = 3
i += 1
j -= 2
print(i, j)

Они довольно часто используются в программировании. Также, помимо сложения и вычитания, можно записывать и такие выражения:

i *= 3
j /= 4
print(i, j)
 
a = 5; b = 10
a **= 2
b //= 3
print(a, b)

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

Все рассмотренные арифметические операции можно выполнять и с комплексными числами:

a = 1 + 2j
b = 2 - 3j
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a**b)

Кроме операции целочисленного деления // и вычисления остатка от деления %. Дополнительно у объектов комплексных чисел есть свойства:

a = 1 + 2j
b = 2 - 3j
print(a.real)
print(b.imag)

для взятия действительной и мнимой части. И полезный метод:

sa = a.conjugate();
print(sa)

для получения комплексно-сопряженного числа.

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

Название

Описание

abs(x)

вычисляет модуль числа x

round(x)

округляет x до ближайшего целого

min(x1, x2,…,x_n)

находит минимальное, среди указанных чисел

max(x1, x2,…,x_n)

находит максимальное, среди указанных чисел

pow(x, y)

возводит x в степень y

Также в языке Python имеется стандартная библиотека math, которая содержит большое количество стандартных математических функций. Чтобы ей воспользоваться, необходимо вначале программы подключить эту библиотеку. Делается это с помощью ключевого слова import, за которым указывается имя библиотеки:

import math

После этого становятся доступными следующие полезные функции:

Название

Описание

math.ceil(x)

возвращает ближайшее наибольшее целое для x

math.floor(x)

возвращает ближайшее наименьшее целое для x

math.fabs(x)

возвращает модуль числа x

math.factorial(x)

вычисляет факториал x!

math.exp(x)

вычисляет e**x

math.log2(x)

вычисляет логарифм по основанию 2

math.log10(x)

вычисляет логарифм по основанию 10

math.log(x, [base])

вычисляет логарифм по указанному основанию base (по умолчанию base = e – натуральный логарифм)

math.pow(x, y)

возводит число x в степень y

math.sqrt(x)

вычисляет квадратный корень из x

Тригонометрические функции

math.cos(x)

вычисляет косинус x

math.sin(x)

вычисляет синус x

math.tan(x)

вычисляет тангенс x

math.acos(x)

вычисляет арккосинус x

math.asin(x)

вычисляет арксинус x

math.atan(x)

вычисляет арктангенс x

Математические константы

math.pi

число пи

math.e

число e

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

Применение этих функций вполне очевидно, например, их можно вызвать вот так:

import math
a = 2.4
b = math.cos(a)
print(b)
print( math.floor(1.7) )
print( math.ceil(1.7) )
print( math.sqrt(2.56) )

И так далее. Вот так работают арифметические операции в Python и вот такие математические функции имеются в стандартной библиотеке math.

Видео по теме