mitmario.dev

elif

Python Sandbox 3 Min Lesezeit 3 BeispieleLektion 3 von 7

Ein Paket kostet je nach Gewicht einen von mehreren Preisen. Eine Prüfung hat sechs Noten, ein Stromtarif hat Stufen. Mit if und else kann ein Programm aber nur zwischen zwei Wegen wählen. Für alles mit mehr als zwei Wegen gibt es elif.

Sonst, wenn

Versand nach Gewicht
gewicht = float(input("Wie schwer ist das Paket in kg? "))
if gewicht <= 2:
    print("Päckchen: 3.99 Euro")
elif gewicht <= 10:
    print("Paket: 5.99 Euro")
elif gewicht <= 31.5:
    print("Großes Paket: 9.99 Euro")
else:
    print("Zu schwer, das geht nur als Spedition.")

elif ist die Abkürzung für „else if“, also „sonst, wenn“. Es steht wie else auf der Höhe des if, hat aber eine eigene Bedingung. Python geht die Bedingungen von oben nach unten durch:

  • Wiegt das Paket höchstens 2 Kilo? Dann ist es ein Päckchen, und fertig.
  • Wenn nicht, wiegt es höchstens 10 Kilo? Dann ist es ein normales Paket.
  • Wenn auch nicht, höchstens 31,5 Kilo? Dann ein großes Paket.
  • Hat nichts davon gepasst, ist es zu schwer.

Auf das „und fertig“ kommt es an. Python nimmt den ersten Zweig, dessen Bedingung stimmt, und schaut sich den Rest gar nicht mehr an. Ein Paket mit 3,5 Kilo wiegt auch höchstens 31,5 Kilo. Bis zu dieser Frage kommt Python aber nicht mehr, weil schon die zweite gepasst hat.

Deshalb muss in der zweiten Bedingung auch nicht 2 < gewicht <= 10 stehen, obwohl genau dieser Bereich gemeint ist. An dieser Stelle steht schon fest, dass das Paket schwerer als 2 Kilo ist. Sonst hätte die erste Bedingung gepasst, und Python wäre gar nicht bis hierher gekommen.

Ein elif darf so oft vorkommen, wie man es braucht. Das else am Ende ist freiwillig. Es fängt alles auf, was durch alle Bedingungen gefallen ist. Ohne else passiert in diesem Fall einfach nichts.

Die Zahl steht in eingabe.txt. Zum Ausprobieren lohnen sich die Grenzen: 2, 2.1, 31.5 und 40.

Die Reihenfolge entscheidet

Die Reihenfolge vertauscht
gewicht = float(input("Wie schwer ist das Paket in kg? "))
if gewicht <= 31.5:
    print("Großes Paket: 9.99 Euro")
elif gewicht <= 10:
    print("Paket: 5.99 Euro")
elif gewicht <= 2:
    print("Päckchen: 3.99 Euro")
else:
    print("Zu schwer, das geht nur als Spedition.")

Dieselben vier Zweige, nur in umgekehrter Reihenfolge. In eingabe.txt steht ein Päckchen mit 1,2 Kilo, und auf einmal kostet es 9,99 Euro. Was ist passiert?

Die erste Frage lautet jetzt, ob das Paket höchstens 31,5 Kilo wiegt. Das tun 1,2 Kilo, die Antwort ist True, und Python nimmt diesen Zweig. Dass weiter unten eine Bedingung steht, die viel besser passt, erfährt es nie. In dieser Reihenfolge ist jedes Paket bis 31,5 Kilo ein großes Paket. Die beiden Zweige darunter sind toter Code, also Code, der nie laufen kann.

Wenn Grenzen aufeinander aufbauen, gehört die engste Bedingung deshalb nach oben. Bei „höchstens“ ist das die kleinste Zahl, bei „mindestens“ die größte.

Eine Fehlermeldung gibt es bei vertauschten Zweigen nicht. Für Python ist alles in Ordnung, es tut genau, was dasteht. So ein Fehler fällt nur auf, wenn du mit mehreren Werten prüfst, am besten mit denen an den Grenzen.

Drei ifs sind nicht dasselbe

Drei ifs statt elif
gewicht = 1.2
if gewicht <= 2:
    print("Päckchen: 3.99 Euro")
if gewicht <= 10:
    print("Paket: 5.99 Euro")
if gewicht <= 31.5:
    print("Großes Paket: 9.99 Euro")

Wozu überhaupt elif, wenn man auch drei einzelne if untereinander schreiben könnte? Im Beispiel siehst du es. Jedes if ist eine eigene Entscheidung, und Python stellt jede Frage, egal was davor passiert ist. 1,2 Kilo sind höchstens 2, höchstens 10 und höchstens 31,5 Kilo. Also stehen für ein einziges Päckchen drei Preise da.

Mit if, elif und else gehören dagegen alle Zweige zu einer Entscheidung, und davon läuft höchstens einer. Mehrere einzelne if sind richtig, wenn mehrere Dinge gleichzeitig zutreffen dürfen. Etwa wenn ein Einkauf versandkostenfrei ist und zugleich einen Rabatt bekommt. Beides kommt in diesem Abschnitt noch vor.

Was die Aufgabe will

Mit so einer Kette werden in Deutschland zum Beispiel die Abschlussprüfungen einer Ausbildung bewertet, nach dem Notenschlüssel der IHK. Für 0 bis 100 Punkte gibt es sechs Noten, und geprüft wird jede an ihrer unteren Grenze.

Zum Mitnehmen

elif heißt „sonst, wenn“. Python prüft die Bedingungen von oben nach unten und nimmt die erste, die stimmt. Deshalb ist die Reihenfolge Teil der Logik.

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 3 Beispielen zum Ausprobieren

    Steht hier, ohne Konto lesbar.

  • Aufgabe, dein Code läuft auf einem Server

    Öffnet sich mit dem Basis Konto.