MINT lernen

Verzweigen mit if, elif, else

Zwei Sachaufgaben zu Verzweigungen mit if, elif und else mit Hinweisen und Erwartungshorizont.

Dein Fortschritt:
0 / 0 Aufgaben
1

Die Akku-Anzeige

AFB I–II

Eine App soll den Akkustand eines Handys in Worten anzeigen:

akku = int(input("Akkustand in Prozent? "))if akku >= 80:    print("voll")elif akku >= 20:    print("ok")elif akku > 5:    print("niedrig - bitte laden")else:    print("kritisch - Stromsparmodus")
  1. Stelle in einer Übersicht dar, welche Ausgabe das Programm bei den Eingaben 100, 80, 20, 5 und 0 erzeugt.
  2. Bestimme alle ganzzahligen Akkustände, bei denen „niedrig - bitte laden“ erscheint.
  3. Erkläre, was passiert, wenn Zeile 1 ohne int(…) geschrieben wird.

Hinweise

Hinweis zu Aufgabe a)
Gehe für jede Eingabe die Bedingungen von oben nach unten durch und stoppe beim ersten True.
Hinweis zu Aufgabe b)
Welche Bedingungen müssen vorher falsch gewesen sein?
Hinweis zu Aufgabe c)
Was vergleicht Python dann in Zeile 2 miteinander?

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)
  • 100 → voll
  • 80 → voll (80 >= 80 ist wahr)
  • 20 → ok (20 >= 20 ist wahr)
  • 5 → kritisch - Stromsparmodus (5 > 5 ist falsch)
  • 0 → kritisch - Stromsparmodus
Erwartungshorizont zu Aufgabe b)

Der dritte Zweig läuft nur, wenn akku >= 80 und akku >= 20 falsch sind (also akku < 20) und akku > 5 wahr ist: bei 6, 7, …, 19 — das sind 14 Werte.

Erwartungshorizont zu Aufgabe c)

Dann ist akku ein Text, z. B. "50". In Zeile 2 soll Python einen Text mit der Zahl 80 vergleichen. Das geht nicht: Es erscheint TypeError: '>=' not supported between instances of 'str' and 'int'. Mit int(…) wird die Eingabe vorher in eine Zahl umgewandelt.

2

Zahlenraten mit Tipps

AFB II–III

Für den Tag der offenen Tür soll ein Rate-Spiel entstehen: Der Computer denkt sich die Zahl 37. Nach einem Tipp soll er antworten: „Treffer!“, „Etwas zu klein“ bzw. „Etwas zu groß“ (höchstens 10 daneben) oder „Viel zu klein“ bzw. „Viel zu groß“ (mehr als 10 daneben).

  1. Implementiere das Spiel für einen einzigen Tipp mit if, elif und else.
  2. Widerlege Leons Behauptung: „Die Reihenfolge der elif-Zweige ist egal, es werden ja sowieso alle Bedingungen geprüft.“
  3. Beurteile Mias Vorschlag, statt elif einfach lauter einzelne if-Anweisungen zu schreiben.

Hinweise

Hinweis zu Aufgabe a)
Die Reihenfolge der Zweige ist wichtig: Prüfe „viel zu klein“ vor „etwas zu klein“.
Hinweis zu Aufgabe b)
Vertausche die Zweige „Viel zu klein“ und „Etwas zu klein“ und probiere den Tipp 5.
Hinweis zu Aufgabe c)
Was passiert beim Tipp 5, wenn jede Bedingung ein eigenes if ist?

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Mögliche Lösung:

# Zahlenraten: eine Rundegeheim = 37tipp = int(input("Dein Tipp (1 bis 100)? "))if tipp == geheim:    print("Treffer!")elif tipp < geheim - 10:    print("Viel zu klein")elif tipp < geheim:    print("Etwas zu klein")elif tipp > geheim + 10:    print("Viel zu groß")else:    print("Etwas zu groß")

Test: 37 → Treffer!, 27 → Etwas zu klein, 26 → Viel zu klein, 47 → Etwas zu groß, 48 → Viel zu groß.

Erwartungshorizont zu Aufgabe b)

Gegenbeispiel: Steht elif tipp < geheim: vor elif tipp < geheim - 10:, dann ist beim Tipp 5 schon die erste dieser Bedingungen wahr — das Programm meldet „Etwas zu klein“, obwohl 5 viel zu klein ist. Der Zweig „Viel zu klein“ kann nie mehr erreicht werden. Python prüft von oben und führt nur den ersten wahren Zweig aus; die übrigen Bedingungen werden gar nicht mehr geprüft.

Erwartungshorizont zu Aufgabe c)

Mit einzelnen if wird jede Bedingung geprüft, es können mehrere Zweige laufen. Beim Tipp 5 wären sowohl tipp < 27 als auch tipp < 37 wahr — es erscheinen „Viel zu klein“ und „Etwas zu klein“:

if tipp == geheim:    print("Treffer!")if tipp < geheim - 10:    print("Viel zu klein")if tipp < geheim:    print("Etwas zu klein")

Der Vorschlag ist daher ungeeignet: Wenn sich die Fälle gegenseitig ausschließen sollen, ist if – elif – else die richtige Struktur. Einzelne if passen nur, wenn mehrere Aktionen gleichzeitig zutreffen dürfen.