Zum Inhalt springen

Aufgabe 01 - Python-Spickzettel

Zu Zen-Modus wechseln

Sie erstellen Ihren persönlichen Python-Spickzettel: eine kompakte, selbst getestete Referenz aller Grundkonstrukte der Sprache (siehe Kapitel Einführung in Python). Der Zettel begleitet Sie durch das ganze Schuljahr; entsprechend sorgfältig soll er entstehen. Der eigentliche Lerneffekt liegt dabei nicht im fertigen Zettel, sondern im Weg dorthin: Jedes Konstrukt wird einmal selbst getippt, ausgeführt und in eigenen Worten beschrieben.

  • Kapitel Einführung in Python (Werkzeuge, Datentypen, Kontrollstrukturen, Funktionen, Listen, Dictionaries, f-Strings).
  • Python 3 (aktuelle Version), VS Code mit Python-Erweiterung, ein Terminal.
  • Sie richten eine funktionierende Python-Arbeitsumgebung ein und führen Skripte aus.
  • Sie schreiben und testen die Grundkonstrukte der Sprache selbstständig in der REPL.
  • Sie dokumentieren technisches Wissen so, dass es später als Nachschlagewerk taugt.
  • Reproduktion: Konstrukte nennen, Syntax wiedergeben, Ausgaben beschreiben (Teil A).
  • Reorganisation und Transfer: Konstrukte auf eigene Beispiele anwenden, Ergebnisse vergleichen und strukturieren (Teile B und C).
  • Reflexion, Problemlösung und Urteilsbildung: ein zusammengesetztes Problem selbstständig lösen, den eigenen Lösungsweg begründen (Teil D).

Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D richtet sich an jene, die früher fertig sind; ein vollständiger, sauberer Zettel aus A bis C ist mehr wert als ein halber Teil D.

  1. Installieren Sie Python und prüfen Sie im Terminal mit python --version, dass Version 3.12 oder neuer läuft.
  2. Führen Sie in der REPL aus und notieren Sie die Ergebnisse: 2 ** 10, 7 / 2, 7 // 2, "ab" * 3.
  3. Legen Sie ein Skript hello.py an, das mit input() nach dem Namen fragt und mit einem f-String personalisiert grüßt. Führen Sie es im Terminal aus.

Erstellen Sie eine Tabelle (Markdown oder Dokument) mit je einem selbst getesteten Mini-Beispiel für:

  1. Variable und Konstante (Namenskonvention!),
  2. if / elif / else,
  3. for-Schleife über range(...) und über eine Liste,
  4. while-Schleife,
  5. Funktionsdefinition mit Parameter, Default-Wert und return,
  6. Liste: anlegen, append, Zugriff per Index, len, Slicing,
  7. Dictionary: anlegen, Zugriff, Schlüssel prüfen mit in, items()-Schleife,
  8. f-String mit Formatangabe (:.2f und :03d).

Jedes Beispiel wird vor dem Eintragen in der REPL ausgeführt. Ungeprüfte Beispiele haben auf dem Zettel nichts verloren.

  1. Führen Sie aus und erklären Sie das Ergebnis in je einem Satz: input("number: ") * 2 bei Eingabe 7; 10 / 4 und 10 // 4; "5" == 5.
  2. Wählen Sie drei Fehlerquellen aus dem Kapitel (Kandidaten: vergessene int()-Umwandlung, fehlender Doppelpunkt, Einrückungsfehler, true statt True) und dokumentieren Sie auf dem Zettel je zwei Sätze: Was passiert, und wie merken Sie es sich?
  3. Provozieren Sie jeden dieser drei Fehler absichtlich und notieren Sie die exakte Fehlermeldung dazu. Wer die Meldungen kennt, findet Fehler später schneller.

Im Kapitel wird frames_to_timecode() entwickelt. Schreiben Sie die Umkehrfunktion:

  1. timecode_to_frames(timecode, fps=25) nimmt einen String wie "01:00:02:11" und liefert die absolute Framenummer (hier: 90061). Hilfreich: timecode.split(":") und int().
  2. Die Funktion weist unbrauchbare Eingaben ab (falsche Anzahl an Teilen, nicht numerische Teile, Minuten oder Sekunden über 59, Framewert nicht kleiner als fps) und gibt in diesem Fall None zurück, zusammen mit einer verständlichen Meldung.
  3. Beweisen Sie die Korrektheit mit einer Rundreise: Für die Framenummern 0, 24, 25, 3599 und 90061 muss timecode_to_frames(frames_to_timecode(n)) wieder n ergeben. Automatisieren Sie diese Prüfung mit einer Schleife und assert.
  4. Begründen Sie in zwei Sätzen, warum die Rundreise-Prüfung mehr Vertrauen schafft als fünf einzeln notierte Erwartungswerte.

Beantworten Sie ohne Nachschauen; kontrollieren Sie danach mit REPL oder Kapitel:

  1. Was liefert input() immer, unabhängig davon, was der Benutzer eintippt?
  2. Worin unterscheiden sich / und //?
  3. Woran erkennt Python, welche Zeilen zu einem if-Block gehören?
  4. Wie heißt die Namenskonvention für Funktionen und Variablen in Python, und wie sieht sie aus?
  5. Was gibt f"{3.14159:.2f}" aus?

Spickzettel (Markdown oder PDF), hello.py, die Stolperfallen-Protokolle aus Teil C und, falls bearbeitet, timecode.py mit der Rundreise-Prüfung.