Woche 21

Woche 21#

SS 2026, Klausurvorbereitung Nachschreibeklausur

Ansatz: Wir erstellen eine Aufgabenstellungen, die eine Vielzahl von einzelnen kleinen Aufgaben und -Lösungen erlaubt. Wer die kann, wird der Klausur mit großer Freude entgegenblicken!

Vorgehen, wenn Sie nicht weiterkommen: Fragen Sie auch eine KI, Sie werden ein Programm bekommen. Verstehen sie das Programm. Fragen Sie öfters, ggf. auch explizit nach unterschiedlichen Lösungen, vergleichen Sie die verschiedenen Lösungen. Schließen Sie die KI, schlafen Sie eine Nacht darüber. Versuchen Sie am nächsten Morgen, die Lösung ohne KI selbst hinzubekommen.

gegeben:

  • Funktion n:1, z.B. Modulnummer - Prüfung.

gesucht:

  • inverse Abbildung 1:n, Prüfung - Menge von Modulnummern

klausur = { "wif110": "Programmieren 1",   "aif120": "Programmieren 1", "wif640": "Seminar"}
kinvers = { "Programmieren 1": [ "wif110", "aif120" ],  "Seminar": [ "wif640" ] }

Lösung 1:

ergebnis = {}

for k, v  in klausur.items():
    # print( f"{k=}, {v=}")

    if v not in ergebnis.keys():
        ergebnis[v] = []

    ergebnis[v].append( k )
    
    
print( f"{ergebnis=}" )
ergebnis={'Programmieren 1': ['wif110', 'aif120'], 'Seminar': ['wif640']}

Lösung 2: Dicht ergebnis vorher schon initialisieren

set(klausur.values())
{'Programmieren 1', 'Seminar'}
ergebnis = {  v: []   for v in set(klausur.values())   }
ergebnis
{'Programmieren 1': [], 'Seminar': []}
for k, v  in klausur.items():
    ergebnis[v].append( k )
ergebnis
{'Programmieren 1': ['wif110', 'aif120'], 'Seminar': ['wif640']}

gegeben:

  • 2 Spalten einer Tabelle

stadt = [ "Landshut", "Ulm","Nürnberg" ]
einwohner_in_1000 = [ 70, 120, 500 ]

gesucht:

  • die Tabelle zeilenweise als eine Liste von Tupeln

mit zip():

...
Ellipsis

Ohne zip, Tipp: zwei Möglichkeiten, durch eine Liste durchzulaufen:

for x in stadt:
    print(x)
Landshut
Ulm
Nürnberg
for i in range( len( stadt ) ):
    print( stadt[i] )
Landshut
Ulm
Nürnberg
for i in range( len( stadt ) ):
    print( stadt[i] , einwohner_in_1000[i])
Landshut 70
Ulm 120
Nürnberg 500

Und jetzt die Lösung selber machen:

stadt_einwohner = []

...
Ellipsis

Ohne zip mit Comprehension:

stadt_einwohner = [ ... ]

Test:

stadt_einwohner == [ ("Landshut", 70), ("Ulm", 120), ("Nürnberg", 500) ]
False

gegeben: ein Dict mit Geburtsdatum

# gb ... geburtsdaten
gb = {
    "Lovelace, Ada": "1815-12-10",
    "Turing, Alan": "1912-06-23",
    "Hopper, Grace": "1906-12-09",
    "Zuse, Konrad": "1910-06-22",
    "van Rossum, Guido": "1956-01-31"
}

Füge die folgenden Menschen dem Dict hinzu:

menschen_1956 = [
    ("Steinmeier, Frank-Walter", "1956-01-05"),
    ("Grönemeyer, Herbert", "1956-04-12"),
    ("Hanks, Tom", "1956-07-09")
]

Eine Liste aller in gb enthaltenen Namen:

...
Ellipsis

Eine Liste aller in gb enthaltenen Datums-Strings:

...
Ellipsis

Eine Liste aller in gb enthaltenen Jahre (ohne Duplikate):

...
Ellipsis

Überführe das Geburtsdatum in eine besser verarbeitbare Struktur, Beispiel:

```{code-cell} ipython3
gb_key_liste = 
{ "Lovelace, Ada": [ "1815", "12", "10"],
  "Turing, Alan": [ "1912", "06", "23" ] ,
  ... }

und auch so:

gb_key_dict = { "Lovelace, Ada": { "jjjj": "1815", "mm": "12", "tt": "10" },
  "Turing, Alan":  { "jjjj": "1912", "mm": "06", "tt": "23" } ,
  ...: ... }

Auch die Namen wollen wir in Vorname und Familienname aufteilen, z.B. so:

gb_key_liste =  { ("Lovelace", "Ada"): [ "1815", "12", "10"],
  ("Turing", "Alan"):  [ "1912", "06", "23" ] ,
  ...: ... }

gesucht: ein dict, das zu jedem Jahr die zugehörigen Menschen angibt, z.B.

jahr_personen =  {
    '1815': { ('Lovelace, Ada', '1815-12-10') },
    '1956': {
        ('van Rossum, Guido', '1956-01-31'),
        ('Steinmeier, Frank-Walter', '1956-01-05'),
        ('Grönemeyer, Herbert', '1956-04-12'),
        ('Hanks, Tom', '1956-07-09') },
    ...: ..., }