Grundlagen-Aufgaben#

LOESUNG siehe Grundlagen-Aufgaben

Über diese Aufgaben:

Die Aufgaben vermitteln einen Eindruck, wie typische praktische kleine Problemstellungen aussehen, die man am Ende von Pyton 101 lösen können sollte. Das dient auch der von den Akkreditierern eingeforderten Kompetenzorientierung; die Leitfrage hier lautet bekanntlich “Was kann man, wenn man die Lernziele von Python 101 erreicht hat?”

Die Aufgaben sind so gestellt, dass sie sich auf Skript-Ebene zunächst mit minimalem technischen Aufwand lösen lassen . Gleichzeitig sind sie offen genug, auch fortgeschrittenere – insbesondere generischere – Lösungsmöglichkeiten zuzulassen. Damit lassenn sie sich auch in Programmier-Praktika einsetzen, bei denen Studierende mit sehr heterogenen Vorkenntnissen teilnehmen: Es gibt kein abschließendes “fertig”, fast immer kann man es auch noch etwas eleganter oder schöner machen.

Aufgabe: typische Aufgaben-Struktur kennen#

(Diese Aufgabe ist eine Musteraufgabe, Stub, um die Umgebung der Aufgabenlösung in einem Jupyterbook kennenzulernen.)

Aufgaben in der Klausur Python-101 sind typischerweise strukturiert wie hier:

  • gegeben: da kommt man her, Kontext

  • gesucht: da will man hin

    • Ziel ist eine selbst programmierte Lösung, z.B. in der Variablen ergebnis

  • eine Zelle, die einen Kontext schafft

    • so dass man sofort schlau losprogrammieren kann

    • und die die Testausgabe auch gleicht sieht (display() oder print())

  • eine Zelle, die die eigene Ausgabe mit einem oder mehreren Soll-Werten vergleicht

BEISPIEL:

gegeben:

  • hier gar nichts besonderes

gesucht:

  • eine Operation, die der Variablen ergebnis den Wert 42 zuweist.

# Kontext
ergebnis = ...

# hier schlau programmieren
... # 

# Testausgabe Ihrer Lösung
ergebnis # display(ergebnis) oder print(ergebnis)
Ellipsis
# Diese Tests sollen erfüllt sein
assert ergebnis == 42
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[2], line 2
      1 # Diese Tests sollen erfüllt sein
----> 2 assert ergebnis == 42

AssertionError: 

Aufgabe: Datum als String ausgeben#

z.B. Alan Turing, 23. Juni 1912

gegeben:

  • ein Datum als Dict

    • z.B. d = {"jahr": 1912, "monat": 6, "tag": 23}

gesucht:

  • dieses Datum als String im Format JJJJ-MM-TT

    • z.B. d_string == "1912-06-23"

Lösung bitte mit f-strings, es hilft dann die Format-Info :02, siehe z.B. https://fstring.help/cheat/.

# Kontext
d = {"jahr": 1912, "monat": 6, "tag": 23}
d_string = ...

# hier schlau programmieren
... # 

# Testausgabe Ihrer Lösung (ggf. auch `print()` ausprobieren)
# print(ergebnis)
d_string
Ellipsis
assert d_string == '1912-06-23'
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[4], line 1
----> 1 assert d_string == '1912-06-23'

AssertionError: 

Aufgabe: Datum analysieren#

Ein einzelner Datensatz#

gegeben:

  • ein Geburtsdatum im Format jjjj-mm-tt

    • z.B. g = "1910-06-22" (ein Computer-Pionier: Wer wars?)

gesucht:

  • die entsprechenden Werte dieses Geburtsdatum in den Variablen jahr, monat, tag

  • auch als Dict d: {"jahr": 1910, "monat": 6, "tag": 22}

Diese Aufgabe ist “zu Fuß” auch für Programmieranfänger lösbar, eine eher einfache Klausuraufgabe. Wer will, kann auch fancy Lösungen suchen. Ggf. die Beispiellösung anschauen und verstehen.

Hinweis: Wir üben hier an einem trivialen Beispiel grundlegende Operationen. “In echt” würde man natürlich eine Bibliothek wie z.B. https://docs.python.org/3/library/datetime.html verwenden.

# Kontext
g = "1910-06-22" 

(jahr, monat, tag) = ..., ..., ... ; d = ...

# zu Fuß, mit slicing
... # 
... # 
... # 

# Testausgabe
(jahr, monat, tag)
(Ellipsis, Ellipsis, Ellipsis)
# oder so:
... # 
# Testausgabe
(jahr, monat, tag)
(Ellipsis, Ellipsis, Ellipsis)
# das dict "zu Fuß"
... # 
# Testausgabe
(jahr, monat, tag, d)
(Ellipsis, Ellipsis, Ellipsis, Ellipsis)
# oder das dict ganz fancy mit zip()
... # 
... # 

# Testausgabe
(jahr, monat, tag, d)
(Ellipsis, Ellipsis, Ellipsis, Ellipsis)
# Diese Tests sollen jedenfalls am Ende erfüllt sein
assert jahr == 1910
assert monat == 6
assert tag == 22
assert d == {"jahr": 1910, "monat": 6, "tag": 22}
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[9], line 2
      1 # Diese Tests sollen jedenfalls am Ende erfüllt sein
----> 2 assert jahr == 1910
      3 assert monat == 6
      4 assert tag == 22

AssertionError: 

Verallgemeinerung: Mehrere Datensätze#

gegeben:

  • Ein Dict von Datumsangaben

gesucht:

  • obige Lösung für das komplette Dict

Vorgehen, Empfehlung:

  • für die Analyse eines einzelnen Records eine Funktion definieren

  • und diese dann auf den gesamten Datensatz anwenden

# gd ... Geburtstags-Dictionary
gd = { "Zuse": "1910-06-22", "Turing": "1912-06-23" }
ergebnis = ...

#hier Ihre Lösung
...

ergebnis
Ellipsis
assert ergebnis == { "Zuse": {"jahr": 1910, "monat": 6, "tag": 22}, "Turing": {"jahr": 1912, "monat": 6, "tag": 23} }
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[11], line 1
----> 1 assert ergebnis == { "Zuse": {"jahr": 1910, "monat": 6, "tag": 22}, "Turing": {"jahr": 1912, "monat": 6, "tag": 23} }

AssertionError: 

Aufgabe: Aufgabe 42#

gegeben:

gesucht:

# Kontext
ergebnis = ...

# hier schlau programmieren
... # 

# Testausgabe Ihrer Lösung (ggf. auch `print()` ausprobieren)
# print(ergebnis)
ergebnis
Ellipsis
# Diese Tests sollen erfüllt sein
ergebnis == 42
False