Charly hat noch Ferien und kommt nach Berlin. Lila will ein TigerJython-Programm für einen Volkslauf schreiben. Beim Zieleinlauf will sie die Nummer des Läufers eingeben und hofft, gleichzeitig die Zeit mitzunotieren. Das will sie nun testen.
Lilas Fun Run Program
Charly Lila, erklär‘ doch mal Dein Programm!
Lila Klar! Die Idee kommt aus Deinem Lehrbuch. Da gibt es eine Vorlage, die für jeden Läufer den Vornamen und das Alter abspeichert. Es hat zwei Schwachstellen.
Charly Ja?
Lila Es speichert die Daten nur solange, wie das Programm läuft. Also – die Daten werden nicht extern abgelegt.
Charly Hahaha! Ein Anmeldeprogramm, das die Anmeldedaten nach der Anmeldung zerstört!
Lila Ja, außerdem enthält es keine Messung der Laufzeit jedes Läufers. Es war nur ein Anmelde-Programm.
Charly Na! Ein Programm für einen Lauf – ohne Ergebnisse und ohne Siegerzeiten?
Lila Stimmt!
Charly Lila – und was hast Du gemacht?
Lilas Variablen
Lila Ich habe eine Tabelle in einer Datenbank angelegt. In jeder Zeile steht die Nummer des Läufers und dahinter kommt seine Laufzeit. Die Syntax stand nicht im Buch, das habe ich mir selbst überlegt.
Das Datenbank-File nenne ich
Berlin-Lauf.pydb
Die Variable zum File heißt
data
Die Tabelle kriegt die Variable
teilnehmer
Mit der Erzeugung der Tabelle werden die beiden Spalten mit den Überschriften „Läufer“ bzw. „Laufzeit“ festgelegt. Schau mal, so geht das:
Charly Okay!
Lila Dann kann man auf die Tabellenwerte durch
data.teilnehmer
zugreifen.
Tatsächlich schreibe ich immer nur zeilenweise etwas hinein. Wenn Max hier im Ziel einläuft, dann will ich seine Nummer eingeben, gleichzeitig soll das Programm die Zeit notieren und in einer Zeile eintragen.
Zeitmessung
Charly Hört sich gut an! Wie geht das mit der Zeitmessung?
Lila Man muss die time-Bibliothek einbinden und hat dann Befehle zur Zeitmessung zur Verfügung. Das konnte ich direkt aus dem Documentary von Rainer Steiger oder Roger Keller nehmen. Da blicke ich nicht ganz durch, ob Rainer oder Roger. Jedenfalls geht es einfach so:
startzeit = time()
Charly Klaro!
Lila Vorher rufe ich ein askYesNo-Dialogfenster auf, das habe ich im TigerJython-Documentary gefunden, sodass ich selbst die Startzeit festlegen kann:
Wenn ein Läufer durch's Ziel läuft, messen wir wieder die Zeit, merken uns das:
endzeit = time()
und berechnen die Differenz:
laufzeit = startzeit - endzeit
Was meinst Du, reichen da ganze Sekunden oder soll ich lieber die Zeit als Gleitkommazahl nehmen?
Charly Nimm mal lieber Gleitkommazahlen, bei kurzen Strecken kann schon eine hundertstel Sekunde entscheiden.
Schleife und Abbruch
Lila Gut! Das Schwierigste war wieder, den Lauf zu beenden. Ich mache ein Dialogfeld und frage nach der Nummer:
Dann kommt die Zeitmessung und danach wird die Differenzzeit in die Tabelle geschrieben. Das mache ich immer wieder bis zum letzten Läufer. Aber wie breche ich ab?
Charly Hier steht doch „Abbrechen“! Du musst also immer nachfragen, was der Dialog zurückgibt.
Lila Richtig, das hatte ich doch schon mal!
Charly Siehst Du! Und wenn nicht „Abbrechen“ gedrückt wird, machst Du immer weiter. Außerdem würde ich eine maximale Zahl angeben, vielleicht ist ja die Zahl der Läufer nach der Anmeldung bekannt?
Lila Okay! Da muss ich einen geeigneten Befehl für den Dialog heraussuchen:
inputInt(prompt, False)
macht das genau. Ich prüfe, ob das Ergebnis „None“ ist, wenn nicht, übernehme ich die Zahl in die Integer-Variable
n
und wenn doch, wird die Schleife abgebrochen. Charly, wie oft soll Max durchs Ziel laufen?
Charly Max, kannst Du 5 Runden laufen?
Max Okay!
Lila Gut!
Charly Dann mal los! Max und Lila: Auf die Plätze, fertig, los!
***
Übungsaufgaben
- Schreibe das Flowchart für Lilas Programm!
- Schreibe Lilas Programm und teste es!
- Wie schnell ist Max gelaufen?
Lösung
1. Datenbank initialisieren:
Datenbank füllen und ausgeben:
2.
3. 47,8 s; 133,8 s; 69,6 s; 177,2 s; 74,1 s