Lektion 11 von 35Python
Python · Lektion 11 · 30 Minuten
Fehler-Detektiv: Bugs finden
Das lernst du
- Fehlermeldungen von unten nach oben lesen
- Fehler finden, die keine Meldung erzeugen
- Mit
print()und „Schritte“ in ein Programm hineinschauen
Bugs gehören dazu
Ein Fehler im Programm heißt Bug (englisch für Käfer). Der Name stammt angeblich aus dem Jahr 1947: In einem Computer hatte sich eine echte Motte verfangen. Seitdem heißt Fehlersuche Debugging – „Entkäfern“.
Wichtig: Jeder macht Fehler, auch Profis, jeden Tag. Gute Programmiererinnen und Programmierer sind nicht die, die keine Fehler machen, sondern die, die sie schnell finden.
Spur 1: Die Fehlermeldung
Wenn Python abbricht, ist die Meldung dein wichtigster Hinweis. Lies sie von unten nach oben:
preise = [3, 5, 2]
gesamt = sum(preise)
print("Summe: " + gesamt)- Die letzte Zeile sagt, was passiert ist:
TypeError– Text und Zahl passen nicht zusammen. - Darüber steht, in welcher Zeile es passiert ist.
- Codelix markiert die Zeile rot und erklärt den Fehler. Probier, ihn zu reparieren:
str(gesamt)oder ein Komma statt+.
Tippfehler erkennt Codelix sogar: Schreib in einem Editor mal pirnt("Hallo").
Spur 2: Fehler ohne Fehlermeldung
Gemeiner sind Fehler, bei denen das Programm durchläuft, aber das Falsche herauskommt:
# Soll zählen, wie viele Zahlen größer als 10 sind
zahlen = [5, 12, 30, 8, 11]
anzahl = 0
for zahl in zahlen:
if zahl > 10:
anzahl = 1
print(anzahl)Hier hilft nur: Vorher überlegen, was herauskommen soll (hier: 3), dann vergleichen. Siehst du den Fehler?
Spur 3: Ins Programm hineinschauen
Wenn du nicht weißt, was passiert, lass es dir zeigen:
- print() an verdächtigen Stellen:
print("zahl:", zahl, "anzahl:", anzahl)in der Schleife zeigt jeden Schritt. - Der Knopf ⏯ Schritte im Editor spielt das Programm Zeile für Zeile ab und zeigt alle Variablen.
summe = 0
for i in range(1, 5):
summe = summe + i
print("i =", i, "summe =", summe)Detektiv-Regel: Ändere immer nur eine Sache, dann neu ausführen. Wer fünf Dinge auf einmal ändert, weiß hinterher nicht, was geholfen hat.
Kurz-Check
Was gibt dieses Programm aus? Und kniffliger: Für welche Liste würde es ein falsches Ergebnis liefern?
werte = [4, 7, 1]
groesster = 0
for w in werte:
if w > groesster:
groesster = w
print(groesster)Deine Aufgabe
Jetzt bist du dran
In diesem Programm stecken drei Bugs. durchschnitt(noten) soll den Durchschnitt einer Notenliste ausrechnen, beste_note(noten) die beste Note finden – und bei Schulnoten ist die kleinste Zahl die beste. Führ das Programm aus, lies die Fehlermeldung und repariere einen Fehler nach dem anderen.
def durchschnitt(noten):
summe = 0
for note in noten:
summe = note
return summe / len(note)
def beste_note(noten):
beste = noten[0]
for note in noten:
if note > beste:
beste = note
return beste
noten = [2, 1, 3]
print("Durchschnitt:", durchschnitt(noten))
print("Beste Note:", beste_note(noten))- Denkanstoß
Lies die letzte Zeile der Fehlermeldung.
len()braucht die ganze Liste – heißt die wirklich note? - Welcher Befehl hilft?
In der Schleife soll die Summe wachsen. summe
=note überschreibt sie jedes Mal – schreib summe=summe+note.Bei Schulnoten ist die kleinere Zahl die bessere. Welches Vergleichszeichen brauchst du dann?
- Lückencode – ergänze die ___
def durchschnitt(noten): summe = 0 for note in noten: summe = ___ return ___ def beste_note(noten): beste = noten[0] for note in noten: if ___: beste = note return beste noten = [2, 1, 3] print("Durchschnitt:", durchschnitt(noten)) print("Beste Note:", beste_note(noten))
Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.
Lösung anzeigen🔒 Erst nach allen Hinweisen oder 2 Prüf-Versuchen
Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:
def durchschnitt(noten):
summe = 0
for note in noten:
summe = summe + note
return summe / len(noten)
def beste_note(noten):
beste = noten[0]
for note in noten:
if note < beste:
beste = note
return beste
noten = [2, 1, 3]
print("Durchschnitt:", durchschnitt(noten))
print("Beste Note:", beste_note(noten))