Python 101, Klausur 2026-01-10, 15:30 Uhr#

Prof. Dr. Johannes Busse

(Aufgabengruppe b)

ACHTUNG: Dieses Notebook ist ein erlaubtes Hilfsmittel. Es muss nicht benutzt werden, aber die Benutzung könnte helfen, die Papierklausur besser zu machen. Bewertungsrelevant ist ausschließlich die zugehörige Papierklausur.

Aufgabe 1: Benzinpreise (b)#

gegeben: Wir erheben Benzinpreise in verschiedenen Regionen.

# m ... Preis für 1l Benzin in Cent -- leider als String gegeben
m = [ '180', '183', '177', '164', '167', '167']

gesucht: durchschnittlicher Benzinpreis schnitt, billigster Preis billig, teuerster Preis teuer.

# Ergebnis-Variablen definieren
schnitt, billig, teuer = 0,0,0

# hier Ihre Programmierung
... # 
Ellipsis
# Ihr Ergebnis
ergebnis = f"{schnitt=}, {billig=}, {teuer=}"
ergebnis
'schnitt=0, billig=0, teuer=0'
# Test
ergebnis == 'schnitt=173.0, billig=164, teuer=183'
False

Aufgabe 2: Vokale im String (b)#

gegeben: Ein String s, Beispiel:

s = "Hallo Erika Musterfrau!"

gesucht: Wie viele Vokale (“aeiou”) enthält der String?

s2 = {}
vokale = "aeiou"

# Hier Ihre Lösung:
... # 
Ellipsis
# Ihr Ergebnis
s2
{}
# Test
s2 == 8
False

Aufgabe 3: Wechselsumme (b)#

gegeben: Eine Notebook-Zelle, die aus einer Integer-Zahl die Wechselsumme (alternierende Quersumme) berechnte:

zahl = 12345
wechselsumme = sum( int(ziffer) * (-1)**i for i, ziffer in enumerate(f"{zahl}" ))
wechselsumme
3

Teil 1 gesucht: Wir benötigen eine Funktion wechselsumme(x), die diese Berechnung anstellt.

# Ihre Programmierung
def wechselsumme(x):
    return sum( int(z) * (-1)**i for i, z in enumerate(f"{x}") )
# Ihr Ergebnis
wechselsumme(12345)
3
# Test
wechselsumme(12345) == 3
True

Teil2 gegeben: Eine Liste l von Zahlen:

l = [ 123, 2345, 34567 ]

Gesucht: eine Liste q, die die Wechelsumme jeder Zahl in l enthält.

# Variable anlegen
w = []

# Ihre Programmierung
... # 
Ellipsis
# Ihr Ergebnis
w
[]
# Test
w == [2, -2, 5]
False

Aufgabe 4: Familie 2 CSV (b)#

gegeben: Eine Tabelle von Kind, Vater, Mutter zeilenweiser Darstellung.

werte = [
    [ "Kind", "Vater", "Mutter" ],
    ['Kain', 'Adam', 'Eva'],
    ['Ismail', 'Ibrahim', 'Hadschar'],
    ['Isaak', 'Abraham', 'Sara'] ] 

gesucht: ein einziger String, der diese Tabelle in Form einer CSV-Datei repräsentiert.

# Variable definieren
csv = "" 

# Ihre Lösung
... # 
Ellipsis
# Ihr Ergebnis
print(csv)

# Test
csv == """Kind;Vater;Mutter
Kain;Adam;Eva
Ismail;Ibrahim;Hadschar
Isaak;Abraham;Sara"""
False

Aufgabe 5: CSV 2 Messwerte (b)#

gegeben: In einer CSV-Datei sind Messwerte gegeben (z.B. Geschlecht, Körpergröße, Alter). Wenn wir die Datei einlesen erhalten wir folgenden String data:

data = """m;180;21
m;183;27
m;177;23
f;164;19
f;167;25
f;167;24"""

Gesucht: Wir benötigen eine Tabelle in der Form einer Liste von Listen, zeilenweise.

# Variable definieren
table = []

# Ihre Programmierung
... # 
Ellipsis
# Ihr Ergebnise
table
[]
# Test
table == [['m', '180', '21'],
 ['m', '183', '27'],
 ['m', '177', '23'],
 ['f', '164', '19'],
 ['f', '167', '25'],
 ['f', '167', '24']]
False

Aufgabe 6: Synonyme segmentieren (b)#

gegeben ist eine Datei von Synonym-Gruppen:

syngroups = """Geld Mäuse Zaster Schotter Kohle
Stuhl Hocker Schemel
Hallo Privjet
Bye Ade"""

gesucht: Zähle Anzahl der Synonymgruppen (Zeilen) und Wörter insgesamt.

# Variablen definieren
num_zeilen, num_woerter = 0, 0

# hier Ihre Programmierung
... # 
Ellipsis
# Ihr Ergebnis
f"{num_zeilen=}, {num_woerter=}"
'num_zeilen=0, num_woerter=0'
# Test
num_zeilen ==4,  num_woerter == 12
(False, False)

Aufgabe 7: String to Number (b)#

gegeben: Ein Dict von Name und Geburtsjahr

# g ... Geburtstage
g = { "Anna": "2005", "Ben": "2004", "Charly": "2005" }

gesucht: Eine etwas höherwertige Repräsention der Geburtstage als ein Dictionary von Zahlenwerten

# Ergebnis-Variable definieren
g1 = {}

# Hier die Lösung programmieren
... # 
Ellipsis
# Ihre Lösung
print(g1)
{}
# Test
g1 =={'Anna': 2005, 'Ben': 2004, 'Charly': 2005}
False

Aufgabe 8: Geburtstagsdict (a, b)#

gegeben: Ein Dict von Name und Geburtsdatum. Das Geburtsdatum ist als Liste von Strings in der Form [ jjjj, mm, tt ] gegeben.

# g2 ... Geburtstage
g2 = {'Anna': ['2005', '02', '10'], 'Ben': ['2004', '02', '23'], 'Charly': ['2005', '02', '10']}

gesucht: Eine noch höherwertige Repräsention der Geburtstage als ein Dictionary von Dictionaries.

# Ergebnis-Variable definieren
g3 = {}

# Hier die Lösung programmieren
... # 
Ellipsis
# Ihre Lösung
g3
{}
# Test 
g3 == {'Anna': {'jahr': '2005', 'monat': '02', 'tag': '10'},
 'Ben': {'jahr': '2004', 'monat': '02', 'tag': '23'},
 'Charly': {'jahr': '2005', 'monat': '02', 'tag': '10'}}
False

Aufgabe 9: Geburtstage im gleichen Jahr (a, b)#

gegeben: Eine (z.B. Excel- oder CSV-)Tabelle, die (z.B. mit Pandas) bereits eingelesen und in ein Dict aus Dicts überführt wurde:

# g3 ... Geburtstage als Dict von Dicts
g3 = {'Anna': {'jahr': '2005', 'monat': '02', 'tag': '10'},
 'Ben': {'jahr': '2004', 'monat': '02', 'tag': '23'},
 'Charly': {'jahr': '2005', 'monat': '02', 'tag': '10'}}

Wir haben hier ja eine Abbildung von Person nach Geburtstag.

gesucht:

  • Wir wollen zu jedem Jahr wissen, welche Personen in diesem Jahr Geburtstag haben. (Das ist eine Art Umkehr-Abbildung von g3).

Die Datenstruktur des Ergebnisses soll das Dict g3_invers sein, das zu jedem Jahr eine Menge von Personen enthält, siehe unten “Test”.

# Ergebnis-Variable definieren
g3_invers = {}

# hier Ihre Lösung
... # 
Ellipsis
# Ihre Lösung
g3_invers
{}
# Test
g3_invers == {'2005': {'Anna', 'Charly'}, '2004': {'Ben'}}
False