Прочитал об этом в одной книжке по Python. Показалось забавным. Хотя сомневаюсь в эффективности этой системы. По крайней мере мне от этого легче не стало )))
Итак, в чём суть? Начинающим программистам довольно трудно запоминать большой объём информации, в которую входит, в том числе, и необходимость всегда помнить о приоритете операций (что выполняется сначала, а что потом). И если с выражением:
3 + 2 * 3
справится каждый, кто помнит математику, и скажет, что сначала выполняется умножение, а потом - сложение, и результат будет 9, то с более навороченными выражениями не так всё однозначно. Например, результат этого выражения уже вычислит не каждый:
2 * 3 ** 2
Можете потренироваться, а я пока напомню, что оператор ** в Python выполняет возведение в степень.
Так вот, автор книги предлагает запомнить правила (очерёдность) вычисления согласно приоритету операций с помощью аббревиатуры PEMDAS. Не знаю, почему ему так легче. Мне вот, например, эта аббревиатура ни о чём не говорит. Но раз это существует, то кому-то, наверно, это помогает:
- Parentheses (Скобки).
- Exponentiation (Степень).
- Multiplication (Умножение) и Division (Деление).
- Addition (Сложение) и Subtraction (Вычитание).
Это означает, что приоритет операций выполняется сверху вниз по этому списку. То есть наивысший приоритет имеет выражение, заключённое в круглые скобки (первым делом вычисляется именно оно). Затем выполняется возведение в степень, затем умножение/деление, а затем уже сложение/вычитание.
Если в выражении встречаются операции с одинаковым приоритетом, то они вычисляются слева направо. Например,
10 / 5 * 2
здесь сначала выполняется деление, а потом умножение. И результат будет 4. Ну а приведённый выше пример даст 18:
2 * 3 ** 2 = 18
поскольку сначала выполняется возведение в степень, а потом умножение. Если надо сделать наоборот, то используются скобки:
(2 * 3) ** 2
Здесь результат уже будет 36.
Ну и, повторюсь, способ так себе. Но, возможно, вам встретится где-то эта аббревиатура, и теперь вы знаете, как её расшифровать.
А самый простой способ не накосячить с приоритетом операций - это не запоминать их очерёдность, а просто всегда использовать скобки там, где вы сомневаетесь. Потому что выражение в скобках всегда вычисляется первым.
Ну и второй способ - не составлять слишком сложных выражений. Если формула слишком длинная, то вы в любом случае запутаетесь и совершите ошибку. Один из примеров борьбы с этим я приводил здесь.
На этом пока всё. Подписывайтесь на канал, чтобы ничего не пропустить.