else…if
Kurz: Eine Kette aus mehreren Bedingungen, bei der nacheinander geprüft wird, welche zuerst zutrifft — sobald eine Bedingung wahr ist, werden alle weiteren in der Kette übersprungen.
Genauer: else...if-Ketten sind nützlich, wenn mehr als zwei sich gegenseitig ausschließende Fälle unterschieden werden müssen (z. B. Notenstufen anhand einer Punktzahl). Bei sehr vielen festen Vergleichswerten auf denselben Ausdruck wird meist ein Switch-Statement bevorzugt, weil es übersichtlicher ist als eine lange else...if-Kette.
Im Detail
if punkte >= 90:
note = "Sehr gut"
elif punkte >= 75:
note = "Gut"
elif punkte >= 60:
note = "Befriedigend"
else:
note = "Nicht bestanden"Das entscheidende Verhalten: Die Bedingungen werden von oben nach unten geprüft, und sobald die ERSTE zutreffende Bedingung gefunden wurde, wird nur deren Block ausgeführt — alle weiteren elif/else if-Zweige darunter werden komplett übersprungen, selbst wenn ihre Bedingung theoretisch auch zutreffen würde. Das unterscheidet eine else...if-Kette von mehreren unabhängigen if-Anweisungen hintereinander, bei denen JEDE Bedingung einzeln geprüft und potenziell mehrere Blöcke ausgeführt würden:
# GEFÄHRLICH: mehrere unabhängige if-Anweisungen statt einer Kette
if punkte >= 90:
note = "Sehr gut"
if punkte >= 75: # wird AUCH geprüft, selbst wenn die erste schon zutraf!
note = "Gut" # überschreibt "Sehr gut" wieder, wenn punkte >= 90Die Reihenfolge der Bedingungen ist deshalb entscheidend und muss bewusst gewählt werden — bei sich überlappenden Bereichen (wie hier: 95 Punkte erfüllt sowohl >= 90 als auch >= 75) muss die spezifischste/strengste Bedingung zuerst stehen, sonst “gewinnt” fälschlicherweise die falsche.
Wann lohnt sich ein else...if gegenüber einem Switch-Statement? Ein Switch eignet sich nur, wenn alle Fälle auf exakte Gleichheit mit einem einzelnen Wert prüfen (z. B. fall 1:, fall 2:). Eine else...if-Kette ist dagegen die einzige Option, wenn die Bedingungen unterschiedliche Ausdrücke, Bereiche (>=, <) oder mehrere Variablen gleichzeitig prüfen — genau wie im Notenbeispiel oben, wo jede Bedingung einen Zahlenbereich statt einen einzelnen Wert abdeckt.
Siehe auch: if…else, if-Statement, Switch-Statement