Арифметические операции
В Python числа поддерживают широкий спектр арифметических операций, которые являются основой для выполнения математических расчетов. Возможны как самые простые операции: сложение, вычитание, умножение и деление, так и более специфичные: получение остатка от деления, целочисленное деление и возведение в степень.
|
Приоритет |
Оператор |
Описание |
Пример |
Результат |
|---|---|---|---|---|
|
1 |
|
Возведение левого операнда в степень правого |
|
|
|
2 |
|
Получение остатка от деления левого операнда на правый |
|
|
|
2 |
|
Целочисленное деление левого операнда на правый |
|
|
|
2 |
|
Деление левого операнда на правый |
|
|
|
2 |
|
Умножение левого операнда на правый |
|
|
|
3 |
|
Вычитание правого операнда из левого |
|
|
|
3 |
|
Сложение правого и левого операнда |
|
|
Арифметические операции в 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
0 комментариев