1.4 Числа и арифметика#

Числовые типы данных#

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

В стандартном Python’е для чисел мы будем использовать два типа данных:

  • int - целочисленный тип

  • float - тип для чисел с плавающей запятой (дробные числа)

Каждый раз, когда мы в коде будем писать какое-то число, на самом деле мы будем создавать новый объект с типом данных int или float. Если с int все очевидно и для создания объектов такого типа мы просто используем цифры, то для float важно отметить, что в качестве разделителя между целой и дробной частью всегда используется ..

Обратимся к примеру, который мы уже видели:

x = 2022  # Здесь мы создаем объект типа int и присваиваем его переменной x
x = 3.14  # А здесь мы уже создаем объект типа float и перезаписываем значение переменной x

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

million = 1_000_000
billion = 1_000_000_000
trillion = 1_000_000_000_000

А дробные числа можно записывать в экспоненциальной форме:

float_number = 1e-3  # = 0.001

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

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

2 + 2  # сложение
4
10 - 2  # вычитание
8
5 * 3  # умножение
15
32 / 2  # деление
16.0
70 // 3  # целочисленное деление
23
92 % 50  # остаток от деления
42
2 ** 3  # возведение в степень
8

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

4 ** 0.5
2.0

Вообще стоит отметить, что в одном выражении мы можем использовать числа разных типов (одновременно и целые, и дробные), это не будет являться ошибкой. Python сам выполнит необходимые преобразования между типами, чтобы получить верный ответ. Однако это справедливо только для чисел.

5 / 2  # если целые числа не делятся друг на друга нацело, получаем дробное
2.5
3 + 3.12  # складывая целое и дробное, получаем дробное
6.12
2.5 + 2.5  # в выражениях только с дробными числами, результат тоже всегда будет дробным
5.0

Расширенные операторы присваивания#

В реальных задачах мы часто будем сталкиваться с тем, что нужно будет просуммировать какой-нибудь набор значений. Допустим, посчитать суммарную площадь полигонов в векторном слое. Для решения такой задачи, скорее всего, нам придется создать некоторую переменную total_area и постоянно прибавлять к ней последующие значения:

total_area = 0  # начальная площадь

total_area = total_area + 25  # добавили площадь одного полигона
total_area = total_area + 35  # добавили площадь второго полигона
...  # и так далее

total_area
60

Чтобы упростить подобную запись, в Python есть расширенные операторы присваивания (Augmented Assignment Operators). Такие операторы совмещают в себе присваивание и арифметическую операцию:

total_area = 0
total_area += 25  # Аналогично записи: total_area = total_area + 25
total_area += 35  # Аналогично записи: total_area = total_area + 35

total_area
60

Подобным образом перед знаком = может использоваться любой арифметический оператор. Приведем ещё несколько примеров:

x = 0

x += 10  # x = x + 10
x -= 10  # x = x - 10
x *= 10  # x = x * 2
x /= 10  # x = x / 10
x //= 10  # x = x // 10
x %= 10  # x = x % 10
x **= 10  # x = x ** 10

Операторы сравнения#

Помимо различных арифметических операций с числами можно производить и операции сравнения аналогично тому, как они работают в математике. В результате таких операций будет получаться новый тип данных - логический (bool).

Логический тип данных может принимать только два значения: True и False (важно использовать значения в правильном регистре, первая буква обязательно заглавная). Дальше по курсу логический тип будет активно использоваться в инструкциях с условиями, а сами условия зачастую будут строиться на основе операций сравнения.

x = 10
y = 5
x > y  # >  - больше
True
x >= y  # >= - больше или равно
True
x < y  # <  - меньше
False
x <= y  # <= - меньше или равно
False
x == y  # == - равно
False
x != y  # != - не равно
True

Приоритет операторов#

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

  1. Выражения в скобках

  2. Возведение в степень

  3. Унарные операции (знаки + - перед числом)

  4. Умножения и деления

  5. Сложения и вычитания

  6. Логические не - not

  7. Логическое и - and

  8. Логическое или - or

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

-2 ** 2
-4
(-2) ** 2
4

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

2 ** 3 ** 2  # = 2 ** 9
512