2014-12-03 5 views
0

파이썬은 숫자의 올바른 값을 0의 제곱으로 반환하는 데 문제가있는 것 같습니다. 리터럴 방정식을 사용하면 제대로 작동하지만 항상 0보다 큰 정수보다 더 복잡한 경우에는 양수 1을 반환합니다.
다음은 몇 가지 테스트입니다제로 지수 방정식에 표시가있는 문제

>>> -40 ** 0 # this is the correct result 
-1 
>>> (0 - 40) ** 0 # you'd expect this to give the same thing, but... 
1 
>>> a = -40 # let's try something else... 
>>> a ** 0 
1 
>>> int(-40) ** 0 # this oughtn't to change anything, yet... 
1 
>>> -66.6 ** 0 # raw floats are fine. 
-1.0 
>>> (0 - 66.6) ** 0.0 # ...until you try and do something with them. 
1.0 

UPDATE : pow()도이 결과를 제공, 그래서 아마 첫 번째 결과는 특별하다 ...

>>> pow(-60, 0) 
1 

이 서명 정수와 약간의 문제가 될 수 있을까요? 입력이 양수 또는 음수 값인지 또는 0인지에 따라 값 1, -1 또는 0을 갖는 3 진 스위치에이 값이 필요합니다. 내 목적 변수 스위치를 사용하여 다음

if val > 0: switch = 1 
elif val < 0: switch = -1 
else:   switch = 0 

을 ... 그리고 : 나는 같은과 같은 일을 수행 할 수 있습니다.
하지만 그건 파이썬이 제로 - 파워를 다루는 방법에 관한 질문에 대답하지 못할 것입니다.
(... 나는 또한 -40 ** 0는 사고 (급격하게)에 의해 -1 반환 것을 받아 들일 것입니다,하지만이 경우 의심)

+1

'0'의 제곱으로 올림 된 0이 아닌 정수는 '+ 1'을 반환해야합니다. 따라서'(0-40) ** 0'은 정확하게 '+ 1'을 생성합니다. '-40 ** 0'이'-1'을 리턴하는 이유는'**'가'-'보다'40 '에 더 강하게 묶이기 때문입니다. – eigenchris

+0

나는 그때'a = -60; ** 0 -> 1'은'(-60) ** 0'으로 평가됩니까? 그건 나에게 맞는 말이야. – Augusta

+0

맞습니다. :) – eigenchris

답변

4

파이썬은 정확하고 사용자가 기대하는 바를 수행합니다. 그것은 운영 질서의 문제입니다. 제로의 힘에 대한 숫자 (음 또는 양수)는 1과 같습니다. 그러나 곱셈은 조작 순서에서 뺄셈 전에옵니다. 그래서 더 구체적으로, 어떤 파이썬보고하면이입니다 1 일 경우 :

-40 ** 0 = -(40 ** 0) = -(1) = -1 

2의 경우 :

(0 - 40) ** 0 = (-40) ** 0 = 1 

5 경우뿐만 아니라 그것을 괄호과 관련이있다

int(-40) ** 0 = (-40) ** 0 = 1 
+0

Aa, 알겠습니다. 저에게 설명해 주셔서 감사합니다. 나는 첫 번째 예 (즉, 내가 원했던 것을 나에게 준 것)가 예외적일지도 모른다고 생각했지만 그렇지 않았 으면 좋겠다고 생각했다. 나는'a = -60;이라고 상상한다. ** 0 -> 1'은'(-60) ** 0'으로 평가 될 것입니다. +1로도 해결됩니다 ... 흠 ... 젠장. – Augusta

1

가 바로이 질문에 stumpled, 나는 구문을하지 않습니다.

하지만 (-40)^0 = -40^0이라고 생각하지 않습니다.

왼쪽에서 지수가 마지막 조작입니다. 이것이 왼쪽면이 1과 같아야하는 이유입니다. 오른쪽에서 음수 기호가 마지막 조작입니다. 이것이 결과가 -1이되는 이유입니다.

1

여기에 문제가 없습니다. power0의 모든 숫자는 1입니다. -.+,... 같은 파이썬 표지판에서

전력 (**) 그래서 덜 된 우위를 가지고 당신이 괄호로 묶다 내부 0 - 40을 넣을 때 1입니다 (-1)**0을 가지고 있지만 당신이 -1**0을 수행 할 때 먼저 1**0 다음 - 있습니다.

>>> (0-4)**0 == (-1)**0 == 1 
>>> -1**0 == -(1**0) == -1