mitmario.dev

if und else

Python Sandbox 4 Min Lesezeit 4 BeispieleLektion 2 von 7

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

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

Zwei Wege mit else
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

Ein Block ohne Einrückung
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 indent heiß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 der if-Zeile der Doppelpunkt fehlt. Das passiert am Anfang ständig und später immer noch gelegentlich.

Ein Gleichheitszeichen zu wenig

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