2010-05-21 3 views
16

나는 "실수로"(매도 없음을 위해 : 마이너스 기호, 그것은, 6 다른 0 출력하는 이유는 무엇입니까?)이 이상하지만 올바른 구문나는 왜 파이썬에서 i +++++++++가 유효합니까?

i=3 
print i+++i #outputs 6 
print i+++++i #outputs 6 
print i+-+i #outputs 0 
print i+--+i #outputs 6 

건너 온

이 유용 아무것도 할 수 있습니까?

업데이트 (그것을 잘못 way..I 사랑 파이썬을하지 마십시오) : 파이썬의 원칙 하나는 이 one--하고 그것을 할 바람직 하나 --obvious 방법이 있어야한다고 말했습니다. i + 1을 수행 할 수있는 무한한 방법이있는 것 같습니다.

+3

당신이 그것을 발견했습니다. 난독 화 된 코딩 콘테스트에서? – extraneon

+1

-1 : 솔루션에 어떤 프로그래밍 문제가 있습니까? 그 코드를 멀리 던져주세요. –

+1

키보드의 부스러기를 다시 청소해야합니다. –

답변

28

파이썬에는 C 스타일의 ++ 또는 연산자가 없으므로, 사용자가 부정확하거나 긍정적 인 (?) 값을 가질 것이라고 추측 할 수 있습니다. 왼쪽.

예. i + +5은 무엇을 기대 하시겠습니까?

factor: ('+'|'-'|'~') factor | power 

식의 요인이 +, -, 또는 ~ 앞에 요인이 될 수 있다는 것을 의미한다 :

i=3 
print i + +(+i) #outputs 6 
print i + +(+(+(+i))) #outputs 6 
print i + -(+i) #outputs 0 
print i + -(-(+i)) #outputs 6 

특히, Python Grammar Specification에서, 당신은 라인을 볼 수 있습니다. 나는. 재귀 적입니다. 따라서 5이 요인 (factor-> power-> NUMBER이기 때문에) 인 경우 -5이 요소이므로 --5--------5입니다.

5

더하기 기호는 + (- 3) = -3 또는 + (+ (+ 3))) = 3과 같이 가장 오른쪽의 i 변수의 단항 연산자로 간주됩니다. 마이너스)는 바이너리로 파싱되므로 i ++ + i = i + (+ (+ i))로, i + i = 3 + 3 = 6으로 변환됩니다.

다른 표현은 동일한 원칙을 따릅니다.

입니다
print i + (+ (+i)) 

은, 첫 징후는 또한 연산자 읽어야

5

, 다른 사람은 중위 징후

+i 

하고 (불행하게도)

++i 

가되어 있습니다 따라서 유효한 진술.

+2

나는 마지막 것이 좋습니다. ++ 나는 유효하다, 다른 언어에서하는 것을하지 않는다. :) – extraneon

+0

정확히! (그리고 조금 무서운) – UncleZeiv

관련 문제