Zum Inhalt springen
BetaEN
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))

Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.

Lösung anzeigen

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))