Praxiseinstieg: «Der Mittelwert stimmt nicht, aber es gibt keine Meldung»
Rolle: Du bist Ivo Walther (erfundene Person). Dein Programm berechnet den Mittelwert aus drei Lagerbewegungen 10, 20 und 30. Du erwartest 20, das Programm zeigt 40.0. Es gibt keine Fehlermeldung. Du änderst wahllos Zahlen und Zeichen, bis dich ein Kollege fragt: «Wo genau weicht das erste Ergebnis von deiner Rechnung ab?»
Lage: Bei einem Logikfehler hilft Raten nicht. Du brauchst eine Erwartung, einen Vergleich und eine Methode, um die Abweichung zu finden.
Auftrag: Überlege, wie du Schritt für Schritt herausfindest, an welcher Stelle das Programm vom erwarteten Wert abweicht.
Lernziele
- Erwartung und Ergebnis vergleichen.
- Zwischenwerte beschriftet ausgeben.
- Die erste abweichende Stelle finden.
Erwartung, Zwischenwerte, Spurtabelle und Vereinfachen
Zuerst die Erwartung
Bevor du suchst, schreibst du auf, was herauskommen soll und warum: «(10 + 20 + 30) durch 3 gleich 20». Ohne Erwartung kannst du nicht erkennen, ob ein Ergebnis falsch ist.
Zwischenwerte beschriftet ausgeben
Gib mit print die Werte aus, die zwischen Eingabe und Ergebnis liegen, und beschrifte sie: print("c / 3 =", c / 3). So siehst du, welche Zeile den ersten falschen Wert liefert.
a = 10
b = 20
c = 30
mittel = a + b + c / 3
print("c / 3 =", c / 3)
print("mittel =", mittel)Ausgabe:
c / 3 = 10.0
mittel = 40.0Die Beschriftung zeigt: c / 3 ergibt 10.0, aber mittel ist 40.0. Weil / vor + ausgewertet wird, rechnet Python 10 + 20 + (30 / 3). Die Summe müsste in Klammern stehen.
a = 10
b = 20
c = 30
mittel = (a + b + c) / 3
print(mittel)Ausgabe:
20.0Die Spurtabelle
Eine Spurtabelle (Modul 2) hält die Variablenwerte nach jeder Zeile fest. Du vergleichst jede Zeile mit deiner Erwartung und findest die erste Abweichung. Sie ersetzt das Raten durch ein Protokoll.
Vereinfachen und Halbieren
- Vereinfachen: Rechne mit kleinen, runden Zahlen, deren Ergebnis du im Kopf kennst.
- Halbieren: Kommentiere die zweite Hälfte aus (mit #) und prüfe, ob die erste Hälfte stimmt. Dann weisst du, in welcher Hälfte der Fehler liegt.
- Erklären: Schildere dein Programm Zeile für Zeile einer Person oder einem Gegenstand. Beim Erklären fällt der Denkfehler oft auf.
Ablauf eines Debugging
- Erwartung festlegen.
- Beobachten: Ergebnis und Zwischenwerte ausgeben.
- Hypothese bilden: «Die Klammer fehlt.»
- Prüfen mit einer Änderung.
- Wiederholen, bis die Erwartung erfüllt ist, und die Hilfsausgaben entfernen.
Zielkonflikt und Entscheidungskriterien
Print gegen Spurtabelle: Print liefert echte Werte, kostet aber Änderungen am Programm. Die Spurtabelle von Hand ist langsamer, zeigt aber auch Zeilen, die du nicht ausgibst. Kriterien: Grösse des Programms, Ort der Vermutung, Aufwand.
Geführtes Beispiel
Ivo schreibt die Erwartung auf (20), gibt c / 3 aus, sieht 10.0 und erkennt, dass die Summe nicht in Klammern stand. Er ändert genau diese Zeile und erhält 20.0.
Grenzen
Hilfsausgaben gehören nach der Suche wieder entfernt. Bei sehr grossen Programmen helfen weitere Werkzeuge, die dieser Kurs nicht behandelt. Alle Personen und Zahlen sind erfunden.
Mini-Fall und Prüfungsanker: Die Auslastung des Lagers
Mini-Fall: 501 statt 90 Prozent
Ausgangslage: Ivo berechnet die Auslastung: 45 Plätze sind belegt, 5 sind frei, die Auslastung soll 90 Prozent betragen. Sein Programm:
belegt = 45
frei = 5
quote = belegt / belegt + frei * 100
print(quote)Es gibt 501.0 aus. Er sagt: «Python rechnet falsch, ich verwende einen Taschenrechner.»
Entscheidungspunkt: Lege die Erwartung fest, gib Zwischenwerte aus oder rechne sie von Hand, finde die fehlerhafte Zeile, korrigiere sie und beurteile Ivos Aussage. Formuliere eine Empfehlung mit Kriterium und Vorbehalt.
Musterlösung aufklappen
Erwartung: 45 durch (45 + 5) mal 100 gleich 90.
Zwischenwerte: belegt / belegt ergibt 1.0, frei * 100 ergibt 500, die Summe 501.0. Python rechnet nach Punkt vor Strich: zuerst die Division belegt / belegt und die Multiplikation, dann die Addition. Der Ausdruck entspricht nicht der Prozentformel.
Korrektur: quote = belegt / (belegt + frei) * 100:
belegt = 45
frei = 5
quote = belegt / (belegt + frei) * 100
print(quote)Die Ausgabe ist 90.0.
Aussage: Falsch: Python rechnet genau das, was geschrieben steht. Der Fehler liegt in der Formel, nicht im Werkzeug.
Empfehlung: «Ivo legt die Erwartung vorher fest, prüft Zwischenwerte und setzt Klammern, wo der Nenner mehrere Teile hat. Kriterium ist die Übereinstimmung mit der Erwartung. Vorbehalt: Die Formel bleibt falsch, wenn belegt und frei zusammen 0 ergeben (Division durch 0). Alle Zahlen sind erfunden.»
Bewertungskriterien: Erwartung, Zwischenwerte, fehlerhafte Zeile, Korrektur, Aussage beurteilt, Kriterium und Vorbehalt. Das ist eine Lernübung.
Typische Fehler
- Fehler: Ohne Erwartung zu suchen. Ursache: Man hofft, den Fehler zu sehen. Folge: Zufällige Änderungen. Korrektur: Erwartung aufschreiben.
- Fehler: Klammern im Nenner zu vergessen. Ursache: Punkt vor Strich. Folge: Falsche Quoten. Korrektur: Klammern setzen.
- Fehler: Hilfsausgaben im fertigen Programm zu lassen. Ursache: Es läuft ja. Folge: Unübersichtliche Ausgabe. Korrektur: Aufräumen.
Prüfungsanker
«Finde einen Logikfehler und begründe die Korrektur.» Gute Antworten legen die Erwartung fest, geben Zwischenwerte aus, finden die erste Abweichung, ändern genau eine Stelle und prüfen erneut.
Entscheidungsregel: Erwartung, Zwischenwerte, erste Abweichung, eine Änderung, erneut prüfen.