====== Mehrfachverzweigungen ====== In der Aufgabe 1 aus dem letzten Abschnitt soll auf mehrere Bedingungen reagiert werden. Dies wird dort gelöst indem man mehrere if-Anweisungen hintereinander schreibt: note = int(input("Gib deine Note als Zahl ein: ")) if note == 1: print("sehr gut") if note == 2: print("gut") if note == 3: print("befriedigend") if note == 4: print("ausreichend") if note == 5: print("magelhaft") if note == 6: print("ungenügend") Diese Vorgehensweise funktioniert nicht mehr, wenn man eine falsche Eingabe im ''%%else-%%''-Zweig abfangen will. Wenn man die ''%%else-%%'' an die letzte ''%%if-%%''-Anweisung hängt, würde bei jeder Note außer der 6 noch die Ausgabe "Falsche Eingabe" erscheinen: note = int(input("Gib deine Note als Zahl ein: ")) if note == 1: print("sehr gut") if note == 2: print("gut") if note == 3: print("befriedigend") if note == 4: print("ausreichend") if note == 5: print("magelhaft") if note == 6: print("ungenügend") else: print("Falsche Eingabe!") Um das Problem zu lösen, kann man die ''%%if-%%''-Anweisungen ineinander schachteln: note = int(input("Gib deine Note als Zahl ein: ")) if note == 1: print("sehr gut") else: if note == 2: print("gut") else: if note == 3: print("befriedigend") else: if note == 4: print("ausreichend") else: if note == 5: print("magelhaft") else: if note == 6: print("ungenügend") else: print("Falsche Eingabe!") Auf diese Weise entsteht aber wiederum sehr unübersichtlicher Code, wenn man sehr viele Bedingungen hat. Um das zu vermeiden, gibt es in Python die ''%%if-elif-else%%''-Anweisung, mit der man eine **Mehrfachverzweigung** umsetzen kann. ===== Allgemeine Formulierung ===== ==== Verbale Kurzbeschreibung ==== **Wenn** die Bedingung 1 erfüllt ist, **dann** führe die Anweisungen a1-1 bis a1-n aus, **sonst wenn** die Bedingung 2 erfüllt ist, **dann** führe die Anweisungen a2-1 bis a2-n aus, **sonst wenn** ... , **anderenfalls** führe die Anweisungen b1 bis bn aus. ==== Struktogramm ==== {{ :python:nehrfachverzweigung.png?direct&300 |}} ==== Python-Syntax ==== if : a1-1 ... an-2 elif : a2-1 ... a2-n ... elif : am-1 ... am-n else: b1 ... bn Als vereinfachte Lösung unserer Einstiegsaufgabe würde ich also das folgende Programm ergeben: note = int(input("Gib deine Note als Zahl ein: ")) if note == 1: print("sehr gut") elif note == 2: print("gut") elif note == 3: print("befriedigend") elif note == 4: print("ausreichend") elif note == 5: print("magelhaft") elif note == 6: print("ungenügend") else: print("Falsche Eingabe!") =====Erklärvideo===== {{youtube>4YIqIKB-3Tc}} ===== Vertiefung ===== Im Lehrbuch inf-Schule wird das Thema nochmal vertieft: * https://www.inf-schule.de/programmierung/imperativeprogrammierung/konzepteimp/entscheidungen/exkurs_mehrfachfallunterscheidungen =====Aufgaben===== **Aufgabe 1** Schreibe ein Programm, welches nach Eingabe der Nummer des Wochentages den Wochentag ausgibt. Wenn eine falsche Zahl eingegeben wird, soll ausgegeben werden "Falsche Eingabe!". **Aufgabe 2** Schreibe ein Programm, welches nach Eingabe der Gesamtpunktzahl und der erreichten Punktzahl die Note ausgibt. Dabei gelten die folgenden Prozentsätze: ^ Anteil p der erreichten Punkte ^ Note ^ | 95% < = p < = 100% | 1 | | 80% < = p < 95% | 2 | | 65% < = p < 80% | 3 | | 45% < = p < 65% | 4 | | 25% < = p < 45% | 5 | | 0% < = p < 25% | 6 | Nimmt p keinen der angegebenen Werte an, so soll ausgegeben werden "Falsche Eingabe!". \\ [[python:loesungen:mehrfach| >> Lösungen]] [[python:schleifen_mit_abbruch|>> Schleifen mit Abbruchbedingung]] \\ ~~DISCUSSION | Hier können Fragen zum Inhalt der Seite gestellt werden. ~~