Python 101, Probeklausur 2025-12-09#

Besprechung siehe Python 101, Probeklausur 2025-12-09, BESPRECHUNG

Prof. Dr. Johannes Busse, HAW LA, busse@haw-landshut.de

Familienname:

Vorname:

MatNr:

Papierklausur:

  • Anfangsbuchstaben vom Familiennamen am rechten Rand einkreisen

  • am linken Rand einkreisen: Studiengang, Studienbeginn

  • Falls Sie mehr Schreibraum benötigen: Nutzen Sie nicht die Rückseite, sondern die jeweils gegenüberliegende Seite einer Aufgabe.

  • Bitte lassen Sie den Korrektur-Rand rechts frei.

  • Es wird ausschließlich die Papier-Version der Klausur bewertet!

Das Jupyter Notebook ist lediglich ein erlaubtes Hilfsmittel unter vielen anderen Hilfsmitteln, ähnlich einem Taschenrechner. Zwar wird der Dozent bei der Korrektur nach Möglichkeit auch das elektronische Notebook anschauen. ber bewertet wird nur die Papierklausur. Übertragen Sie also alle Ergebnisse aus dem Notebook auf Papier.

Diese Klausur hat 40 Pkte (=100%), plus ein paar wenige Sonderpunkte. Unverbindlicher Notenspiegel: ab 18 Punkte = Note 4.0, 20=3.7, 22=3.3, …, 28=2.3, 34=1.3, 36=1.0

Punkte und Note Erstkorrektur:

ggf. Note Zweitkorrektur:

import datetime, os
print(f"{datetime.datetime.now()}, {os.getcwd()}")
2025-12-11 16:12:20.829427, /media/sf_abc123/l/LA_2025_ws/python-101/md

Aufgabe Operatoren (4 Pkte)#

(2025-12-09: gestrichen)

Aufgabe: String säubern (Gruppe A) (4 Pkte)#

gegeben:

  • zwei Strings s und verboten

gesucht:

  • ein String ok, aus dem alle Zeichen aus verboten entfernt sind

# Kontext
s = "Hallo, Welt! wie gehts?"
verboten = ".,;?!"
ok = ""

# Ihre Lösung
... # 


# Ihr Ergebnis
ok
''
# Test
ok == 'Hallo Welt wie gehts'
False

Aufgabe: Pasch gewürfelt? (Gruppe A) (4 Pkte)#

Würfeln Sie mit mit n Würfeln. (n kann auch deutlich größer sein als 2.) Es entsteht eine Liste von Werten, ggf. mit Wiederholungen.

gesucht:

  • Stellen Sie fest, ob Sie einen Pasch gewürfelt haben, d.h. ob alle Würfel den gleichen Wert zeigen.

  • Lösen Sie, indem Sie eine entsprechende Funktion definieren.

Lösungshinweis: Die einfachste Lösung erzeugt aus der Liste ein Set. Aber es gibt auch andere Lösungen.

# Kontext
wuerfe_1 = [ 1, 1, 1 ]     # ein Pasch
wuerfe_2 = [ 2, 3, 2, 2 ]  # kein Pasch

# Ihre Lösung

def pasch(wl):
    ... # 

# Ihr Ergebnis
pasch(wuerfe_1), not pasch(wuerfe_2)
(None, True)
# Test
pasch(wuerfe_1) == True, pasch(wuerfe_2) == False
(False, False)

Aufgabe: Wie viele “große” Würfe? (Gruppe A) (4 Pkte)#

Gegeben:

  • Eine Liste von einigen Würfen mit 2 Würfeln.

Gesucht:

  • Wie viele “große” Würfe wurden gewürfelt?

Ein “großer” Wurf liegt vor, wenn 2 Würfel zusammen mindestens 10 Punkte ergeben.

Hinweis: Da hier nur 2 Würfel im Spiel sind, kann diese Aufgabe auch ohne Bezug auf die vorhergehende Aufgabe gelöst werden.

# Kontext
wuerfe = [ [5,6], [3,6], [2,5], [6,6] ]
   
# Ihre Lösung
anzahl_gross = 0 
... # 


# Ihr Ergebnis
anzahl_gross
0
# Test
anzahl_gross == 2
False

Aufgabe: Konfigurationsdatei (4 Pkte)#

gegeben:

  • eine bereits eingelesene Konfigurationsdatei mit key-value-Paaren als String

gesucht:

  • der Inhalt dieser Datei als Dict

Vereinfachende Annahmen: Kein key kommt doppelt vor. In den Values kommt kein Doppelpunkt vor.

Eine Lösung mit Comprehension gibt mehr Punkte.

# Kontext
kernelspec = """display_name: Python 3 (ipykernel)
language: python
name: python3"""

ksd = {}  # kernelspec dict

# Ihre Lösung
... # 


# Ihr Ergebnis
ksd
{}
# Test
ksd == {'display_name': 'Python 3 (ipykernel)',
 'language': 'python',
 'name': 'python3'}
False

Aufgabe: Dict als String repräsentieren (4 Pkte)#

gegeben:

  • ein einfaches, flaches Dict, z.B. Volumen einer Verpackung.

gesucht:

  • dieses Dict als String Volumen_string, den man auch in eine Datei ‘rausschreiben könnte: Jede Zeile ein durch Doppelpunkt getrenntes Paar von Key und Value (siehe Test).

Eine Lösung mit f-String und Comprehension passt in eine Zeile ;-)

# Kontext
Volumen = {'Salz': 394, 'Maccaroni': 2101, 'Milch': 1010}

# Ihre Lösung
Volumen_string = ""
... #  

# Ihr Ergebnis
Volumen_string
''
# Test
Volumen_string == 'Salz: 394\nMaccaroni: 2101\nMilch: 1010'
False

Aufgabe: Ortschaften zuordnen (Gruppe A) (4 Pkte)#

gegeben:

  • eine Liste von PLZ und Ortschaften – leider als String angegeben.

gesucht:

  • ein Dict plz_ort, das zu jeder PLZ eine Menge der zugehörigen Ortschaften angibt

# Kontext
Orte = [ "84030 LA", "84032 LA", "84034 LA", "8430 Ergolding", "84032 Altdorf", "84032 Eugenbach"]
plz_ort = {}

# Ihre Lösung
... # 
    
# Ihr Ergebnis
plz_ort
{}
# Test
plz_ort == {'84030': {'LA'},
 '84032': {'Altdorf', 'Eugenbach', 'LA'},
 '84034': {'LA'},
 '8430': {'Ergolding'}}
False

Aufgabe: zusammen kochen (4 Pkte)#

gegeben:

  • ein Dict DasMagIch, das für jede Person die Gerichte angibt, die sie gerne isst

gesucht:

  • eine Funktion gemeinsam(), die für zwei Personen eine Liste der Gerichte zurückgibt, die beide mögen

Falls eine Person nicht im Dict enthalten ist, soll die Funktion None ergeben. Die Reihenfolge der Gerichte im Ergebnis ist unerheblich.

# Kontext
DasMagIch = {
     "Emma" : ["Fisch", "Nudeln", "Pizza", "Schnitzel" ],
     "Peter": [         "Nudeln",          "Schnitzel"],
     "Simon": ["Fisch", "Nudeln", "Pizza",              "Salat"],
     "Leonie" : [       "Nudeln", "Pizza",              "Salat"]}

# Ihre Lösung
def gemeinsam(P1, P2):
   """Gibt die gemeinsamen Lieblingsessen von 2 Personen aus dem Dict `DasMagIch` zurück."""
   ... # 
    

# Ihr Ergebnis
gemeinsam("Emma", "Leonie")
# Test
gemeinsam("Emma", "Leonie") == {'Nudeln', 'Pizza'}
False

Aufgabe: Volumen (Gruppe A) (8 Pkte)#

Gegeben

  • ein Dict Abmessungen, das zu jeder Verpackung ihre Verpackungsmaße angibt

Die Verpackungsmaße sind in cm gegeben, L(änge) mal B(reite) mal H(öhe) – aber leider nicht einheitlich: eigentlich sollte es eine Liste sein, manchmal ist es aber lediglich ein String, durch Strichpunkt ; getrennt (Leerzeichen sind in solchen Strings gottseidank nicht enthalten).

gesucht:

  • eine Funktion vol(), die das Volumen in vollen Kubikzentimetern (Datentyp int) berechnet

  • ein Dict Volumen, das zu jeder Verpackung ihr jeweiliges Volumen angibt

# Kontext
Abmessungen = { 
    "Salz":      [ 4.7, 6, 14 ],
    "Maccaroni": [ 5, 19.1, 22 ] ,
    "Milch":     "7.2;7.2;19.5"   }
Volumen = {k: None for k in Abmessungen }

# Ihre Lösung
def vol(Maße):
    ... #



# Ihr Ergebnis
Volumen
{'Salz': None, 'Maccaroni': None, 'Milch': None}
# Test
Volumen == {'Salz': 394, 'Maccaroni': 2101, 'Milch': 1010}
False