Спасибо вам большое! Это имеет смысл для меня! Изначально я думал о том, что они имели в виду 3 ** 2 ** 2, когда говорили справа налево. Еще раз спасибо!

аю учебник Введение в Python и наткнулся на эту строку:

Операторы в одной строке имеют одинаковый приоритет и применяются слева направо, за исключением возведения в степень, которое применяется справа налево.

Я понимаю большую часть этого, но я не понимаю, почему они говорят, что возведение в степень применяется справа налево. Они также не дают никаких примеров. Кроме того, мне разрешено задавать общие вопросы, подобные этим, или предпочтительнее только вопросы для решения проблем?

 Martijn Pieters♦22 нояб. 2017 г., 09:26
** связывает более плотно, чем умножение или сложение. Так что, этоc * (d ** a) + b.
 Martijn Pieters♦22 нояб. 2017 г., 09:03
И порядок следует математическим соглашениям, так же как умножение, применяемое перед сложением.
 elitecheese133722 нояб. 2017 г., 09:10
В примере a + b ** c * d, я думаю, тогда будет (c * d) ** (a + b), правильно? Потому что согласно порядку старшинства умножение применяется перед сложением.
 Martijn Pieters♦22 нояб. 2017 г., 09:02
Эта формулировка немного сбивает с толку. Речь идет о обязательном поведении, что означает, что вбольшее выражениеопределяя, какие ценности** привязывается к определяется порядком приоритета. Так что вa + b ** c ** dТо, что выполняется первым, определяется порядком приоритета.

Ответы на вопрос(1)

Решение Вопроса

** оператор следуетнормальные математические соглашения; это правоассоциативно:

В обычном жаргоне информатики возведение в степень в математике является правоассоциативным, что означает, что xyz следует читать как х(уz)не (хy)z, В изложениях правил BODMAS, которые достаточно осторожны для решения этого вопроса, правило состоит в том, чтобы сначала оценить верхнюю экспоненту.

и изВикипедия наПорядок действий:

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

Так2 ** 3 ** 4 рассчитывается как2 ** (3 ** 4) (== 2417851639229258349412352) нет(2 ** 3) ** 4 (== 4096).

Это довольно универсально для всех языков программирования; это называетсяправая ассоциативностьхотя тамнаходятся исключения, с Excel и MATLAB быть наиболее заметным.

 elitecheese133722 нояб. 2017 г., 09:30
О хорошо Еще раз спасибо, ха-ха: D
 elitecheese133722 нояб. 2017 г., 09:27
Привет Мартейн. У меня есть еще один вопрос. Не могли бы вы объяснить мне, почему вы выбрали выражение a + b ** c * d в качестве примера? Единственная причина, по которой я спрашиваю, состоит в том, что в выражении есть только один показатель степени. Благодаря ~
 Martijn Pieters♦22 нояб. 2017 г., 09:29
@ elitecheese1337: это должно было бытьa + b ** c ** d, действительно.
 elitecheese133722 нояб. 2017 г., 09:21
Спасибо вам большое! Это имеет смысл! :)
 Martijn Pieters♦22 нояб. 2017 г., 09:29
@ elitecheese1337: это был глупый пример, который не иллюстрирует проблему. Сожалею. : - /

Ваш ответ на вопрос