Rechnen und Operatoren
Sobald Python installiert und gestartet ist, können Sie damit rechnen. Tippen Sie die gewünschte Rechenoperation in die Befehlszeile ein und drücken Sie Enter. Das Ergebnis wird Ihnen in der nächsten Zeile angezeigt.
Hier ein paar Beispiele (probieren Sie es ruhig selbst aus):
>>> 3
3
>>> 1+2
3
>>> 8/3*3
8.0
>>> 8//3*3.0
6.0
>>> 8%3*3
6
>>> 8//3*3
6
>>> 8/0.7
11.428571428571429
Wie Ihnen vielleicht auffällt, wird das Ergebnis unterschiedlich dargestellt, mal als Ganzzahl (6) oder als Gleitkommazahl (11.428571428571429). Dies liegt daran, dass Python unterschiedliche Datentypen für Zahlen nutzt. Bevor wir näher auf dieses Thema eingehen, schauen wir kurz, welche Rechenoperatoren Sie nutzen können.
Rechenoperatoren
[Bearbeiten]Python stellt Ihnen sieben verschiedene Rechenoperatoren zur Verfügung (die Spalte „Verknüpfung“ ist jeweils mit einem Link zum Wikipedia-Artikel versehen).
| Verknüpfung | Operator-Symbol | Beispiel | Ergebnis |
|---|---|---|---|
| Potenz | ** | 2**3 | 8 |
| Multiplikation | * | 2 * 3 | 6 |
| Division | / | 14 / 3 | 4.666666666666667 |
| Ganzzahlige Division | // | 14 // 3 | 4 |
| Modulo | % | 14 % 3 | 2 |
| Addition | + | 1 + 2 | 3 |
| Subtraktion | - | 10 - 3 | 7 |
Überraschend ist vielleicht ** für die Potenzrechnung, statt des gewohnten 2³. Grund dafür ist schlicht die einfache und schnelle Eingabe über die Tastatur.
Aus dem Alltag ungewohnt (weil selten genutzt) sind vielleicht die ganzzahlige Division und der Modulo (die klassische Division in Zeile eins):
>>> 9/4
2.25
>>> 9//4
2
>>> 9%4
1
Sie sind aber wichtig für das Verstehen der Datentypen. Folgendes Beispiel aus der Wikipedia soll zur Verdeutlichung dienen:
9 : 4 = 2, Rest 1, da 9 = 4 × 2 + 1 („4 passt 2-mal in 9 und es bleibt 1 übrig“ – der Rest ist also 1)
Möglicherweise sehen sie jetzt schon, wie Sie dieses Beispiel auf Python übertragen können:
9 // 4= 2 („4 passt 2-mal in 9...)9 % 4= 1 (...und es bleibt 1 übrig“ – der Rest ist also 1)
Bitweise Operatoren
[Bearbeiten]Wie in anderen Programmiersprachen gibt es auch in Python Operatoren für Bitmanipulation ganzer Zahlen:
| Operation | Operator-Symbol | Beispiel | Ergebnis | binär |
|---|---|---|---|---|
| bitweises Und | & | 7 & 1 | 1 | 111 (7)001 (1)001 (1)
|
| bitweises Oder | | | 5 | 3 | 7 | 101 (5)011 (3)111 (7)
|
| bitweises XOR | ^ | 7 ^ 3 | 4 | 111 (7)011 (3)100 (4)
|
| bitweises Not | ~ | ~7 | -8 | 0...0111 (7)1...1000 (-8)
|
| bitweise Verschiebung (shift) nach links | << | 1 << 3 | 8 | 00011000
|
| bitweise Verschiebung (shift) nach rechts | >> | 10 >> 1 | 5 | 10100101
|
Rangfolge der Operatoren
[Bearbeiten]Wie das folgende Beispiel verdeutlicht, wird das Rechenergebnis durch die Priorität beeinflusst, in welcher die Rechenoperationen durchgeführt werden:
>>> 4+2**3
12
>>> (4+2)**3
216
Wie sieht also die Operatorrangfolge in Python aus?
- als erstes werden Klammern ausgewertet
- danach die Potenzen
- Multiplikation/Division/Division mit Rest/Modulo
- als letztes die Addition/Subtraktion
Die Einträge einer Zeile sind dabei gleichberechtigt. Gleichberechtigte Einträge werden meistens von links nach rechts ausgewertet; die wichtigste Ausnahme ist das Potenzieren: 2**2**3 = 2**(2**3) = 256. Diese Eigenschaft der Operatoren wird Operatorassoziativität[1] genannt.
Auf der Seite Rangfolge der Operatoren im Anhang ist eine Tabelle mit der Rangfolge und Assoziativität aller Operatoren.
Zahlen: int und float
[Bearbeiten]Kommen wir zurück zu unserem Eingangsbeispiel:
>>> 1+2
3
>>> 8/0.7
11.428571428571429
Python 3 unterscheidet zwischen Ganzzahlen und Gleitkommazahlen. Letztere haben einen gebrochenen Teil hinter dem Dezimaltrennzeichen. Als Dezimaltrennzeichen nutzt Python den Punkt (.), und nicht, wie in Deutschland üblich, das Komma (,). Ein 3.1 entspricht also dem deutschen 3,1. Die beiden Typen werden mit den englischen Wörtern int für integer (Ganzzahlen) und float (Gleitkommazahlen) bezeichnet.
Im Gegensatz zu manch anderen Programmiersprachen nimmt uns Python hier viel Arbeit ab. Dies betrifft besonders die Speicherung (besonders die Reservierung und Freigabe von Arbeitsspeicher). Dies wird im nächsten Kapitel deutlicher werden. Um zu erfahren, welchen Datentyp Python ausgewählt hat, nutzen wir die Funktion type():
>>> type(1+ 2)
<class 'int'>
>>> type (8/0.7)
<class 'float'>
>>> type(11.428571428571429)
<class 'float'>
Als Ergebnis teilt uns Python den jeweiligen Datentyp (class) mit.
Die Leerzeichen hinter „type“ und vor der „2“ sind übrigens absichtlich gewählt um zu zeigen: Python ist clever genug, um sich davon nicht durcheinander bringen zu lassen. Trotzdem ist es natürlich sinnvoll, innerhalb eines Programmes die Leerzeichen nicht willkürlich zu platzieren, allein schon wegen der besseren Lesbarkeit für Menschen. Am Anfang einer Zeile ist die Anzahl der Leerzeichen sogar vorgegeben, wie wir später noch sehen werden.
Exkurs: Vermutlich werden Sie früher oder später über den Datentyp long stolpern. Dieser wurde, in den Versionen vor Python 3, für den Umgang mit und die Speicherung großer Zahlen genutzt. In Python 3 hat int diese Rolle mit übernommen.
int
[Bearbeiten]Ganzzahlige Literale (numerische Konstanten) können in Python als Dezimal-, Binär-, Oktal- oder Hexadezimalzahlen mit oder ohne Vorzeichen ausgedrückt werden.
Wir Menschen rechnen hauptsächlich im Dezimalsystem, also dem Zahlensystem mit der Basis 10. Folgende Tabelle zeigt die Darstellung ganzer Zahlen in den anderen genannten Zahlensystemen:
| Zahlensystem | Basis | Präfix | Beispiel | in Dezimal |
|---|---|---|---|---|
| Dual-/Binär- | 2 | 0b | 0b11 | 3 |
| Oktal- | 8 | 0o | 0o11 | 9 |
| Hexadezimal- | 16 | 0x | -0x11 | -17 |
Das Präfix muss der jeweiligen Zahl vorangestellt werden und beginnt immer mit 0 (Null) und einem Buchstaben:
>>> 0b11
3
>>> 0o11
9
>>> 0X11
17
Wie Sie sehen können, gibt Python die Zahlen standardmäßig im Dezimalsystem aus.
float
[Bearbeiten]Gleitkommazahlen werden in Python mit Dezimalpunkt, mit Exponent oder mit beiden angegeben, Beispiele:
| Ohne Exponent: | 0.1 | -150. | .03 |
| Mit Exponent: | 1E-1 | -1.5e2 | 3E-2 |
| Standard-Format: | 0.1 | -150.0 | 0.03 |
Zifferngruppierung
[Bearbeiten]Ziffern, einschließlich der Hexadezimalziffern können mit _ als Trennzeichen gruppiert werden.
Beispiele:
>>> 1_000_000
1000000
>>> 0o3_751
2025
>>> 0xAC_DC
44252
Exkurs: Mathematische Funktionen
[Bearbeiten]Vielleicht fehlt Ihnen in der obigen Auflistung die Möglichkeit, Quadratwurzeln zu ziehen. Diese Fähigkeit stellt Ihnen Python nicht direkt zur Verfügung, sondern als Teil des "math-Moduls". Der Vollständigkeit halber soll Ihnen hier die Möglichkeit aufgezeigt werden, auch wenn wir damit dem Stoff vorgreifen.
>>> from math import sqrt
>>> sqrt(9)
3.0
- Sie tippen
from math import sqrtein und drücken Enter (dies müssen Sie einmalig pro Sitzung tun) - eine Rückmeldung erhalten Sie nicht. - Sie rufen "sqrt()" mit einer nicht-negativen Zahl (vom Typ float oder int) als Parameter auf.
Das Ergebnis ist immer vom Typ float.
Für die Wurzel aus negativen Zahlen brauchen Sie wiederum ein anderes Modul:
>>> import cmath
>>> cmath.sqrt(-9)
3j
Das Ergebnis wird als komplexe Zahl dargestellt. Mehr dazu später.
Um den interaktiven Modus als wissenschaftlichen Rechner zu nutzen, bietet es sich an, alle mathematischen Standard-Funktionen aus math zu importieren. Das geht mit * als Wildcardsymbol:
from math import *
from builtins import pow # builtins.pow kann mehr als math.pow
Zusammenfassung
[Bearbeiten]Sie haben gelernt, dass Sie Python als Taschenrechner nutzen können. Sie wissen, welche Rechenoperatoren Ihnen zur Verfügung stehen und kennen die Datentypen int und float. Ebenso wissen Sie, wie Sie den Datentyp herausfinden.
Nach diesem doch etwas trockenen Kapitel kommen wir zu den Variablen.
