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 ausin_bsp
, die Vielfache von3
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
bisn
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 Schrittweitestep
und ein Endwertx2
x1
,step
undx2
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 manf(x)
empirisch mitx
im Intervallx1
bisx2
mit Schrittweitestep
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?