Найти тему

PEMDAS, он же ССУДСВ

Прочитал об этом в одной книжке по 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.

Ну и, повторюсь, способ так себе. Но, возможно, вам встретится где-то эта аббревиатура, и теперь вы знаете, как её расшифровать.

А самый простой способ не накосячить с приоритетом операций - это не запоминать их очерёдность, а просто всегда использовать скобки там, где вы сомневаетесь. Потому что выражение в скобках всегда вычисляется первым.

Ну и второй способ - не составлять слишком сложных выражений. Если формула слишком длинная, то вы в любом случае запутаетесь и совершите ошибку. Один из примеров борьбы с этим я приводил здесь.

На этом пока всё. Подписывайтесь на канал, чтобы ничего не пропустить.