Что вычисляется раньше
В арифметических выражениях умножение, деление, // и % имеют приоритет выше сложения и вычитания. Степень ** имеет более высокий приоритет, чем эти бинарные операции. Скобки позволяют явно объединить нужную часть.
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. Упражнение сохранено; ассоциативность степени уточнена.