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

Prof. Dr. Johannes Busse

(Aufgabengruppe a)

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: Körpergrößen (a)#

gegeben: Wir messen die Körpergrößen von Menschen in einem Hörsaal.

# m ... Messwerte Körpergröße in cm -- leider als String gegeben
m = [ '180', '183', '177', '164', '167', '167']

gesucht: durchschnittliche Körpergröße schnitt, kleinste Körpergröße klein, größte Körpergröße gross in der Gruppe.

# Ergebnis-Variablen definieren
schnitt, klein, gross = 0,0,0

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

Aufgabe 2: String Maskieren (a)#

gegeben: Ein String s, Beispiel:

s = "Hallo Erika Musterfrau!"

gesucht: Eine “Maskierung” des Strings, die dadurch entsteht, dass man alle Vokale (“aeiou”) entfernt.

s2 = {}
vokale = "aeiou"

# Hier Ihre Lösung:
... # 
Ellipsis
# Ihr Ergebnis
s2
{}
# Test
s2 == 'Hll Erk Mstrfr!'
False

Aufgabe 3: Quersumme (a)#

Teil 1

gegeben: Eine Notebook-Zelle, die aus einer Integer-Zahl die (einfache) Quersumme berechnet:

zahl = 12345
quersumme = sum( int(ziffer) for ziffer in f"{zahl}" )
quersumme
15

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

# Ihre Programmierung
... #
# Ihr Ergebnis
print( quersumme(12345) )
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[11], line 2
      1 # Ihr Ergebnis
----> 2 print( quersumme(12345) )

TypeError: 'int' object is not callable
# Test
quersumme(12345) == 15
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[12], line 2
      1 # Test
----> 2 quersumme(12345) == 15

TypeError: 'int' object is not callable

Teil2

gegeben: Eine Liste l von Zahlen:

l = [ 123, 2345, 34567 ]

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

# Variable anlegen
q = []

# Ihre Programmierung
... # 
Ellipsis
# Ihr Ergebnis
q
[]
# Test
q == [6, 14, 25]
False

Aufgabe 4: Messwerte 2 CSV (a)#

gegeben: Eine Tabelle von Messwerten für Geschlecht, Körpergröße, Alter in zeilenweiser Darstellung.

werte = [
    [ "Geschlecht", "Körpergröße", "Alter" ],
    ['m', '180', '21'],
    ['m', '183', '27'],
    ['m', '177', '23'] ] 

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 == """Geschlecht;Körpergröße;Alter
m;180;21
m;183;27
m;177;23"""
False

Aufgabe 5: CSV 2 Familie (a)#

gegeben: In einer CSV-Datei sind Namen von Kinden und ihren Eltern gegeben. Wenn wir die Datei einlesen erhalten wir folgenden String data:

data = """Kind;Vater;Mutter
Kain;Adam;Eva
Ismail;Ibrahim;Hadschar
Isaak;Abraham;Sara"""

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

# Variable definieren
table = []

# Ihre Programmierung
... # 
Ellipsis
# Ihr Ergebnise
table
[]
# Test
table == [['Kind', 'Vater', 'Mutter'],
 ['Kain', 'Adam', 'Eva'],
 ['Ismail', 'Ibrahim', 'Hadschar'],
 ['Isaak', 'Abraham', 'Sara']]
False

Aufgabe 6: Textdatei Gedicht segmentieren (a)#

gegeben ist ein schönes Gedicht als String.

gedicht = """Klarer Code fließt sanft,
Python wird zu Poesie.
Einfach, schön."""

gesucht: Zähle Zeilen und Wörter.

# 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 ==3,  num_woerter == 10
(False, False)

Aufgabe 7: String to List (a)#

gegeben: Ein Dict von Name und Geburtsdatum

# g ... Geburtstage
g = { "Anna": "2005-02-10", "Ben": "2004-02-23", "Charly": "2005-02-10" }

gesucht: Eine etwas höherwertige Repräsentation der Geburtstage als ein Dictionary von Listen.

# Ergebnis-Variable definieren
g1 = {}

# Hier die Lösung programmieren
... # 
Ellipsis
# Ihre Lösung
print(g1)
{}
# Test
g1 == {'Anna': ['2005', '02', '10'], 'Ben': ['2004', '02', '23'], 'Charly': ['2005', '02', '10']} 
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