Ein kleines Auswertungsprogramm nachvollziehen und testen

Du setzt Werte, Variablen, Datentypen, Ein- und Ausgabe, Bedingungen und eine Schleife zu einem kleinen Python-Programm zusammen.

40 Min Lesezeit Stand:
Lernfelder: Lernfeld 5
Berufsbildpositionen: A4A10

Drei Messwerte, aber noch keine Auswertung

Die Nordblick Gebäudetechnik richtet neue Besprechungsräume ein. Nach der Installation misst das Serviceteam, wie lange ein Testgerät für den Verbindungsaufbau braucht. Der vereinbarte Richtwert liegt bei höchstens 30 Sekunden. Bislang trägt das Team jeden Messwert in eine Tabelle ein und zählt Überschreitungen von Hand.

Für drei Räume wurden 18, 30 und 47 Sekunden gemessen. Ein kleines Programm soll jeden Wert einlesen, sofort einordnen und am Ende die Zahl der Überschreitungen ausgeben. An diesem überschaubaren Auftrag kannst du die Grundbausteine eines Programms sehen, ohne gleichzeitig eine umfangreiche Anwendung bauen zu müssen.

Du brauchst keine Vorkenntnisse in Python. Jeder neue Begriff wird an der Stelle erklärt, an der du ihn verwendest. Nach der Lektion kannst du einen einfachen Programmablauf lesen, verändern und mit Testwerten prüfen.

Werte werden durch Variablen auffindbar

Ein Wert ist eine konkrete Information, mit der das Programm arbeitet. 30, 47 und "Richtwert eingehalten" sind Werte. Sie bedeuten für das Programm zunächst nur das, was ihr Datentyp und der umgebende Code festlegen.

Eine Variable gibt einem Wert einen Namen. Der Name macht sichtbar, wofür der Wert im Programm steht:

limit_seconds = 30
measured_seconds = 47
exceeded_count = 0

Die Variable limit_seconds verweist auf den Richtwert. measured_seconds enthält den gerade betrachteten Messwert. In exceeded_count merkt sich das Programm, wie viele Überschreitungen es bisher gefunden hat.

Das Gleichheitszeichen ist hier eine Zuweisung. Die Zeile exceeded_count = 0 legt nicht die mathematische Aussage “Überschreitungen sind immer null” fest. Sie gibt der Variable zu diesem Zeitpunkt den Startwert 0. Später kann ein anderer Wert zugewiesen werden.

Datentypen legen mögliche Operationen fest

Ein Datentyp beschreibt, welche Art von Wert vorliegt und welche Operationen damit sinnvoll sind. Für das Beispiel reichen drei Typen:

Python-TypBedeutungBeispielSinnvolle Verwendung
intganze Zahl47Messwert zählen oder vergleichen
strZeichenkette, also Text"Raum 2"Bezeichnung einlesen oder ausgeben
boolWahrheitswertTrue oder FalseErgebnis einer Bedingung festhalten

Der Typ ist keine Nebensache. Mit zwei ganzen Zahlen kann Python rechnen. Zwei Texte werden beim Pluszeichen dagegen aneinandergefügt. Deshalb ergibt 20 + 5 den Zahlenwert 25, während "20" + "5" den Text "205" ergibt.

Im nächsten Schritt entsteht ein Wahrheitswert durch einen Vergleich:

measured_seconds = 47
limit_seconds = 30
within_limit = measured_seconds <= limit_seconds

print(within_limit)

Der Ausdruck measured_seconds <= limit_seconds fragt, ob der Messwert kleiner oder gleich dem Richtwert ist. Bei 47 und 30 ist das Ergebnis False. Dieses Ergebnis wird in der Variable within_limit gespeichert und anschließend ausgegeben.

Schnellcheck

Wähle einen passenden Wert und Datentyp

Entscheide dich bei jeder Frage. Du bekommst die Erklärung direkt nach deiner Antwort.

Das Programm soll die bisherige Anzahl der Überschreitungen speichern und später um eins erhöhen. Welche Zuweisung passt?

Das passt.

Noch nicht ganz.

Eine ganze Zahl passt, weil das Programm damit zählen kann. Text und Wahrheitswert können andere Informationen tragen, bilden die Anzahl aber nicht passend ab.

Bei measured_seconds = 30 und limit_seconds = 30 soll der Richtwert als eingehalten gelten. Welcher Vergleich bildet das ab?

Das passt.

Noch nicht ganz.

Das kleiner-gleich-Zeichen schließt den Grenzwert 30 ein. Nur kleiner als 30 würde einen genau passenden Messwert fälschlich ablehnen.

Geschafft

von 2

Situationen richtig eingeordnet.

Eingabe kommt zunächst als Text an

Mit input() wartet ein Python-Programm auf eine Eingabe. Der Text in den Klammern dient als verständliche Aufforderung:

room_name = input("Raumbezeichnung: ")
print("Geprüft:", room_name)

input() liefert immer eine Zeichenkette. Das passt für room_name. Ein eingegebener Messwert soll jedoch mit 30 verglichen werden. Dafür wird der Text mit int() in eine ganze Zahl umgewandelt:

input_text = input("Verbindungszeit in Sekunden: ")
measured_seconds = int(input_text)

Die beiden Zeilen trennen zwei Schritte: zuerst einlesen, danach umwandeln. Diese Trennung hilft beim Nachvollziehen. Die kürzere Schreibweise int(input(...)) wäre ebenfalls möglich, versteckt aber einen Zwischenschritt.

Die Umwandlung hat eine Grenze. Bei einer Eingabe wie schnell kann Python keine ganze Zahl bilden und beendet das Programm mit einem Fehler. Eine robuste Behandlung ungültiger Eingaben ist wichtig, würde hier aber zusätzliche Sprachmittel einführen. Diese Lektion arbeitet deshalb mit der klaren Voraussetzung, dass ganze, nicht negative Sekundenwerte eingegeben werden.

Eine Bedingung entscheidet zwischen zwei Wegen

Eine Bedingung liefert True oder False. Mit if entscheidet das Programm, welcher Code abhängig von diesem Ergebnis ausgeführt wird. else beschreibt den anderen Fall:

limit_seconds = 30
measured_seconds = int(input("Verbindungszeit in Sekunden: "))

if measured_seconds <= limit_seconds:
    print("Richtwert eingehalten")
else:
    print("Richtwert überschritten")

Der Doppelpunkt eröffnet jeweils einen eingerückten Block. Die Einrückung ist in Python Teil der Syntax. Nur die eingerückte Ausgabe unter der passenden Verzweigung wird ausgeführt.

Für den Messwert 30 ist die Bedingung wahr. Das Programm gibt Richtwert eingehalten aus. Für 47 ist sie falsch und das Programm folgt dem else-Zweig.

Eine Verzweigung ist dann hilfreich, wenn aus einer fachlichen Regel unterschiedliche Handlungen folgen. Sie ersetzt nicht die fachliche Klärung. Bevor Code entsteht, muss zum Beispiel eindeutig sein, ob 30 Sekunden noch zulässig sind. Im Szenario sagt “höchstens 30 Sekunden”, dass der Grenzwert dazugehört.

Bausteinaufgabe

Baue den Ablauf für einen Messwert

Bringe die Schritte in eine Reihenfolge, in der die fachliche Entscheidung nachvollziehbar bleibt.

Ziehe die Einträge an die richtige Position. Geht auch per Tastatur über den Griff.

Die Reihenfolge stimmt.

Die Reihenfolge passt noch nicht.

Die Eingabe liefert zunächst Text. Nach der Umwandlung kann das Programm den Zahlenwert vergleichen. Erst das Vergleichsergebnis entscheidet über die passende Ausgabe.

Eine Schleife verarbeitet mehrere Messwerte

Das Programm soll denselben Ablauf für drei Räume durchführen. Dreimal kopierter Code wäre schwerer zu ändern und lädt zu Abweichungen ein. Eine Schleife wiederholt einen Codeblock nach einer festgelegten Regel.

In Python liefert range(3) nacheinander die Zahlen 0, 1 und 2. Die for-Schleife führt ihren eingerückten Block für jede dieser Zahlen einmal aus:

for index in range(3):
    print("Messung", index + 1)

Die Ausgabe beginnt durch index + 1 bei 1. Die Schleife selbst hat weiterhin drei Durchläufe. Dieses Detail ist hilfreich, weil Computer häufig ab null zählen, Menschen eine erste Messung aber meist als Nummer 1 bezeichnen.

Jetzt kommen die bisherigen Bausteine zusammen:

limit_seconds = 30
measurement_count = 3
exceeded_count = 0

for index in range(measurement_count):
    room_name = input("Raumbezeichnung: ")
    input_text = input("Verbindungszeit in Sekunden: ")
    measured_seconds = int(input_text)
    within_limit = measured_seconds <= limit_seconds

    if within_limit:
        print(room_name, ": Richtwert eingehalten")
    else:
        print(room_name, ": Richtwert überschritten")
        exceeded_count = exceeded_count + 1

print("Überschreitungen:", exceeded_count)

exceeded_count liegt vor der Schleife, weil die Anzahl über alle Durchläufe hinweg erhalten bleiben soll. Im else-Zweig liest exceeded_count = exceeded_count + 1 zuerst den bisherigen Wert, erhöht ihn und weist das Ergebnis wieder derselben Variable zu.

Die letzte Ausgabe ist nicht eingerückt. Sie gehört daher nicht zur Schleife und erscheint genau einmal, nachdem alle Messwerte verarbeitet wurden.

Ein Schreibtischtest macht den Zustand sichtbar

Bei einem Schreibtischtest führst du den Code mit festgelegten Eingaben Schritt für Schritt aus. Du notierst nach jedem Durchlauf die Werte wichtiger Variablen. So kannst du erwartetes und tatsächliches Verhalten vergleichen, ohne dich auf einen schnellen Blick in den Code zu verlassen.

Für die Eingaben Raum A, 18, Raum B, 30 und Raum C, 47 ergibt sich:

Durchlaufmeasured_secondswithin_limitexceeded_count danachAusgabe
118True0Richtwert eingehalten
230True0Richtwert eingehalten
347False1Richtwert überschritten

Die Tabelle zeigt besonders den Grenzwert 30. Ein Test nur mit 18 und 47 würde zwar beide Zweige ausführen, aber nicht prüfen, ob der Grenzwert selbst richtig behandelt wird.

Fehlersuche

Finde die Ursache für die falsche Zusammenfassung

Das Programm meldet nach den Messwerten 47, 18 und 52 nur eine Überschreitung. Wähle die fehlerhafte Stelle.

Fehler gefunden.

Diese Stelle ist nicht die Ursache.

Die eingerückte Zuweisung setzt den Zähler in jedem Durchlauf wieder auf null. Der Startwert gehört nur vor die Schleife. Innerhalb der Schleife wird der Zähler ausschließlich bei einer Überschreitung erhöht.

Testfälle beschreiben erwartbares Verhalten

Ein Testfall verbindet eine Eingabe mit einem erwarteten Ergebnis. Für die Bedingung sind Werte aus drei Gruppen hilfreich:

  • unter dem Grenzwert, zum Beispiel 18 Sekunden,
  • genau auf dem Grenzwert, also 30 Sekunden,
  • über dem Grenzwert, zum Beispiel 47 Sekunden.

Für die Schleife kommt eine weitere Frage dazu: Stimmt die Zusammenfassung, wenn mehrere Messwerte den Grenzwert überschreiten? Mit den Eingaben 31, 45 und 12 muss exceeded_count am Ende den Wert 2 haben.

Solche Beispiele beweisen nicht, dass das Programm für jede mögliche Eingabe fehlerfrei ist. Sie machen aber die fachliche Erwartung überprüfbar. In einer späteren Lektion können daraus systematischere Testverfahren und eine Behandlung ungültiger Eingaben entstehen.

Schnellcheck

Prüfe Programmablauf und Testfälle

Entscheide dich bei jeder Frage. Du bekommst die Erklärung direkt nach deiner Antwort.

Welche Testwerte prüfen die Grenze 'höchstens 30 Sekunden' am aussagekräftigsten?

Das passt.

Noch nicht ganz.

Die Werte 29, 30 und 31 prüfen beide Seiten und den Grenzwert selbst. Genau dort treten bei kleiner-als und kleiner-gleich häufig Unterschiede auf.

Warum steht die abschließende Ausgabe von exceeded_count außerhalb der Schleife?

Das passt.

Noch nicht ganz.

Nicht eingerückter Code gehört nicht mehr zum Schleifenblock. Die Ausgabe läuft deshalb erst nach allen Messungen und zeigt dann den über die Durchläufe aufgebauten Zähler.

Was geschieht bei input_text = '47', bevor der Vergleich mit 30 sinnvoll möglich ist?

Das passt.

Noch nicht ganz.

input() liefert Text. int(input_text) erzeugt daraus für eine gültige Zahleneingabe einen ganzzahligen Wert, der numerisch mit 30 verglichen werden kann.

Geschafft

von 3

Situationen richtig eingeordnet.

Was hier noch nicht Teil der Aufgabe ist

Dieses Programm enthält bereits eine klare Folge von Schritten. Ein Algorithmus ist allgemeiner: Er beschreibt ein eindeutiges, endliches Verfahren zur Lösung einer Aufgabenklasse. Der systematische Entwurf, die grafische Darstellung und die Beurteilung von Algorithmen brauchen mehr als die hier gezeigten Sprachbausteine. Diese Themen gehören in eine eigene Lektion.

Auch objektorientierte Programmierung wird hier nicht benötigt. Sie ordnet Daten und Verhalten häufig in Klassen und Objekten. Für drei Messwerte würde eine zusätzliche Objektstruktur den grundlegenden Ablauf eher verdecken. Bei einer größeren Anwendung mit Räumen, Geräten, Messreihen und unterschiedlichen Regeln kann diese Modellierung später sinnvoll werden.

Funktionen sind ebenfalls ein nächster Ausbauschritt. Sie fassen eine benannte Teilaufgabe mit klaren Eingaben und Ausgaben zusammen. In dieser Lektion bleibt der Code bewusst an einer Stelle, damit du Zuweisung, Verzweigung, Schleife und Zustand zuerst direkt verfolgen kannst.

Übertrage den Ablauf auf eine neue Messreihe

Transferaufgabe

Entwirf eine Temperaturprüfung

Ein Serverraum soll während vier Kontrollgängen höchstens 24 Grad Celsius haben. Das Programm liest pro Kontrollgang eine ganze Temperatur ein, gibt sofort 'im Bereich' oder 'zu warm' aus und nennt am Ende die Zahl der Überschreitungen. Schreibe Python-Code und ergänze drei begründete Testfälle. Du kannst dich am Messprogramm aus der Lektion orientieren.

Musterlösung vergleichen

Musterlösung:

limit_degrees = 24
check_count = 4
exceeded_count = 0

for index in range(check_count):
    input_text = input("Temperatur in Grad Celsius: ")
    measured_degrees = int(input_text)

    if measured_degrees <= limit_degrees:
        print("im Bereich")
    else:
        print("zu warm")
        exceeded_count = exceeded_count + 1

print("Überschreitungen:", exceeded_count)

Geeignete einzelne Testwerte sind 23, 24 und 25. Sie prüfen direkt unter, auf und über dem Grenzwert. Für einen vollständigen Lauf könnten die vier Eingaben 23, 24, 25 und 30 lauten. Erwartet werden zwei Überschreitungen.

Das steckt auch in meiner Lösung:

Das nimmst du mit

Ein kleines Programm wird verständlich, wenn jeder Baustein eine erkennbare Aufgabe trägt. Werte enthalten konkrete Informationen. Variablen geben ihnen Namen. Datentypen legen fest, wie das Programm die Werte behandeln kann. Eingabe bringt Daten in den Ablauf, eine Bedingung entscheidet zwischen Wegen und eine Schleife wiederholt die Verarbeitung.

Testfälle machen aus einer vagen Erwartung ein überprüfbares Verhalten. Werte unter, auf und über einer Grenze helfen dabei, eine Bedingung gezielt zu prüfen. Ein Schreibtischtest zeigt zusätzlich, wie sich Variablen während mehrerer Durchläufe verändern.

Damit steht das Grundgerüst. Algorithmusentwurf, Funktionen, Fehlerbehandlung und objektorientierte Modellierung bauen darauf auf, lösen aber jeweils ein eigenes Problem.

Belegmatrix

LernzielOrdnungsmittelQuellenbasisLernaktivität
Werte, Variablen und Datentypen unterscheidenLF5, A4, A10KMK-Rahmenlehrplan, Lernfeld 5; FIAusbV, Ausbildungsrahmenplan Abschnitt A Nummern 4 und 10; AP1-Prüfungskatalog, Themenkreis ProgrammiersprachenTypentabelle, Codebeispiele und Quiz
Ein- und Ausgabe sowie Bedingungen ableitenLF5, A10FIAusbV, Programmiersprachen anwenden und Teilaufgaben automatisieren; AP1-Prüfungskatalog, Variablen und VerzweigungenMessszenario und Bausteinaufgabe
Wiederholung und Programmzustand nachvollziehenLF5, A4, A10KMK-Rahmenlehrplan, Daten verarbeiten; FIAusbV, Anwendungen erstellen und Teilaufgaben automatisieren; AP1-Prüfungskatalog, SchleifenVollständiges Python-Programm und Schreibtischtest
Verhalten testen und Fehler korrigierenLF5, A4FIAusbV, Fehler feststellen und beheben; AP1-Prüfungskatalog, Fehler in Quellcode und SchreibtischtestFehlersuche, Grenzwerttests und Quiz
Grundlagen fachlich abgrenzen und übertragenLF5, A4, A10KMK-Rahmenlehrplan, Lernfeld 5; FIAusbV, Programmiersprachen und AnwendungenAbgrenzung und Transferaufgabe zur Temperaturprüfung

Durchgearbeitet?

Markiere die Lektion als erledigt, dein Fortschritt wird lokal gespeichert.