Diese Datei:

  • COMPILIERT mit notebook7 in der dsci-exahm virtuellen Maschine

  • primär ein Test, ob unsere Testklausur technisch auch in der Exahm-Umgebung läuft;

  • wenn wir schon mal dabei sind, könnten das auch einige echte Klausuraufgaben in der Exahm-Umgebung sein (die aber nicht das gesamte Spektrum der möglichen Klausuraufgaben abdecken).

Versionen:

  • v1: 2023-12-12

  • v1.1: 2024-01-17

Python 101, WS 2023, Testklausur 2023-12-12#

Persönliche Daten (Name, MatNr, Studiengang) bitte nicht hier, sondern auf der letzten Seite eintragen, damit ich anonym korrigieren kann.

Quadratzahlen#

Gegeben:

  • Eine Liste in_bsp von Zahlen.

Gesucht:

  • Eine Funktion dq(liste), die für alle Zahlen aus in_bsp, die Vielfache von 3 sind, das Quadrat zurückliefert.

Bitte lösen Sie mit List Comprehension.

# Beispiel
in_bsp = [0, 1, 2, 3, 4]
out_bsp = [ 0, 9 ]
# dq ... dreier quadrate
def dq(liste):
    ... # 
# assert dq(in_bsp) == out_bsp

Zweitupel#

Gegeben:

  • eine Zahl n

Gesucht:

  • eine Funktion, die eine Liste aller 2-Tupel der natürlichen Zahlen von 1 bis n zurückgibt.

Bitte lösen Sie mit List Comprehension.

# Beispiel
n = 3
out_bsp = [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
def zweitupel(n):
    ... # 
# assert zweitupel(3) == out_bsp

Deltas#

Gegben:

  • eine Liste von Zahlen

Gesucht:

  • eine Funktion, die die größte Differenz zwischen zwei aufeinanderfolgenden Zahlen in dieser Liste zurückgibt.

in_bsp = [ 4, 3, 1, -2, 5]
out_bsp = 7
def deltas(l):
    ... # 
# assert deltas(in_bsp) == out_bsp

Spannweite einer Funktion#

Gegeben:

  • eine Funktion f(x)

  • ein Startwert x1, eine Schrittweite step und ein Endwert x2

  • x1, step und x2 sind Integer-Zahlen (also keine Floats)

Gesucht:

  • Die “Spannweite” einer Funktion, d.h. die Differenz vom kleinsten zum größten Wert, den f(x) zurückgibt, wenn man f(x) empirisch mit x im Intervall x1 bis x2 mit Schrittweite step testet.

Hinweis: Sie müssen keine Funktion definieren, es genügt eine Jupyter Notebook Zelle.

# eine Beispiel-Funktion, die auch ganz anders sein kann
def f(x):
    return round(x ** .5, 2)

x1, x2, step = 0, 9, 3

werte_bsp = [0.0, 1.73, 2.45, 3.0]
spannweite_bsp = 3.0

spannweite = None
... # 
... # 
# assert spannweite == spannweite_bsp

Welche Ausgabe wird erzeugt?#

Aufgaben des Type “Welche Ausgabe wird erzeugt” sind eigentlich nur auf Papier sinnvoll. Wäre Prüfung elektronisch, würde man einfach den gegebenen Code ausführen. Dennoch der Vollständigkeit ein Beispiel für diesen Aufgabentyp ;-)

out = None
# out = { x%y for x in range(10) for y in range(1, x) }
... # 
Ellipsis

Code Korrigieren#

Gegeben:

  • ein Dict mit Einwohnern pro PLZ

  • ein Dict, das angibt, welche PLZ in welcher Region ist

Gesucht:

  • Einwohner der Region Oberbayern (München, Starnberg etc.)

einwohner = { 80313 : 1512491, 82319: 23741,  
      84028 : 75457, 84049: 12358, 84137: 12584 } 

regionen = {"oberbayern" : {80313, 82319}, # München, Starnberg etc.
            "niederbayern" : { 84032, 84028, 84049, 84137 } } # LA, Essenbach etc.

ob_summe = None # sollte die Summe der Einwohner von Regionen in Oberbayern sein. 

Ein Studienkollege probiert es mit folgendem Code, ist aber mit dem Ergebnis nicht zufrieden:

# ob_summe = sum( [ x for x in einwohner if x in niederbayern] ) 
# ob_summe

(a) Welche Fehler finden Sie? Beschreiben Sie in Stichworten!

(b) Korrigieren Sie den Code, indem Sie in der folgenden Zelle eine ähnliche, aber bessere Lösung finden.

... # 
# ob_summe
Ellipsis

Persönliche Daten#

Persönliche Daten (Name, MatNr, Studiengang) bitte nicht auf dem Deckblatt, sondern hier auf der letzten Seite eintragen, damit ich anonym korrigieren kann.

Familienname:

Vorname:

MatNr:

Studiengang:

freiwillige Angaben, nicht bewertungsrelevant:

Drittversuch?

Punkte auf Codewars?