Die Akku-Anzeige
AFB I–IIEine 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")
- Stelle in einer Übersicht dar, welche Ausgabe das Programm bei den Eingaben 100, 80, 20, 5 und 0 erzeugt.
- Bestimme alle ganzzahligen Akkustände, bei denen „niedrig - bitte laden“ erscheint.
- Erkläre, was passiert, wenn Zeile 1 ohne
int(…)geschrieben wird.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
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.
Zahlenraten mit Tipps
AFB II–IIIFü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).
- Implementiere das Spiel für einen einzigen Tipp mit if, elif und else.
- Widerlege Leons Behauptung: „Die Reihenfolge der elif-Zweige ist egal, es werden ja sowieso alle Bedingungen geprüft.“
- Beurteile Mias Vorschlag, statt elif einfach lauter einzelne if-Anweisungen zu schreiben.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
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.
