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_union geeignet 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 >= 1

  • n! = 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 ...