Die Fehlermeldung beim Pausenverkauf
AFB I–IIDie Schülerfirma verkauft Brezeln für 80 Cent, pro Bestellung gibt es 10 Cent Rabatt. Nach der Eingabe 3 erscheint eine Fehlermeldung:
# Pausenverkaufpreis = 80anzahl = input("Wie viele Brezeln? ")rabatt = 10summe = anzahl * preis - rabattprint("Zu zahlen:", summe, "Cent")
Wie viele Brezeln? 3
Traceback (most recent call last):
File "pause.py", line 5, in <module>
summe = anzahl * preis - rabatt
TypeError: unsupported operand type(s) for -: 'str' and 'int'
- Entnimm der Fehlermeldung die Fehlerart, die Zeilennummer und die Beschreibung.
- Erkläre die Ursache des Fehlers. Gehe dabei darauf ein, warum Python
anzahl * preisnoch ohne Meldung ausrechnet. - Gib eine korrigierte Zeile 3 an und die Ausgabe, die sich dann bei der Eingabe 3 ergibt.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Fehlerart: TypeError. Zeile: 5 (summe = anzahl * preis - rabatt). Beschreibung: Der Operator − passt nicht zu den Typen str und int.
Erwartungshorizont zu Aufgabe b)
input liefert den Text "3". Text mal Zahl ist in Python erlaubt: Der Text wird wiederholt — "3" * 80 ergibt einen Text aus achtzig Dreien. Erst beim Abziehen von 10 treffen str und int aufeinander; Text minus Zahl ist nicht definiert, deshalb der TypeError. Die eigentliche Ursache steht also schon in Zeile 3: Es fehlt int(…).
Erwartungshorizont zu Aufgabe c)
anzahl = int(input("Wie viele Brezeln? "))Wie viele Brezeln? 3 Zu zahlen: 230 Cent
3 · 80 − 10 = 230.
Tims Weitsprung-Programm
AFB II–IIITim möchte beim Sportfest den Durchschnitt seiner drei Weitsprünge berechnen. Ab 4.0 m im Schnitt ist man für das Finale qualifiziert. Seine Versuche: 3.5 m, 4.0 m und 4.5 m.
# Weitsprung: Durchschnitt aus drei Versuchenv1 = float(input("Versuch 1 in m? "))v2 = float(input("Versuch 2 in m? ")v3 = float(input("Versuch 3 in m? "))schnitt = v1 + v2 + v3 / 3print("Durchschnitt: " + schnitt)if schnitt > 4.0 print("Qualifiziert!")
- Ermittle, welche Meldungen Tim nacheinander sieht, wenn er immer nur den gerade gemeldeten Fehler behebt und neu startet. Gib jeweils Fehlerart und Zeile an.
- Entwickle eine vollständig korrigierte Fassung des Programms und gib die Ausgabe für Tims Versuche an.
- Bewerte Tims Aussage: „Wenn Python keine Fehlermeldung mehr zeigt, ist mein Programm fertig.“
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
1. Lauf: SyntaxError in Zeile 3 („'(' was never closed“) — es startet nichts. 2. Lauf: SyntaxError in Zeile 7 (Doppelpunkt fehlt: „expected ':'“). 3. Lauf: Die Eingaben klappen, dann TypeError in Zeile 6 (Text + float). 4. Lauf (mit Komma in print): keine Meldung. Ausgabe „Durchschnitt: 9.0“ und „Qualifiziert!“ — das ist falsch, denn wegen Punkt vor Strich wird nur v3 durch 3 geteilt: 3.5 + 4.0 + 1.5 = 9.0.
Erwartungshorizont zu Aufgabe b)
# Weitsprung: Durchschnitt aus drei Versuchenv1 = float(input("Versuch 1 in m? "))v2 = float(input("Versuch 2 in m? "))v3 = float(input("Versuch 3 in m? "))schnitt = (v1 + v2 + v3) / 3print("Durchschnitt:", schnitt, "m")if schnitt > 4.0: print("Qualifiziert!")
Versuch 1 in m? 3.5 Versuch 2 in m? 4.0 Versuch 3 in m? 4.5 Durchschnitt: 4.0 m
Der Durchschnitt ist genau 4.0 m. Weil die Bedingung „größer als 4.0“ lautet, ist Tim knapp nicht qualifiziert — die fehlerhafte Fassung hätte ihn fälschlich weitergeschickt.
Erwartungshorizont zu Aufgabe c)
Die Aussage ist falsch und gefährlich. Python meldet nur Fehler in der Schreibweise und Fehler, die das Ausführen unmöglich machen. Logische Fehler — wie die fehlende Klammer beim Durchschnitt — bleiben unbemerkt und liefern falsche Ergebnisse. Deshalb muss man ein Programm immer mit Beispielwerten testen, deren Ergebnis man vorher selbst ausgerechnet hat.
