2014-05-20 7 views
12

Was sollte print (-2 ** 2) zurückgeben? Nach meinen Berechnungen sollte es 4 sein, aber der Interpreter gibt -4 zurück.
Ist das Python oder meine Mathematik so schrecklich?Berechnungsfehler mit PW-Operator

+0

Sie sollten (-2) ** 2 statt – sshashank124

+2

Das '-' hat niedrigere Priorität als' ** '. Dies wird interpretiert als - (2 ** 2), nicht (-2) ** 2 ... – l4mpi

+1

Der Hauptgrund, warum dies die meisten Leute verwirrt, ist, dass sie erwarten, dass '-2' eine wörtliche Bedeutung" negative 2 "ist, nicht ein Ausdruck, der "den Negationsoperator auf das Literal 2 zur Laufzeit anwenden" bedeutet. Sobald Sie verstehen, dass es ein Operator ist, ist die Tatsache, dass es ein Präzedenzfall ist, offensichtlich; bis du es tust, es ist verwirrend. (Deshalb werden alle Leute, die darauf stoßen, durch '-2 ** 2', nicht '-x ** 2' verwirrt.) – abarnert

Antwort

22

Gemäß docs hat ** eine höhere Priorität als -, daher entspricht Ihr Code -(2 ** 2). Um das gewünschte Ergebnis erhalten Sie -2 in Klammern

>>> (-2) ** 2 
4 

oder Einbau-verwenden pow function

>>> pow(-2, 2) 
4 

oder math.pow Funktion (Rückkehr float Wert)

>>> import math 
>>> math.pow(-2, 2) 
4.0 
5

Der ** Betrieb genommen könnte, ist vor dem Minus gemacht. Um die erwarteten Ergebnisse zu erhalten, sollten Sie

print ((-2) ** 2) 

From the documentation tun:

So werden in einer unparenthesized Folge von Macht und unäre Operatoren werden die Betreiber von rechts nach links ausgewertet (dies beschränkt nicht die Auswertungsreihenfolge für die Operanden): -1**2 ergibt -1.

Ein voller detail of operators precedence ist auch in der Dokumentation verfügbar. Sie können die letzte Zeile ist (expr) sehen, die die ausdr zwingen, bevor sie verwendet ausgewertet werden, damit das Ergebnis (-2) ** 2 = 4

1

Sie auch Mathematik-Bibliothek ...

math.pow(-2,2) --> 4 
-math.pow(2,2) --> -4 
math.pow(4,0.5) --> 2 
-1

Python hat ein Problem verwenden können, und tut sehe die -2 nicht als Zahl. Dies scheint von Entwurf zu sein, wie es in den Dokumenten erwähnt wird.

-2 wird interpretiert als - (2) {einstellige minus auf positive Zahl 2}

dass in der Regel kein Problem, aber in -a nicht geben ** 2 die ** höhere Priorität hat als - und so mit - interpretiert als ein unärer operatoe anstelle eines Teils der Zahl -2 ** 2 ergibt -2 statt 2