HSG |
|
Ganze Zahlen heißen in Python int (integer), reelle Zahlen float (floating point number). Überprüfe das durch ein kleine Experiment mit der Shell. Gib a = 5 ein und anschließend type(a). Das Python-System antwortet mit <type 'int'>. Gib jetzt b = 5 ein. b ist natürlich wieder vom Typ int. Multipliziert man ganze Zahlen, so erhält man wieder eine ganze Zahl. Wir testen durch Eingabe von c = a*b, type(c). Welchen Typ ordnet Python dem Quotienten zweier ganzer Zahlen zu? Wir testen durch d = a/b, type(d). Das Ergebnis überrascht etwas, denn meistens kommt bei der Division keine ganze Zahl heraus. Das ist uns oft nicht recht. Wir können Python z.B. mit e = float(d) zu einer Typ-Umwandlung zwingen. Ein Test mit type(e) zeigt den Erfolg der Aktion. Lässt man sich mit e den Inhalt der Variablen e anzeigen, so ist man möglicherweise enttäuscht, denn statt 2.5 - wie erwartet - steht da 2.0. Der Grund liegt darin, dass schon bei a/b die Nachkommastellen verlorengegangen sind. Python lässt sie einfach weg. Wenn wir vor der Division eine der beiden Zahlen a oder b zu float machen, ergibt sich das gewünschte Ergebnis. Probiere das mit der Eingabefolge a = float(a), type(a), d = a/b, d aus. Manche lösen das auch mit dem 'Taschenspielertrick' d = a*1.0/b. Wieso funktioniert das?
In Python wird Potenzierung durch ** ausgedrückt, 2**3 ergibt 8. ^ bedeutet bitweises exklusives Oder, 6^3 ergibt 5.
Gibt man a = 0.1 ein und schaut sich mit a an, was Python speichert, so ist man möglicherweise enttäuscht, Python gibt 0.10000000000000001 aus. Kann denn Python noch nicht einmal eine so einfache Zahl korrekt speichern? Die Begründung liegt darin, dass im Dualsystem 0.1 keine einfache Zahl ist, sondern periodisch und ein Computer immer nur begrenzt viele Stellen speichern kann. Dort wo der Taschenrechner durch Rundung und Unterdrückung von Nullen mogelt, ist Python einfach ehrlich. Im Zehnersystem ist z.B. 3/7 keine 'einfache Zahl'. Übrigens sind 1/2, 1/4 oder 1/512 = 0,001953125 für Python 'einfache Zahlen', die ganz exakt dargestellt werden. Wer das testen will, soll bitte 1.0/512 eingeben. Ihr wisst warum!
Im Alltag und in der Schule kennt man das "übliche" Runden (das sog. kaufmännische Runden):
round()
>>> round(2.4) 2 >>> round(2.5) 2 >>> round(3.4) 3 >>> round(3.5) 4Der round-Befehl arbeitet also nicht wie man das evtl. erwartet. Stattdessen arbeitet der round-Befehl nach dem symmetrischen bzw. mathematischen Runden (round to nearest even, IEEE 754).
Die Eigenschaft Pythons, bei der Umwandlung in integer die Nachkommastellen abzuschneiden, kann man zum Runden verwenden. int(a+0.5) rundet a korrekt auf eine ganze Zahl. Was soll das +0.5? Überlege! int(a*100+0.5)/100.0 rundet auf zwei Stellen.
round()
print ("%8.3f" % (a)) gibt die Variable a mit 3 Stellen und einer Gesamtbreite von 8 Zeichen aus.