Арифметические операторы и приоритеты
Арифметические операторы и приоритеты
В первом модуле вы мельком видели арифметику в Python — при работе с числами int и float. Теперь рассмотрим арифметические операторы детально: полный список, тонкости поведения, приоритеты и практические ситуации, где каждый из них незаменим.
Полный список арифметических операторов
Python поддерживает семь арифметических операторов:
| Оператор | Название | Пример | Результат |
|---|---|---|---|
+ | сложение | 10 + 3 | 13 |
- | вычитание | 10 - 3 | 7 |
* | умножение | 10 * 3 | 30 |
/ | деление | 10 / 3 | 3.3333... |
// | целочисленное деление | 10 // 3 | 3 |
% | остаток от деления (modulo) | 10 % 3 | 1 |
** | возведение в степень | 2 ** 10 | 1024 |
Вы уже знакомы с ними из модуля 1. Теперь разберём каждый подробнее.
Деление: / против //
Обычное деление / всегда возвращает float:
print(10 / 2) # 5.0 — не 5, именно 5.0
print(7 / 2) # 3.5
print(1 / 4) # 0.25
Целочисленное деление // возвращает целую часть результата (отбрасывает дробную):
print(7 // 2) # 3
print(10 // 3) # 3
print(-7 // 2) # -4 (не -3!)
Важный момент: для отрицательных чисел // округляет вниз (к меньшему числу), а не к нулю. Поэтому -7 // 2 = -4, а не -3. Это называется «floor division» — деление с округлением к полу.
Остаток от деления: %
Оператор % (modulo) возвращает остаток от деления:
print(10 % 3) # 1 (10 = 3*3 + 1)
print(17 % 5) # 2 (17 = 5*3 + 2)
print(100 % 10) # 0 (делится нацело)
Модуль — один из самых полезных операторов в практическом программировании:
- Проверка чётности:
n % 2 == 0— чётное,n % 2 != 0— нечётное. - Цикличность:
i % 7даёт значения 0–6 (день недели, индекс в массиве фиксированного размера). - Последние цифры:
n % 100— последние две цифры числа. - Часы/минуты:
135 % 60 = 15(15 минут из 135).
total_minutes = 135
hours = total_minutes // 60 # 2
minutes = total_minutes % 60 # 15
print(f"{hours}:{minutes:02d}") # 2:15
Возведение в степень: **
print(2 ** 10) # 1024
print(3 ** 3) # 27
print(16 ** 0.5) # 4.0 — квадратный корень (степень 0.5)
print(8 ** (1/3)) # 2.0 — кубический корень
Отрицательные степени дают дроби:
print(2 ** -1) # 0.5 (это 1/2)
print(10 ** -3) # 0.001
** — правоассоциативный оператор: 2 ** 3 ** 2 вычисляется как 2 ** (3 ** 2) = 2 ** 9 = 512, а не (2 ** 3) ** 2 = 64.
Унарный минус и плюс
Унарный минус инвертирует знак числа, унарный плюс — ничего не меняет (на практике не используется):
x = 5
print(-x) # -5
print(+x) # 5 (то же самое)
y = -10
print(-y) # 10 (двойное отрицание)
Приоритет операторов
Когда в одном выражении несколько операторов, Python определяет порядок вычисления по приоритету. От высшего к низшему:
**(возведение в степень)+x,-x(унарные операторы)*,/,//,%(умножение и деление)+,-(сложение и вычитание)
При одинаковом приоритете операторы выполняются слева направо (кроме **, который правоассоциативен).
print(2 + 3 * 4) # 14 (не 20): 3*4=12, 2+12=14
print(10 - 2 * 3 + 1) # 5: 2*3=6, 10-6=4, 4+1=5
print(2 ** 2 ** 3) # 256: 2**3=8, 2**8=256 (правая ассоциативность)
print(10 / 2 / 5) # 1.0: 10/2=5.0, 5.0/5=1.0 (левая ассоциативность)
Скобки управляют порядком
Круглые скобки () имеют наивысший приоритет и позволяют явно задать порядок вычислений:
print((2 + 3) * 4) # 20: сначала скобки
print(2 ** (3 ** 2)) # 512: то же без скобок
print((2 ** 3) ** 2) # 64: другой порядок
# Практический пример — среднее арифметическое:
a, b, c = 70, 85, 92
average = (a + b + c) / 3
print(f"Среднее: {average:.1f}") # 82.3
Без скобок a + b + c / 3 вычислилось бы как a + b + (c / 3) — совсем другой результат.
Целочисленные операции и float
Операции с двумя int возвращают int (кроме / и ** с отрицательной степенью). Если хоть один операнд float — результат тоже float:
print(type(3 + 2)) # int
print(type(3 + 2.0)) # float
print(type(3 * 2)) # int
print(type(10 / 2)) # float (всегда!)
print(type(10 // 2)) # int
print(type(10.0 // 2)) # float (один операнд float)
Проверь себя
Каков результат выражения?
print(2 + 10 % 3 * 2 - 1)
Порядок: 10 % 3 = 1 → 1 * 2 = 2 → 2 + 2 = 4 → 4 - 1 = 3. Ответ: 3.
Итог
- Python поддерживает семь арифметических операторов:
+,-,*,/,//,%,**. /всегда возвращаетfloat;//— целочисленное деление (округление вниз, в том числе для отрицательных).%— остаток от деления; полезен для проверки чётности, цикличных индексов и разбиения времени.**— правоассоциативен;2 ** 3 ** 2 = 2 ** 9 = 512.- Приоритет:
**> унарные >* / // %>+ -; скобки имеют наивысший приоритет. - Если хоть один операнд
float— результатfloat.
В следующем уроке разберём операторы сравнения — инструменты для сравнения значений, которые возвращают True или False.