mitmario.dev

Wahr und falsch

Python Sandbox 4 Min Lesezeit 4 BeispieleLektion 1 von 7

Ab 50 Euro ist der Versand kostenlos, darunter nicht. Ein Programm, das das ausrechnet, kann nicht einfach alle Zeilen von oben nach unten abarbeiten. Es muss sich vorher eine Frage stellen. Ist die Summe mindestens 50?

Beim Spritkostenrechner gab es das schon einmal. Bei langen Fahrten kam eine Zeile dazu, bei kurzen nicht, und dahinter stand die Frage, ob die Strecke größer als 300 ist. In diesem Abschnitt geht es um solche Fragen. Zuerst darum, wie man sie stellt und was als Antwort zurückkommt.

Ein Vergleich ist ein Wert

Vergleiche liefern True oder False
summe = 42.50
print(summe > 50)
print(summe < 50)
print(summe == 42.5)
print(summe != 42.5)
versandkostenfrei = summe >= 50
print(versandkostenfrei)
print(type(versandkostenfrei))

Jede Zeile in diesem Beispiel stellt eine Frage. Python antwortet mit einem von genau zwei Werten, True (wahr) oder False (falsch). Beide werden groß geschrieben und stehen ohne Anführungszeichen, denn Texte sind sie nicht. Sie haben einen eigenen Typ, bool. Der Name kommt von George Boole, einem Mathematiker, der sich mit wahr und falsch beschäftigt hat, lange bevor es Computer gab. In der letzten Zeile siehst du den Typ.

Es gibt sechs Vergleichszeichen:

  • < kleiner als, > größer als
  • <= kleiner oder gleich, >= größer oder gleich
  • == gleich, != ungleich

Bei <= und >= steht das Gleichheitszeichen immer hinten, so wie man es spricht. Kleiner oder gleich. =< kennt Python nicht.

Eine Antwort ist ein Wert wie jeder andere, und deshalb kann man ihr auch einen Namen geben. versandkostenfrei = summe >= 50 sieht beim ersten Lesen merkwürdig aus. Es folgt aber nur der Regel jeder Zuweisung. Erst wird rechts ausgerechnet, das ergibt False, dann bekommt der Name links das Ergebnis.

Eins oder zwei Gleichheitszeichen

Ein Gleichheitszeichen und zwei sind in Python zwei völlig verschiedene Dinge. alter = 18 ist eine Zuweisung, alter bekommt 18. alter == 18 ist eine Frage, nämlich ob alter gleich 18 ist. Das eine ändert etwas. Das andere schaut nur nach.

Verwechseln wirst du die beiden trotzdem, früher oder später. Was Python dann sagt, steht in der nächsten Lektion. Bis dahin hilft es, == beim Lesen als „ist gleich?“ auszusprechen, mit Fragezeichen.

Text vergleichen

Text vergleichen
print("Apfel" == "Apfel")
print("Apfel" == "apfel")
print("Apfel" < "Birne")
print("Zebra" < "apfel")
print("Zucker" < "Äpfel")
print("10" < "9")

Texte lassen sich genauso vergleichen wie Zahlen, und == tut, was man erwartet. Zwei Texte sind gleich, wenn sie Zeichen für Zeichen gleich sind. Groß und klein zählen dabei mit. "Apfel" und "apfel" sind verschieden.

Bei < und > wird es unübersichtlicher. Python vergleicht Texte Zeichen für Zeichen von links nach rechts, und jedes Zeichen hat dabei seinen Platz in einer langen Tabelle, die der Computer kennt (Unicode). Bei Buchstaben passt diese Tabelle meistens zum Alphabet, deshalb kommt "Apfel" vor "Birne". Aber eben nur meistens.

  • Alle Großbuchstaben stehen vor allen Kleinbuchstaben. Deshalb ist "Zebra" kleiner als "apfel".
  • Umlaute stehen weit hinter dem Z. "Zucker" kommt vor "Äpfel". Wenn du später eine Liste mit deutschen Wörtern sortierst, fällt dir das wieder ein.
  • Ziffern im Text sind auch nur Zeichen. "10" ist kleiner als "9", weil die 1 vor der 9 kommt. Was danach steht, spielt keine Rolle mehr.

Der letzte Punkt ist der wichtigste. Wenn man Zahlen als Text vergleicht, kommt Unsinn heraus.

Text und Zahl

Text und Zahl vergleichen
# So kommt ein Alter an, wenn es von input() stammt: als Text.
alter = "17"
print(alter == 17)
print(alter >= 18)

Alles, was von außen kommt, ist Text, auch ein Alter aus input(). Im Beispiel ist das nachgestellt, dort ist alter gleich "17", mit Anführungszeichen.

Die erste Frage, alter == 17, ergibt False. Ohne jede Beschwerde. Ein Text ist nie gleich einer Zahl, auch wenn er genauso aussieht. Das sind die tückischen Fehler, weil das Programm läuft und nur die Antwort nicht stimmt.

Bei der zweiten Frage, alter >= 18, steigt Python gleich aus: TypeError: '>=' not supported between instances of 'str' and 'int'. Übersetzt heißt das, größer oder gleich geht nicht zwischen einem Text (str) und einer ganzen Zahl (int). Welcher von beiden größer ist, kann niemand sagen, und Python rät nicht.

Die Lösung ist dieselbe wie beim Rechnen. Erst umwandeln, dann vergleichen. int(alter) >= 18 funktioniert. Und wenn du die Antwort von input() gleich mit int() umwandelst, hast du das Problem gar nicht erst.

Von 18 bis unter 67

Ein Vergleich mit zwei Grenzen
alter = 34
print(18 <= alter < 67)
alter = 70
print(18 <= alter < 67)
alter = 18
print(18 <= alter < 67)

Oft will man wissen, ob ein Wert zwischen zwei Grenzen liegt. Zum Beispiel, ob jemand zwischen Volljährigkeit und Rente steht, also mindestens 18 ist und noch keine 67. In Python schreibt man das fast wie im Matheheft: 18 <= alter < 67. Python liest das als zwei Fragen, 18 <= alter und alter < 67. Die Antwort ist nur dann True, wenn beide stimmen.

Das sieht selbstverständlich aus, ist es aber nicht. Während man es in vielen anderen Sprachen umständlicher schreibt, ist es in Python die übliche Form.

An jeder Grenze lohnt sich ein genauer Blick, ob sie dazugehört. <= schließt die 18 ein, < schließt die 67 aus. Die dritte Frage im Beispiel prüft die Grenze selbst, und mit 18 ist man dabei.

Zum Mitnehmen

Vergleiche ergeben True oder False, auch zwischen Texten. Zwischen Text und Zahl liefert == still False, und >= bricht ab. Ein Gleichheitszeichen gibt einen Wert, zwei fragen nach ihm.

Jetzt du

Basis Konto, kostenlos

Zu 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.