Математические вычисления в Python 3
Программирование невозможно представить без работы с числами. Размеры экрана, выбор цвета путем присвоения числовых кодов, географическое расположение, деньги и очки, продолжительность видео – для всего этого используются числа.
Потому умение выполнять математические операции очень важно для программирования. Конечно, чем выше у вас навык математических вычислений, тем лучше для вас; однако совсем не обязательно уметь выполнять сложнейшие вычисления, чтобы быть хорошим программистом. Если у вас нет опыта работы в области математики, старайтесь представлять математику как инструмент или как способ улучшить ваше логическое мышление.
Данное руководство научит вас работать с двумя наиболее распространёнными числовыми типами данных Python:
- целыми числами (бывают положительными, отрицательными или равными нулю (…, -1, 0, 1, …)).
- и числами с плавающей точкой (числа с десятичными знаками (например, 9.0 или -2.25)).
Операторы Python
Оператор – это символ или функция, которая выполняет то или иное действие над данными. К примеру, символ + – это оператор сложения.
В Python присутствуют как общие, так и специальные математические операторы.
Ниже приведена таблица наиболее распространённых математических операторов Python.
Операция | Результат |
x + y | Сложение (сумма x и y) |
x – y | Вычитание (разница между x и y) |
-x | Смена знака x |
+x | Тождественность x |
x * y | Умножение x на y |
x / y | Деление x на y |
x // y | Получение целой части от деления x на y |
x % y | Остаток от деления x / y |
x ** y | Возведение в степень |
Также руководство охватывает использование операторов присваивания.
Сложение и вычитание
Операции сложения и вычитания в Python выполняются точно так же, как и в обычной математике. Вы даже можете использовать Python вместо калькулятора.
Также вы можете объявить переменные и указать их в функции print:
a = 88
b = 103
print(a + b)
191
Целые числа бывают положительными и отрицательными. Попробуйте сложить следующие числа:
c = -36
d = 25
print(c + d)
-11
Числа с плавающей точкой складываются аналогичным образом:
e = 5.5
f = 2.5
print(e + f)
8.0
В результате сложения чисел с плавающей точкой также получается число с плавающей точкой, потому Python выводит 8.0, а не 8.
Синтаксис вычитания отличается от сложения только оператором. Попробуйте отнять 32 из 75.67:
g = 75.67
h = 32
print(g — h)
43.67
Примечание: Если в операции присутствует хотя бы одно число с плавающей точкой, в результате Python также выведет число с плавающей точкой.
Унарные арифметические операции
Унарное математическое выражение состоит только из одного компонента или элемента. В Python плюс и минус вместе со значением могут быть использованы в качестве одного элемента, это позволяет показать тождественность значения (+) или изменить его знак (-).
Тождественность используется нечасто. Плюс можно использовать с положительными числами:
Если вы используете плюс с отрицательным числом, он также вернёт тождественное (в этом случае – отрицательное) число.
Минус позволяет изменить знак. Если вы добавите минус к положительному значению, в результате будет отображено отрицательное значение:
Если добавить минус к отрицательному значению, в результате получится положительное число:
Умножение и деление
Операции умножения и деления, как сложение и вычитание, выполняются в Python так же, как в обычной математике. Для умножения Python использует *, для деления – /.
k = 100.1
l = 10.1
print(k * l)
1011.0099999999999
При делении в Python 3 частное всегда возвращается в виде числа с плавающей точкой, даже если вы делите целые числа:
m = 80
n = 5
print(m / n)
16.0
Это одно из главных различий между Python 2 и Python 3. Python 3 возвращает дробный результат, потому при делении 11 на 2 вы получите 5.5. В Python 2 деление привязано к типам данных, потому при делении целого числа невозможно получить число с плавающей точкой; поэтому при делении 11 на 2 Python 2 возвращает 5.
Читайте также: Python 2 vs Python 3
Когда числа по обе стороны символа деления являются целыми, выполняется деление floor, то есть, для фактора х Python 2 возвращает наибольшее целое число меньше или равное х. К примеру, при делении 5 / 2 таким числом будет 2.
Чтобы выполнить деление floor и получить только целую часть числа, Python 3 использует оператор //. К примеру, разделив 100//40, вы получите 2.
Деление по модулю
Оператор % – это модуль, который возвращает остаток от деления. К примеру, это позволяет найти числа, кратные одному и тому же числу.
o = 85
p = 15
print(o % p)
10
При делении 85 на 15 получается 5 и 10 в остатке.
Попробуйте разделить числа с плавающей точкой:
q = 36.0
r = 6.0
print(o % p)
0.0
Число 36.0 делится на 6.0 без остатка, потому в результате получился 0.0.
Возведение в степень
Оператор ** в Python возводит число в степень. Например, выражение 5 ** 3 значит, что 5 нужно возвести в третью степень. В математике это выглядит так: 5³. В Python можно получить тот же результат (125), умножив 5*5*5.
s = 52.25
t = 7
print(s ** t)
1063173305051.292
Приоритет операций
Как и в математике, в Python нужно помнить о том, что операции выполняются в порядке их приоритета, а не по порядку справа налево.
Сначала выполняется умножение (10*5=50), а затем сложение (10+50). Потому результат будет такой:
Чтобы сначала выполнить операцию сложения, а затем умножить полученный результат на 5, нужно взять сложение в скобки:
u = (10 + 10) * 5
print(u)
100
Математические операции имеют такой приоритет:
- Выражение в скобках;
- Экспоненты;
- Умножение;
- Деление;
- Сложение;
- Вычитание.
Операторы присваивания
Наиболее распространённым оператором присваивания является знак равенства (=). Он присваивает переменной слева значение справа. К примеру, в выражении v = 23 переменной v было присвоено значение 23.
В программировании часто используются составные операторы присваивания, которые выполняют операцию со значением переменной, а затем присваивают этой переменной полученное новое значение. Составные операторы объединяют арифметический оператор с оператором =. Например:
Составной оператор += выполнил сложение, а затем присвоил переменной w, значение, полученное в результате сложения.
Составные операторы часто используются в циклах.
for x in range (0, 7):
x *= 2
print(x)
0
2
4
6
8
10
12
Это позволяет автоматизировать процесс умножения чисел в заданном диапазоне.
В Python есть составные операторы присваивания для каждой математической операции:
y += 1 # сложение и присваивание
y -= 1 # вычитание и присваивание
y *= 2 # умножение и присваивание
y /= 3 # деление и присваивание
y // = 5 # деление floor и присваивание
y **= 2 # возведение в степень и присваивание
y %= 3 # вывод остатка и присваивание
Операторы присваивания позволяют постепенно увеличить или уменьшить значение, а также автоматизировать некоторые вычисления.
Говоря простым языком, в выражении 2 + 3, числа «2» и «3» называются операндами, знак «+» оператором. В языке программирования Python существуют следующие типы операторов:
Рассмотрим их по порядку.
Арифметические операторы в Python:
15 + 5 в результате будет 20
20 + -3 в результате будет 17
13.4 + 7 в результате будет 20.4
Операторы сравнения в Python:
12 <> 5 в результате будет True. Похоже на оператор !=
Операторы присваивания в Python:
с = 5
а = 2
с += а равносильно: с = с + а. с будет равно 7
с = 5
а = 2
с -= а равносильно: с = с — а. с будет равно 3
с = 5
а = 2
с *= а равносильно: с = с * а. c будет равно 10
Побитовые операторы в Python:
Побитовые операторы предназначены для работы с данными в битовом (двоичном) формате. Предположим, что у нас есть два числа a = 60; и b = 13. В двоичном формате они будут иметь следующий вид:
Логические операторы в Python:
True and True равно True.
True and False равно False.
False and True равно False.
False and False равно False.
Операторы членства в Python:
В добавок к перечисленным операторам, в Python присутствуют, так называмые, операторы членства, предназначенные для проверки на наличие элемента в составных типах данных, таких, как строки, списки, кортежи или словари:
Оператор | Описание | Примеры |
---|---|---|
in | Возвращает истину, если элемент присутствует в последовательности, иначе возвращает ложь. | «cad» in «cadillac» вернет True. 1 in [2,3,1,6] вернет True. «hi» in <"hi":2,"bye":1>вернет True. 2 in <"hi":2,"bye":1>вернет False (в словарях проверяется наличие в ключах, а не в значениях). |
not in | Возвращает истину если элемента нет в последовательности. | Результаты противоположны результатам оператора in. |
Операторы тождественности в Python:
Операторы тождественности сравнивают размещение двух объектов в памяти компьютера.
Оператор | Описание | Примеры |
---|---|---|
is | Возвращает истину, если оба операнда указывают на один объект. | x is y вернет истину, если id(x) будет равно id(y). |
is not | Возврашает ложь если оба операнда указывают на один объект. | x is not y, вернет истину если id(x) не равно id(y). |
Приоритет операторов в Python
В следующей таблице описан приоритет выполнения операторов в Python от наивысшего (выполняется в первую очередь) до наинизшего.
Python Modulo — оператор %
Оператор модуля Python (%) используется для получения остатка от деления. Операция по модулю поддерживается для целых чисел и чисел с плавающей запятой.
Синтаксис оператора по модулю: a % b . Здесь «a» — дивиденд, а «b» — делитель. Результат — это остаток от деления a на b.
Если и «a», и «b» являются целыми числами, то остаток также является целым числом. Если одно из них является числом с плавающей запятой, результатом также будет число с плавающей запятой.
Пример оператора модуля Python
Давайте посмотрим на несколько примеров оператора по модулю.
1. По модулю с целыми числами
2. По модулю с поплавком
3. Модульное с пользовательским вводом.
Когда мы получаем данные, введенные пользователем, они имеют форму строки. Мы используем встроенную функцию float() для преобразования их в числа с плавающей запятой. Вот почему остаток равен 1,0, а не 1.
4. Пример ZeroDivisionError
Если делитель равен 0, оператор по модулю выдаст ZeroDivisionError . Мы можем использовать блок try-except, чтобы поймать ошибку.
5. По модулю с отрицательными числами
Оператор модуля Python всегда возвращает остаток, имеющий тот же знак, что и делитель. Это может привести к путанице с выводом.
- -5% 3 = (1-2 * 3)% 3 = 1
- 5% -3 = (-1 * -2 * -3)% 3 = -1
- -10% 3 = (2-4 * 3)% 3 = 2
6. Python Modulo math.fmod()
Поведение оператора% с отрицательными числами отличается от поведения библиотеки C. Если вы хотите, чтобы операция по модулю велась как программирование на C, вам следует использовать функцию fmod() математического модуля. Это рекомендуемая функция для получения чисел с плавающей запятой по модулю.
- fmod (-5, 3) = fmod (-2 -1 * 3, 3) = -2,0
- fmod (5, -3) = fmod (2-1 * -3, -3) = 2,0
- fmod (-10, 3) = fmod (-1-3 * 3, 3) = -1,0
Перегрузка оператора по модулю
Мы можем перегрузить оператор по модулю, реализовав __mod__() в нашем определении класса.
Коротко о проблемах арифметики с плавающей запятой
Мы используем двоичный формат для хранения значений в компьютерах. Что касается дробей, в большинстве случаев мы не можем представить их в точности как двоичные дроби. Например, 1/3 не может быть представлена в точном двоичном формате, и это всегда будет приблизительное значение.
Вот почему вы можете получить неожиданные результаты при выполнении арифметических операций с числами с плавающей запятой. Это ясно из вывода нижеприведенных операций по модулю.
На выходе должно быть 0, потому что 3,2 * 3 равно 9,6. Но значения долей с плавающей запятой не представлены точно, и приближение вызывает эту ошибку. Это тоже видно из этого примера.
Таким образом, вы должны проявлять особую осторожность при работе с числами с плавающей запятой. Желательно выполнить округление, а затем сравнить только два числа с плавающей запятой.