Abschnitt 3 · Lektion 2
if und else
Ein Vergleich liefert True oder False. Für sich allein ändert das am Programm noch nichts. Erst
mit einem if wird daraus eine Entscheidung, und dann laufen bestimmte Zeilen nur, wenn die Antwort
True ist. Im Startcode des Spritkostenrechners stand schon eins, vorab und mit dem Versprechen,
dass es später richtig drankommt.
Ein if und sein Block
summe = 62.40
if summe >= 50:
print("Der Versand ist kostenlos.")
print("Schön, dass du so viel gefunden hast.")
print("Danke für deinen Einkauf.") Ein if besteht aus drei Teilen. Vorne steht das Wort if, dann eine Bedingung, also irgendetwas,
das wahr oder falsch sein kann, und am Ende ein Doppelpunkt. Nach dem Doppelpunkt kommt, was in
diesem Fall passieren soll.
Das steht in den Zeilen darunter, und zwar eingerückt, eine Stufe nach rechts. Diese eingerückten Zeilen heißen zusammen Block. Im Beispiel sind es zwei. Beide laufen nur, wenn die Summe mindestens 50 Euro beträgt. Die letzte Zeile steht wieder ganz links. Sie gehört nicht mehr zum Block und läuft deshalb immer.
Mit einer Summe von 30 bleibt nur der Dank übrig.
Einrückung ist Grammatik
In vielen anderen Sprachen ist Einrückung Kosmetik. Man rückt ein, damit Menschen den Code besser lesen können, und der Computer übergeht es. Was zusammengehört, zeigen dort Klammern.
In Python gibt es diese Klammern nicht. Die Einrückung selbst sagt, was zum Block gehört, und Python liest sie so genau wie jedes andere Zeichen. Rückst du eine Zeile weiter ein, läuft sie nur noch unter der Bedingung. Rückst du sie weniger ein, läuft sie immer.
Eine Stufe sind vier Leerzeichen. An diese Gewohnheit halten sich praktisch alle Python-Programme. Abzählen musst du sie nicht. Nach einem Doppelpunkt rückt der Editor beim Drücken von Enter von selbst ein, und mit der Rücktaste am Zeilenanfang geht eine ganze Stufe auf einmal zurück. Wenn du lieber mit zwei arbeitest, stellst du in den Einstellungen die Tabgröße um, und der vorgegebene Code rückt mit. Python ist die Zahl egal, solange alle Zeilen eines Blocks gleich weit eingerückt sind.
Zwei Wege mit else
4.20 guthaben = 7.50
preis = float(input("Was kostet das Essen? "))
if guthaben >= preis:
guthaben = guthaben - preis
print(f"Bezahlt. Auf der Karte sind noch {guthaben:.2f} Euro.")
else:
print(f"Das reicht nicht, es fehlen {preis - guthaben:.2f} Euro.")
print("Nächster, bitte.") Oft gibt es nicht nur „mach das“ oder „mach nichts“, sondern zwei Wege. Dafür gibt es else:, auf
Deutsch „sonst“. Es steht auf derselben Höhe wie das if und bekommt ebenfalls einen Doppelpunkt
und einen eigenen Block. Von den beiden Blöcken läuft immer genau einer. Nie beide und nie keiner.
Im Beispiel geht es um eine Mensakarte mit 7,50 Euro Guthaben. Wenn das Essen nicht mehr kostet,
wird abgebucht. Sonst steht da, wie viel fehlt. Der Preis kommt aus eingabe.txt, und dort lohnt
sich das Ausprobieren. Mit 4.20 wird bezahlt, mit 8.90 fehlen 1,40 Euro. Und bei genau 7.50
entscheidet das Gleichheitszeichen in >=, dass es gerade noch reicht.
Der if-Block hat hier zwei Zeilen. Erst bekommt das Guthaben einen neuen Wert, dann wird es
ausgegeben. Beide stehen eingerückt untereinander, und beide laufen nur beim Bezahlen. Die letzte
Zeile steht wieder links und läuft bei jedem Gast.
Wenn die Einrückung fehlt
summe = 62.40
if summe >= 50:
print("Der Versand ist kostenlos.") Hier fehlt die Einrückung, und Python startet das Programm gar nicht erst:
IndentationError: expected an indented block after 'if' statement on line 2. Ein
Einrückungsfehler. Die Meldung sagt ziemlich genau, was los ist. Nach dem if in Zeile 2 wurde ein
eingerückter Block erwartet, und es kam keiner. Die Dächer zeigen auf die Zeile, die eingerückt sein
müsste.
Ein IndentationError ist eine Sonderform des SyntaxError aus Lektion 1.4. Deshalb läuft auch
hier keine einzige Zeile. Zwei Verwandte triffst du auch noch:
IndentationError: unexpected indentheißt, dass eine Zeile eingerückt ist, obwohl kein Block angefangen hat. Oft ist es ein versehentliches Leerzeichen am Zeilenanfang.SyntaxError: expected ':'heißt, dass am Ende derif-Zeile der Doppelpunkt fehlt. Das passiert am Anfang ständig und später immer noch gelegentlich.
Ein Gleichheitszeichen zu wenig
summe = 50
if summe = 50:
print("Genau 50 Euro.") Das ist die Verwechslung aus der letzten Lektion. In der if-Zeile soll gefragt werden, ob die
Summe gleich 50 ist. Dort steht aber nur ein Gleichheitszeichen, also eine Zuweisung. Python merkt
das und schlägt gleich die Lösung vor:
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
Gemeint ist fast immer das ==. Das := aus dem Vorschlag gibt es auch. Es weist einen Wert zu und
reicht ihn im selben Schritt weiter. In diesem Kurs kommt es nicht vor, und diesen Teil der Meldung
kannst du getrost überlesen.
Zum Mitnehmen
Der Block unter einem if läuft nur, wenn die Bedingung stimmt, sonst läuft der Block unter else. Wo ein Block anfängt und aufhört, hängt in Python allein daran, wie weit eine Zeile eingerückt ist.
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.