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

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

Приоритет

Оператор

Описание

Пример

Результат

1

**

Возведение левого операнда в степень правого

3 ** 2
2 ** 3

9
8

2

%

Получение остатка от деления левого операнда на правый

7 % 2
13 % 5

1
3

2

//

Целочисленное деление левого операнда на правый

5 // 2
70 // 8

2
8

2

/

Деление левого операнда на правый

12 / 5
75 / 6

2.4
12.5

2

*

Умножение левого операнда на правый

10 * 5
3 * 6

50
18

3

-

Вычитание правого операнда из левого

87 - 5
54 - 10

82
44

3

+

Сложение правого и левого операнда

12 + 6
76 + 1

18
77

Арифметические операции в Python выполняются как в математике, то есть сначала выполняется возведение в степень (**), затем – умножение (*) и деление (/// и %), и в последнюю очередь – сложение (+) и вычитание (-). При этом операторы, имеющие одинаковый приоритет, выполняются слева направо.

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

print(2 + 2 * 2)  
# Вывод: 6 
print((2 + 2) * 2) 
# Вывод: 8

Особенности операции деления

При обычном делении (/) результатом всегда является число с плавающей точкой (тип float), даже если деление происходит нацело:

print(6 / 3) 
# Вывод: 2.0

Но при целочисленном делении (//) возвращается целая часть от деления без дробного остатка, поэтому результатом будет целое число (тип int):

print(7 // 2)  
# Вывод: 3

Также Python позволяет сразу получить остаток от деления:

print(7 % 2)
# Вывод: 1

Остаток от деления – это число, которое остаётся после того, как одно число поделили нацело на другое. Так, когда мы нацело поделили 7 на 2, то получили число 3, однако ещё осталось число 1, так как 7 – 3 2 = 1. То есть этот оставшийся после деления «кусочек» делимого числа и является остатком от деления.

Нахождение остатка от деления часто используется для проверки кратности числа или определения четности/нечетности:

print(21 % 2)  # Число нечётное, так как остаток не равен 0
# Вывод: 1 
print(40 % 2)  # Число чётное, так как остаток равен 0
# Вывод: 0

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

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

Арифметические операции с присваиванием
Оператор Описание Пример Аналог
+= Сложение правого и левого операнда, и присваивание результата левому операнду x += 2 x = x + 2
-= Вычитание правого операнда из левого, и присваивание результата левому операнду x –= 2 x = x – 2
*= Умножение левого операнда на правый, и присваивание результата левому операнду x *= 2 x = x * 2
/= Деление левого операнда на правый, и присваивание результата левому операнду x /= 2 x = x / 2
//= Целочисленное деление левого операнда на правый, и присваивание результата левому операнду x //= 2 x = x // 2
%= Получение остатка от деления левого операнда на правый, и присваивание результата левому операнду x %= 2 x = x % 2
**= Возведение левого операнда в степень правого, и присваивание результата левому операнду x **= 2 x = x ** 2

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

number1 = 10
number1 += 5  # Эквивалентно number1 = number1 + 5
print(number1) 
# Вывод: 15

number2 = 18
number2 //= 10  # Эквивалентно number2 = number2 // 10
print(number2) 
# Вывод: 1

Расширенные операторы присваивания могут использоваться только с переменными, которые уже были определены ранее. Попытка использовать их с несозданными переменными приведет к ошибке NameError:

age += 1 
# Ошибка: NameError: name 'age' is not defined

Примеры

Пример 1. Расчёт количества рулонов обоев

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

# Размеры комнаты в метрах
width_room = 4.5  # Ширина комнаты (м)
length_room = 6   # Длина комнаты (м)
height = 2.7       # Высота комнаты (м)
 
# Размеры рулона обоев
wallpaper_width = 0.53  # Ширина рулона (м)
wallpaper_length = 10   # Длина рулона (м)

# Периметр комнаты (P = 2 * (a + b))
perimeter = 2 * (width_room + length_room)
 
# Количество полос обоев (делим периметр на ширину рулона)
strips = perimeter / wallpaper_width
 
# Количество полос из одного рулона (длина рулона / высота комнаты)
strips_per_roll = wallpaper_length // height  # Целочисленное деление
 
# Итоговое количество рулонов (округляем в большую сторону)
rolls = strips / strips_per_roll
print("Нужно рулонов:", int(rolls + 0.5))

Для упрощения расчётов в данном примере не учитываются окна и двери. Однако обои продаются только целыми рулонами, поэтому здесь к результату прибавляется 0.5 для округления к большему ближайшему целому, однако позже мы познакомимся со специальными функциями округления.

Вывод:

Нужно рулонов: 14

Пример 2. Расчёт среднего балла студента

Электронный журнал позволяет посчитать средний балл студента по нескольким предметам и корректно округлить его для отображения в отчете:

# Оценки студента по разным предметам
math_grade = 4  # Оценка по математике
physics_grade = 5  # Оценка по физике
literature_grade = 3  # Оценка по литературе
history_grade = 3  # Оценка по истории
# Количество предметов
num_subjects = 4
 
# Вычисляем сумму баллов
total_grades_sum = math_grade + physics_grade + literature_grade + histo-ry_grade
 
# Вычисляем средний балл (обычное деление, результат float)
average_grade = total_grades_sum / num_subjects
print(f"Средний балл: {average_grade }")

Вывод:

Средний балл: 3.75

Итоги

  • Python поддерживает основные арифметические операции: сложение (+), вычитание (-), умножение (*), деление (/), возведение в степень (**), целочисленное деление (//) и получение остатка от деления (%).
  • Приоритет арифметических операций соответствует математическому, но порядок действий можно изменить с помощью круглых скобок.
  • Обычное деление (/) возвращает число с плавающей точкой (float), даже если результат целое число.
  • Целочисленное деление (//) возвращает целую часть от деления (int).
  • Арифметические операторы присваивания (например, +=, -=, *=) совмещают операцию и присваивание (x += 5 эквивалентно x = x + 5). Они работают только с уже созданными переменными.

Задания для самопроверки

1. Опишите приоритет выполнения арифметических операций.

Сначала выполняется возведение в степень (**), затем – умножение (*) и деление (/, // и %), и в последнюю очередь – сложение (+) и вычитание (-). При этом операторы, имеющие одинаковый приоритет, выполняются слева направо.

2. Как происходит целочисленное деление в Python?

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

3. Что будет выведено на экран в результате выполнения данного кода?

print(13 % 2 + 1)
print(2 ** 3 // 3)
print(10 / 2 ** 2)
print(-25 * 4 / 5)
print((2 + 3) ** 2)
print(2 + 3 ** 2)
2
2
2.5
-20.0
25
11

4. Что будет выведено на экран в результате выполнения данного кода?

n1 = 10 % 3 + 2
n1 /= 3
print(n1)

n2 = 3 ** 2
n2 -= 1
print(n2)

n3 = 21 // 4
n3 += 2
print(n3)

n4 = 12 - 4 ** 2
n4 *= 3
print(n4)

n5 = 30 / 2
n5 %= 2
print(n5)
1.0
8
7
-12
1.0