Abschnitt 3 · Lektion 1
Wahr und falsch
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
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
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 die1vor der9kommt. 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
# 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
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, 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.