Zwei Arten von Zahlen, eine Art Wahrheit
Die numerischen Typen, die du täglich nutzt, sind int und float, dazu bool für Wahr/Falsch-Werte. Sie reichen für fast alle Arithmetik und Logik, die ein normales Python-Programm braucht.
Python bezeichnet Booleans gelegentlich als Untertyp von Ganzzahlen — True ist wörtlich 1 und False ist wörtlich 0 —, was später ein paar nützliche Tricks erlaubt.
Ganzzahlarithmetik
Ganzzahlen in Python laufen nie über. Das klingt unwichtig, bis du deine erste Fakultätsfunktion schreibst und merkst, dass die meisten anderen Sprachen bis dahin längst still in eine negative Zahl umgeklappt wären.
Beide erzeugen exakte Ergebnisse, egal wie groß. Die einzige Obergrenze ist der Speicher.
Die Rechenoperatoren sind, was du erwartest, plus ein paar mehr:
Drei Dinge aus dieser Liste lohnen sich im Kopf zu behalten:
/liefert in Python 3 immer einen Float, auch wenn beide Seiten Ganzzahlen sind.10 / 2ergibt5.0, nicht5. Willst du eine Ganzzahl, nimm//.//rundet in Richtung negativ unendlich, also ist-7 // 2gleich-4, nicht-3. Ungewöhnlich, aber konsistent.%liefert den Rest und ist praktisch für „ist diese Zahl gerade?“ (n % 2 == 0) und um in einem festen Bereich umzuschlagen.
Floats und ihre berühmte Stolperfalle
Floats sind by design unvollkommen. Sie werden binär gespeichert, was die meisten Dezimalbrüche nicht exakt abbilden kann. Das Lehrbuchbeispiel:
Die erste Zeile gibt 0.30000000000000004 aus. Die zweite gibt False aus. Jede Sprache, die dem IEEE-754-Standard folgt — Python, JavaScript, Java, C —, verhält sich genauso. Es ist kein Python-Bug.
In der Praxis bedeutet das zwei Dinge:
- Vergleich Floats nicht mit
==. Brauchst du „nah genug“, nimmmath.isclose(a, b)oder prüfe, obabs(a - b) < some_tolerance. - Für Geldbeträge nimm
decimal.Decimal. Dasdecimal-Modul der Standardbibliothek bietet exakte Dezimalarithmetik — keine Überraschungen wie0.1 + 0.2. Es ist langsamer als float, weshalb es nicht Standard ist, aber die richtige Wahl für Währungen.
Zwischen Zahlentypen umwandeln
Python wandelt eine Ganzzahl nicht still in einen String um oder einen String in eine Zahl. Du verlangst es ausdrücklich:
Ungültige Umwandlungen werfen ValueError:
>>> int("hello")
ValueError: invalid literal for int() with base 10: 'hello'
Die Fehlermeldung ist deutlich und leicht zu verarbeiten. Bereinige die Eingabe oder fang die Ausnahme ab.
Booleans, etwas tiefer
True und False sind die beiden booleschen Werte — genau so geschrieben, großer Anfangsbuchstabe. Die meisten Vergleiche liefern einen davon:
Die booleschen Operatoren sind and, or und not, als englische Wörter statt als Symbole geschrieben:
Eine Feinheit, die nützlich zu wissen ist: and und or geben nicht zwangsläufig True oder False zurück — sie geben den Wert zurück, der den Ausdruck entschieden hat. 0 or "fallback" liefert "fallback"; 5 and 10 liefert 10. So kannst du kurze Defaults wie name = user_input or "anonymous" schreiben, und es hilft auch zu verstehen, warum eine Boolesche Prüfung dir einmal einen unerwarteten Typ liefert.
Truthy und Falsy
Python behandelt viele Werte als „wahrheits-ähnlich“ oder „falsch-ähnlich“, wenn du sie in einem booleschen Kontext wie if oder while benutzt. Die falsy Werte sind:
False0,0.0None- Leere Container:
"",[],{},set(),()
Alles andere ist truthy. So kannst du natürlicher lesbare Prüfungen schreiben:
Lies if name: als „wenn name irgendetwas enthält“. Viel sauberer als if name != "":. Sei nur bei Zahlen vorsichtig — if count: behandelt 0 als „überspringen“, was meistens, aber nicht immer, das ist, was du willst. Ist Null ein legitimer Wert, nimm stattdessen if count is not None:.
Boolesche Arithmetik
Weil Booleans sind Ganzzahlen, kannst du mit ihnen rechnen:
Dieser Trick taucht häufig genug auf, um ihn sich zu merken. Willst du zählen, wie viele Elemente einer Liste eine Prüfung bestehen, summiere einen Generator, der Booleans liefert:
Die praktischen Erkenntnisse
- Ganzzahlen laufen nie über. Nutz sie großzügig.
/liefert einen Float; nimm//, wenn du Ganzzahldivision willst.- Vergleich Floats nicht mit
==; vergleiche mit einer Toleranz oder nimmDecimalfür Geldbeträge. - Wahrheitswerte machen Bedingungen lesbarer — solange du dich erinnerst, dass
0und leere Strings falsy sind.
Als Nächstes: input und print, die zwei Werkzeuge, die deine Skripte von stummen Programmen in Gespräche verwandeln.
Häufig gestellte Fragen
Was ist der Unterschied zwischen int und float in Python?
Ein int ist eine Ganzzahl ohne Dezimalpunkt; ein float ist eine Zahl mit Dezimalpunkt. Ganzzahlen in Python können beliebig groß werden — es gibt keinen Überlauf. Floats folgen den Standard-IEEE-754-Regeln, was bedeutet, dass sie bei Dezimalarithmetik winzige Genauigkeitsbeträge verlieren können.
Warum ist 0.1 + 0.2 in Python nicht gleich 0.3?
Weil binäre Fließkommazahlen die meisten Dezimalbrüche nicht exakt darstellen können. 0.1 + 0.2 wertet sich zu 0.30000000000000004 aus. Das ist kein Python-Bug — jede Sprache mit IEEE-754-Floats hat dasselbe Verhalten. Für exakte Dezimalarithmetik nimm das Modul decimal.
Was sind truthy und falsy Werte in Python?
Python behandelt viele Werte in booleschen Kontexten als wahr oder falsch, auch wenn sie nicht wörtlich True oder False sind. Null, leere Strings, leere Listen, leere Dicts und None sind falsy; die meisten anderen Werte sind truthy. if my_list: liest sich als „wenn die Liste irgendetwas enthält“.