Exahm Testklausur 2024-01-25#
Diese Datei:
Ein Fragezeichen, wie schwierig und zeitaufwändig einzelne Aufgaben bei einer Rechner-Klausur sind.
Gleichzeitig ein Test, wie sich an einem fremden Rechner in einer fremden Umgebung arbeiten lässt.
auf einen Nenner bringen#
gegeben: eine Liste von Bruchzahlen, angegeben als Tupel: 1/8 wäre dann (1,8)
z.B.
[ (1,8), (-1,4), (2,4) ]
Gesucht: diese Bruchzahlen rein numerisch aufaddiert (das ist hässlich, aber nicht schwer).
Lösen Sie mit Hilfe einer Dict-Comprehension!
# b ... Brüche
b = [ (1,8), (-1,4), (2,4) ]
... #
bsumme
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[2], line 2
1 ... #
----> 2 bsumme
NameError: name 'bsumme' is not defined
Liste von Dicts durchsuchen#
gegeben: eine Liste von Dicts, Beispiel:
hobbies = [
{'Alice': ['Lesen', 'Reisen'], 'Bob': ['Schwimmen', 'Fotografie']},
{'Alice': ['Kochen'], 'Charlie': ['Lesen', 'Tanzen']},
{'Bob': ['Skifahren'], 'David': ['Gitarre']}
]
gesucht:
Wer hat ein bestimmtes Hobby, z.b. Lesen?
Aufgabe: Schreiben Sie eine Funktion hobby_person(), die zu einem gegebenen Hobby alle zugehörigen Personen aus hobbies zurückgibt.
def hobby_person(gesucht, dictliste):
to_return = set()
for d in dictliste:
... #
... #
... #
return to_return
# hobby_person("Lesen", hobbies) == {'Alice', 'Charlie'}
Cell In[4], line 5
... #
^
IndentationError: unexpected indent
Vereinigungsmenge von Dicts#
gegeben: eine Liste von Dicts, Beispiel:
z.B.
dlist = [ {'a': 1, 'b': 2, 'c': 3}; d2 = {'b': 2, 'c': 99}]
d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'b': 2, 'c': 99}
dlist = [d1, d2 ]
print(f"{dlist=}")
dlist=[{'a': 1, 'b': 2, 'c': 3}, {'b': 2, 'c': 99}]
gesucht: ein Dict dlist_union, das für jeden Key alle Values enthält, die es in den dicts dazu gibt!
z.B.
dlist_union = {'c': {3, 99}, 'a': {1}, 'b': {2}}
Vorgehen:
(a) erzeugen Sie ein Set, das alle keys enthält
(b) initialisieren Sie
dlist_union, dass es etwa so aussieht:{ 'a': set(), 'b': set(), ...: ...}(c) füllen Sie dann
dlist_uniongeeignet auf
# a)
allkeys = set()
... #
# allkeys == {'a', 'b', 'c'}
Ellipsis
# b)
dlist_union = {}
... #
# dlist_union == {'c': set(), 'a': set(), 'b': set()}
Ellipsis
# c)
for d in dlist:
... #
... #
# dlist_union == {'c': {3, 99}, 'a': {1}, 'b': {2}}
Cell In[8], line 4
... #
^
IndentationError: unexpected indent
Code Korrigieren#
Die folgende Funktion soll die Fakultät fak(x) = n! einer Natülichen Zahl >= 0 berechnen:
n! = n * (n-1) * (n-2) * ... 2 * 1, falls n >= 1n! = 1, falls n == 0
Leider ist unsere Lösung noch nicht ganz vollständig implementiert, und enthält auch einen Fehler.
Aufgabe: Korrigieren und vervollständigen Sie die Lösung!
def fak(x):
if x == 1:
return 1
else:
return ...