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

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

В первом модуле вы мельком видели арифметику в Python — при работе с числами int и float. Теперь рассмотрим арифметические операторы детально: полный список, тонкости поведения, приоритеты и практические ситуации, где каждый из них незаменим.

Полный список арифметических операторов

Python поддерживает семь арифметических операторов:

ОператорНазваниеПримерРезультат
+сложение10 + 313
-вычитание10 - 37
*умножение10 * 330
/деление10 / 33.3333...
//целочисленное деление10 // 33
%остаток от деления (modulo)10 % 31
**возведение в степень2 ** 101024

Вы уже знакомы с ними из модуля 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 определяет порядок вычисления по приоритету. От высшего к низшему:

  1. ** (возведение в степень)
  2. +x, -x (унарные операторы)
  3. *, /, //, % (умножение и деление)
  4. +, - (сложение и вычитание)

При одинаковом приоритете операторы выполняются слева направо (кроме **, который правоассоциативен).

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 = 11 * 2 = 22 + 2 = 44 - 1 = 3. Ответ: 3.

Итог

  • Python поддерживает семь арифметических операторов: +, -, *, /, //, %, **.
  • / всегда возвращает float; // — целочисленное деление (округление вниз, в том числе для отрицательных).
  • % — остаток от деления; полезен для проверки чётности, цикличных индексов и разбиения времени.
  • ** — правоассоциативен; 2 ** 3 ** 2 = 2 ** 9 = 512.
  • Приоритет: ** > унарные > * / // % > + -; скобки имеют наивысший приоритет.
  • Если хоть один операнд float — результат float.

В следующем уроке разберём операторы сравнения — инструменты для сравнения значений, которые возвращают True или False.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике