Mit Operatoren in Python rechnen
Arithmetische Operatoren legen fest, welche Rechnung Python ausführt. + addiert Werte, * multipliziert sie und ** potenziert einen Wert.
Python besitzt sieben grundlegende arithmetische Operatoren. Ihre Priorität bestimmt die Gruppierung der Operationen, wenn keine Klammern diese Gruppierung vorgeben.
Rangfolge der Operatoren
Enthält ein Ausdruck mehrere arithmetische Operatoren, braucht Python eine feste Reihenfolge, um zu entscheiden, welche Rechnung zuerst läuft. Diese Reihenfolge ergibt sich aus drei Prioritätsstufen. Die Priorität bestimmt die Gruppierung der Operationen. Klammern können diese Gruppierung ändern.
Höchste Priorität
Potenzierungsoperator
Der Operator ** dient zum Potenzieren und hat unter den sieben hier behandelten binären Operatoren die höchste Priorität. Anders als die übrigen Operatoren ist er rechtsassoziativ.
>>> 2**3
8
>>> 2**-1
0.5
>>> 2**0.5
1.4142135623730951Mit ** lassen sich Quadrate, Kubikzahlen, Wurzeln und negative Potenzen berechnen. Eine Quadratwurzel kann zum Beispiel als Potenz mit dem Exponenten 0.5 geschrieben werden.
Mittlere Priorität
Zur mittleren Prioritätsstufe gehören vier Operatoren, die in vielen Berechnungen vorkommen.
Multiplikationsoperator
Der Operator * multipliziert zwei Zahlen.
Divisionsoperator
Der Operator / dividiert zwei Zahlen und liefert für Operanden vom Typ int oder float einen Float, auch wenn beide ganze Zahlen sind.
>>> 7.0 / 2.0
3.5
>>> 7.0 / 2
3.5
>>> 7 / 2.0
3.5
>>> 7 / 2
3.5
>>> 4 / 2
2.0Obwohl 4 / 2 mathematisch ganzzahlig ist, gibt Python das Ergebnis als Float zurück.
Abrundungsdivision
Der Operator // führt eine Abrundungsdivision aus. Er rundet den Quotienten auf die größte ganze Zahl ab, die kleiner oder gleich dem exakten Ergebnis ist.
>>> 4 // 2
2
>>> 7 // 2
3
>>> -7 // 2
-4
>>> 7.0 // 2
3.0Die Abrundung erfolgt in Richtung negativ unendlich. Bei -7 // 2 erhält Python zunächst -3.5 und rundet dann auf -4 ab. Ist mindestens ein Operand ein Float, wendet Python dieselbe Abrundung an, gibt das Ergebnis aber als Float zurück.
Modulo-Operator %
Der Operator % liefert den zur Abrundungsdivision gehörenden Rest. Für ganzzahlige Operanden und einen Divisor ungleich null gilt exakt .
>>> 5 % 4
1
>>> -5 % 4
3
>>> 5 % -4
-3
>>> -5 % -4
-1Auch bei negativen ganzen Zahlen bleibt diese Gleichung gültig. Daher ist 5 % 4 gleich 1, während -5 % 4 den Wert 3 ergibt. Modulo eignet sich für Teilbarkeitstests und bei nichtnegativen ganzen Zahlen zum Bestimmen der letzten Ziffer.
Niedrigste Priorität
Addition und Subtraktion besitzen eine niedrigere Priorität als die anderen fünf Operatoren. Klammern können die Gruppierung weiterhin ändern. In 2 + 3 * 4 multipliziert Python zuerst und addiert danach, das Ergebnis ist 14. Damit die Addition früher stattfindet, setzt du sie in Klammern und schreibst (2 + 3) * 4.
Vorrangregeln und Assoziativität
Priorität und Assoziativität bestimmen die Gruppierung der Operationen. Python wertet die Operanden von links nach rechts aus. Die Priorität gruppiert Operatoren verschiedener Stufen. Die Assoziativität gruppiert Operatoren derselben Stufe. Beide Regeln greifen auf die Operatoren zu, die du geschrieben hast, sodass 2 ** 3 ** 2 und 8 - 3 - 2 jeweils genau eine Lesart haben.
Ausdrucksbewertungsreihenfolge
Drei Regeln bestimmen die Gruppierung der Operationen in einem Ausdruck.
- Rangfolge bestimmt, welche Operatoren stärker binden
- Linke Assoziativität gilt für Operatoren mit derselben Priorität, mit Ausnahme der Potenzierung
- Klammern können die Auswertungsreihenfolge ändern
>>> 2 + 4 * 3
14
>>> (2 + 4) * 3
18
>>> 2 * 2**3
16
>>> 6 / 2 * 4
12.0
>>> 6 / (2 * 4)
0.75Assoziativitätsregeln
Die Assoziativität bestimmt die Gruppierung bei gleicher Priorität.
Linke Assoziativität
Die meisten binären Rechenoperatoren gleicher Priorität werden von links nach rechts gruppiert.
>>> 6 / 2 * 4
12.0
>>> 10 - 3 - 2
5Multiplikation und Division haben dieselbe Priorität. Deshalb liest Python diesen Ausdruck von links nach rechts: 6 / 2 * 4 = (6 / 2) * 4 = 12.
Rechte Assoziativität
Unter diesen sieben Operatoren wird der Potenzierungsoperator ** von rechts nach links gruppiert.
>>> 2 ** 3 ** 2
512
>>> 3 ** 2 ** 2
81Python gruppiert aufeinanderfolgende Potenzen von rechts nach links: 2 ** 3 ** 2 = 2 ** (3 ** 2) = 2 ** 9 = 512.
Python Shell als Rechner
Die Python-Shell lässt sich direkt als Rechner verwenden. Nach der Eingabe eines mathematischen Ausdrucks wertet Python ihn sofort aus.
Für Operanden vom Typ int oder float liefert / einen Float. // liefert bei zwei ganzzahligen Operanden einen Integer und bei mindestens einem Float einen Float. Beim Modulo hat ein von null verschiedenes Ergebnis dasselbe Vorzeichen wie der Divisor. Die zuvor gezeigte Identität gilt für ganze Zahlen exakt. Bei Gleitkommaoperationen können Rundungen auftreten.
Übersichtstabelle der arithmetischen Operatoren
| Vorrang | Operator | Operation | Assoziativität |
|---|---|---|---|
| Höchste | ** | Potenzierung | Rechts |
| Mittel | * | Multiplikation | Links |
| Mittel | / | Division | Links |
| Mittel | // | Abrundungsdivision | Links |
| Mittel | % | Modulo | Links |
| Niedrigste | + | Addition | Links |
| Niedrigste | - | Subtraktion | Links |
Die Rangfolge der Operatoren bestimmt die Gruppierung eines arithmetischen Ausdrucks. Wenn eine andere Reihenfolge gemeint ist oder der Ausdruck leichter lesbar werden soll, machen Klammern diese Absicht eindeutig.