Abschnitt 2 · Lektion 2
Zahlen
Im Alltag macht niemand einen Unterschied zwischen 2 und 2,0. Python nimmt ihn sehr ernst. Für Python ist es wichtig, ob eine Zahl ganz ist oder Nachkommastellen hat.
In Abschnitt 1 wurde schon gerechnet, und dort kam der Unterschied einmal kurz vor.
Zwei Sorten Zahl
Eine Zahl ohne Punkt ist für Python eine ganze Zahl, auf Englisch integer, in Python kurz int.
Eine Zahl mit Punkt ist eine Kommazahl, auf Englisch floating point number, in Python float.
Das gilt auch, wenn hinter dem Punkt nur eine Null steht. 2 ist ein int, 2.0 ein float.
print(10 / 5)
print(10 // 5)
print(3 + 2.0)
print(1_000_000 * 3) Die erste Zeile kennst du schon. Der einfache Schrägstrich liefert immer einen float, also 2.0.
Der doppelte liefert einen int, also 2. In der dritten Zeile kommt eine Kommazahl heraus, sobald
auch nur eine an der Rechnung beteiligt ist. Dass die andere Zahl ganz war, ist dabei egal.
Meistens musst du dich um den Unterschied nicht kümmern, weil Python bei Bedarf von selbst umwandelt. Wichtig wird er erst, wenn etwas zwingend ganz sein muss. Eine Anzahl Kisten zum Beispiel, eine Position in einer Liste oder eine Wiederholung. „Mach das 2.0-mal“ ergibt keinen Sinn, und Python sagt das dann auch.
Die letzte Zeile ist eine kleine Annehmlichkeit. Unterstriche in einer Zahl ignoriert Python.
1_000_000 ist eine Million, nur lesbarer als 1000000. Bei Preisen in Cent oder Beträgen in Byte
spart man sich so das Nullenzählen.
Umrechnen mit // und %
Das ganzzahlige Teilen // und der Rest % sind ein Paar. Zusammen stecken sie hinter fast jeder
Umrechnung.
minuten = 135
stunden = minuten // 60
rest = minuten % 60
print(minuten, "Minuten sind", stunden, "Stunden und", rest, "Minuten") Wie viele Stunden sind 135 Minuten? 135 // 60 zählt, wie oft die 60 ganz hineinpasst. Zweimal,
also 2 Stunden. Und 135 % 60 ist das, was dabei übrig bleibt, nämlich 15 Minuten. Aus einer
unhandlichen Zahl werden mit zwei Rechnungen zwei handliche.
Das Muster funktioniert überall, wo eine Einheit in einer größeren aufgeht.
cent = 1234
print(cent // 100, "Euro und", cent % 100, "Cent") 1234 Cent sind 12 Euro und 34 Cent. Gerechnet wird hier mit 100 statt mit 60. Genauso geht es mit
Sekunden und Minuten, mit Tagen und Wochen, mit Flaschen und Kisten. Wenn du einmal durchschaut
hast, dass // die großen Stücke zählt und % den Rest einsammelt, rechnest du so etwas nie wieder
von Hand.
Bei drei Stufen, etwa Sekunden in Stunden, Minuten und Sekunden, macht man es zweimal. Erst werden die Stunden abgetrennt, dann vom Rest die Minuten. So wird auch in der Aufgabe gerechnet.
Die Rechnung, die nicht aufgeht
In Lektion 1.3 ist 0.30000000000000004 aufgetaucht, und die Erklärung fehlt noch.
print(0.1 + 0.2)
print(1.1 * 3)
print(round(0.1 + 0.2, 2))
print(round(1.1 * 3, 2))
print(0.5 + 0.25) 0.1 + 0.2 ergibt nicht ganz 0.3, und 1.1 * 3 nicht ganz 3.3. Das ist kein Fehler von Python.
Fast jede Programmiersprache rechnet hier genauso, man sieht es nur nicht immer.
Das liegt daran, wie ein Computer Kommazahlen speichert. Er rechnet nicht wie Menschen im Zehnersystem, sondern im Zweiersystem mit nur 0 und 1, und da gehen manche Zahlen nicht auf, die im Zehnersystem ganz harmlos aussehen.
Von der anderen Seite kennt man das. Ein Drittel ist im Zehnersystem 0.3333… und hört nie auf.
Irgendwo muss man abschneiden, und dann fehlt ein winziges Stück. So geht es dem Computer mit 0.1.
In der letzten Zeile steht das Gegenstück. 0.5 + 0.25 geht glatt auf, weil ein Halb und ein
Viertel auch im Zweiersystem schöne Zahlen sind.
Im Alltag rundet man beim Ausgeben. round(wert, 2) rundet auf zwei Nachkommastellen, und aus
0.30000000000000004 wird 0.3. In Lektion 2.4 kommt ein noch bequemerer Weg, bei dem die Stellen
gleich beim Ausgeben festgelegt werden. Bei Geld ist auch das nur die halbe Lösung, weil sich
Rundungsreste über viele Buchungen aufsummieren können. Wie man Beträge rechnet, ohne dass ein Cent
verschwindet, kommt in Abschnitt 10. Bis dahin sind die komischen Stellen ganz hinten eine
Eigenheit, die man kennt.
Zum Mitnehmen
Eine Zahl mit Punkt ist ein float, eine ohne ein int, und sobald ein float mitrechnet, kommt ein float heraus. // zählt die ganzen Stücke, % den Rest, und round glättet Kommazahlen, die nicht ganz aufgehen.
Jetzt du
Basis Konto, kostenlosZu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 4 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe, dein Code läuft auf einem Server
Öffnet sich mit dem Basis Konto.