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()
oderprint()
)
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 Wert42
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