![]() |
||
| Grundlagen |
Shell/Editor
Codierung
Variablen
Datentypen
Strings
Fehler
Sequenz
Alternative
Schleife
StyleGuide
|
|
|
Arithmetik |
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!
Der Artikel von Klaus-G. Meyer geht näher auf die Problematik ein.
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. Man kann natürlich auch die eingebaute Funktion round verwenden. round(a,3) rundet a auf 3 Stellen. Aber Achtung, das Ergebnis von round ist immer vom Typ float, auch round(a,0).
print "%8.3f" % (a) gibt die Variable a mit 3 Stellen un einer Gesamtbreite von 8 Zeichen aus.