2017-11-22 4 views
1

나는 인트로 파이썬 교과서를 읽고이 줄을 건너 온 오전 : 같은 행에왜 지수는 오른쪽에서 왼쪽으로 적용됩니까?

연산자는 같은 우선 순위를 가지고 오른쪽에서 왼쪽으로 적용 지수를 제외하고, 왼쪽에서 오른쪽으로 적용됩니다.

나는 대부분 이것을 이해하지만, 왜 그들은 지수가 오른쪽에서 왼쪽으로 적용된다고 말하는지 이해할 수 없다. 어떤 예도 제공하지 않습니다. 또한, 이와 같은 일반적인 질문을 할 수 있습니까, 아니면 단지 문제 해결 질문 만 선호합니까? 같은 상자 그룹에 http://docs.python.org/reference/expressions.html

사업자

+0

그 말씨가 약간 혼란 스럽습니다. 바인딩 동작에 대해 이야기하고 있습니다. 즉, * 큰 표현식 *에서 '**'가 바인딩하는 값을 결정하는 것은 우선 순위에 따라 결정됩니다. 그래서'a + b ** c ** d'에서 먼저 실행되는 것은 우선 순위에 의해 결정됩니다. –

+0

그리고 순서는 덧셈 전에 곱셈이 적용되는 것처럼 수학 관습에 따릅니다. –

+0

예제에서 a + b ** c * d는 (c * d) ** (a + b) 일 것입니다. 맞습니까? 우선 순위에 따라 곱하기가 덧셈 전에 적용되기 때문입니다. – elitecheese1337

답변

3

** 연산자는 다음과 같습니다. normal mathematical conventions; 그것은 바로 연관이다 : 일반적인 컴퓨터 과학 용어에

, 수학 지수는 오른쪽 연관이라고 Z는는 X 로서 (Y Z)를 읽어야 Y x를 , 아니 (x y) z. 이 문제를 충분히 다룰 수있는 BODMAS 규칙을 설명 할 때 가장 먼저 지수를 평가하는 것이 규칙입니다.

Wikipedia on the Order of Operations에서

: 지수가 쌓인 기호로 표시되어있는 경우, 일반적인 규칙이 exponention 수학에서 마우스 오른쪽 연관이 있기 때문에, 위에서 아래로 작업하는 것입니다

.

는 그래서 2 ** 3 ** 42 ** (3 ** 4) (== 2,417,851,639,229,258,349,412,352)하지 (2 ** 3) ** 4 (== 4096)과 같이 계산된다.

이것은 프로그래밍 언어 전반에서 매우 보편적입니다. right-associativity이라고하며, 예외이며, Excel 및 MATLAB이 가장 눈에 띄는 곳입니다.

+0

정말 고마워요! 이것은 완벽한 의미가됩니다! :) – elitecheese1337

+0

안녕 Martijn. 나는 한 가지 더 질문이있다. 처음에 a + b ** c * d라는 표현을 선택한 이유를 설명해 주시겠습니까? 내가 요구하는 유일한 이유는 식에 하나의 지수 만 있기 때문입니다. 감사합니다 ~ – elitecheese1337

+0

@ elitecheese1337 : 그것은 벙어리 예제, 문제를 설명하지 못했습니다. 죄송합니다. :/ –

1

는 오른쪽 (왼쪽에서 오른쪽으로 모두가 같은 우선 순위와 체인을 가지고 테스트를 포함하여 비교를 제외하고 왼쪽 -에서 어떤 그룹, 지수 - 섹션 비교를 참조 오른쪽에서 왼쪽으로).

  1. 하는 마지막 evals하는 데 도움이 65536 희망에 2 ** (2 ** (2 ** 2))
  2. 2 ** (2 ** (4)) # progressing right to left
  3. 2 ** (16) # this is 2 to the power 16 로 분류 -

    중간 경우 2 ** 2 ** 2 ** 2를 들어
    >>> 2 ** 2 ** 2 
    16 
    >>> 2 ** 2 ** 2 ** 2 
    65536 
    >>> (2 ** 2 ** 2) ** 2 
    256 
    

    ,이 중간 단계입니다!

+0

나는 예기치 않은 행동에서 예상치 못한 행동으로 넘어가는 상황을 설명하는 예제를 나열하고자했다. 그러나 당신이 말하는 것은 의미가있다. –

+0

@EricDuminil은 더 많은 워드 프로세서를 추가했다. 그것이 도움이되는지보기 –

0

이 설명은 분명합니다. 내가 당신이 계몽 수있는 예를 보여 드리죠 : 왼쪽에서 오른쪽으로 당신이이 글을 읽을한다면, 먼저, 4 초래 2 ** 2, 다음 4 ** 3 할 것

print 2 ** 2 ** 3 # prints 256

을 우리에게 줄 것이다 64. 우리에게는 잘못된 대답이있는 것 같습니다. :)

그러나 오른쪽에서 왼쪽으로 ... 먼저 2 ** 3을 입력하면됩니다. 그러면 8이되고 다음에 2 ** 8이 주어지면 256이됩니다.

나는이 점을 깨달을 수 있었으면 좋겠다. :)

편집 : Martijn Pieters가 질문에 대해 더 정확하게 대답했습니다. 죄송합니다. 나는 그것이 수학적 관례라고 말한 것을 잊어 버렸다.

+0

정말 고마워요! 이것은 나에게 완벽하게 이해된다! 원래 생각 나는 것은 그들이 왼쪽에서 오른쪽으로 말했을 때 3 ** 2 ** 2를 의미한다는 것입니다. 다시 한 번 감사드립니다! – elitecheese1337

관련 문제