Menu

Python-Zahlen und -Booleans: int, float, bool und Arithmetik

Wie Python mit Ganzzahlen, Fließkommazahlen und Booleans umgeht — Arithmetik, Umwandlung und die Randfälle, über die Leute stolpern.

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.

main.py
Output
Click Run to see the output here.

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.

main.py
Output
Click Run to see the output here.

Beide erzeugen exakte Ergebnisse, egal wie groß. Die einzige Obergrenze ist der Speicher.

Die Rechenoperatoren sind, was du erwartest, plus ein paar mehr:

main.py
Output
Click Run to see the output here.

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 / 2 ergibt 5.0, nicht 5. Willst du eine Ganzzahl, nimm //.
  • // rundet in Richtung negativ unendlich, also ist -7 // 2 gleich -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:

main.py
Output
Click Run to see the output here.

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:

  1. Vergleich Floats nicht mit ==. Brauchst du „nah genug“, nimm math.isclose(a, b) oder prüfe, ob abs(a - b) < some_tolerance.
  2. Für Geldbeträge nimm decimal.Decimal. Das decimal-Modul der Standardbibliothek bietet exakte Dezimalarithmetik — keine Überraschungen wie 0.1 + 0.2. Es ist langsamer als float, weshalb es nicht Standard ist, aber die richtige Wahl für Währungen.
main.py
Output
Click Run to see the output here.

Zwischen Zahlentypen umwandeln

Python wandelt eine Ganzzahl nicht still in einen String um oder einen String in eine Zahl. Du verlangst es ausdrücklich:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

Die booleschen Operatoren sind and, or und not, als englische Wörter statt als Symbole geschrieben:

main.py
Output
Click Run to see the output here.

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:

  • False
  • 0, 0.0
  • None
  • Leere Container: "", [], {}, set(), ()

Alles andere ist truthy. So kannst du natürlicher lesbare Prüfungen schreiben:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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 nimm Decimal für Geldbeträge.
  • Wahrheitswerte machen Bedingungen lesbarer — solange du dich erinnerst, dass 0 und 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“.

Lerne mit Coddy zu programmieren

LOS GEHT'S