DamiRocK

Python: приоритет операций и скобки при разделении счёта

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

Что вычисляется раньше

В арифметических выражениях умножение, деление, // и % имеют приоритет выше сложения и вычитания. Степень ** имеет более высокий приоритет, чем эти бинарные операции. Скобки позволяют явно объединить нужную часть.

print(2 + 2 * 2)    # 6
print((2 + 2) * 2)  # 8

Задание источника

Пять человек заказали две пиццы по 300 рублей и четыре напитка по 50. Нужно сначала найти общую стоимость, затем разделить её поровну.

print((2 * 300 + 4 * 50) / 5)

Общая сумма равна 800, доля каждого — 160.0. Без скобок выражение 2 * 300 + 4 * 50 / 5 даёт 640.0: деление применяется только к стоимости напитков.

Одинаковый приоритет

Умножение и деление в цепочке вроде 8 / 2 * 3 группируются слева направо; результат — 12.0. Но правило нельзя объявлять универсальным для всех операторов.

Редакционное уточнение к источнику: степень группируется справа. Поэтому 2 ** 3 ** 2 означает 2 ** (3 ** 2) и даёт 512, а (2 ** 3) ** 2 даёт 64.

Читаемость и проверка

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

Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Упражнение сохранено; ассоциативность степени уточнена.

Reading preferences

Appearance
Contrast
More options

Saved only in this browser. Your device’s reduced-motion setting is always respected. Browser zoom works throughout the site.