Testklausur python-101, Mo 2024-06-03#

WICHTIG: Dieses Jupyter Notebook ist in der Klausur python-101 lediglich ein erlaubtes Hilfsmittel unter vielen anderen Hilfsmitteln, ähnlich einem anonym benutzbaren Taschenrechner. Ihre Eingaben im Notebook können insbesondere vom Dozenten nicht eingesehen und auch nicht bewertet werden.

Also: Übertragen Sie alle Ergebnisse aus dem Notebook auf Papier. Es wird ausschließlich die Papier-Version der Klausur bewertet.

Dauer der Klausur:

  • 60 Minuten

  • plus 10 Minuten Karenzzeit zum Übertragen der Ergebnisse auf Papier.

Name, Vorname, MatNr etc.:

  • in der Papierklausur: Auf dem letzten Blatt “Persönliche Angaben” angeben, damit ich anonym korrigieren kann.

  • in der elektronischen Version NICHT angebeben, sondern anonym benutzen – ähnlich wie einen Taschenrechner.

HINWEIS: Diese Testklausur ermöglicht es den Studierenden insbesondere, die Technik des Exahm-Raums kennenzulernen. Inhaltlich erhebt die Testklausur nur bedingt den Anspruch, für Umfang und Schwierigkeit ein Beispiel zu geben.

Aufgabe#

Gegeben ist eine Liste von Zahlen:

z = [ 1, 2, 3, 5, 10 ]

Gesucht: Eine Liste z2 der Quadratzahlen dieser Zahlen, hier z.B. z2 == [1, 4, 9, 25, ... ]

z2 = ...
... # 



z2 == [1, 4, 9, 25, 100]
False

Aufgabe#

gegeben:

Kriege = """seit 2009: Krieg gegen die Taliban in Pakistan
2010–2011: Bürgerkrieg in der Elfenbeinküste
seit 2012: Konflikt in Mali
2013–2018: Bürgerkrieg im Südsudan
seit 2014: Krieg in der Ostukraine
seit 2023: Krieg in Israel und Gaza"""

Teilaufgabe#

gegeben:

  • obige “Liste” Kriege als String

gesucht:

  • dieser String als eine Liste von einzelnen Zeilen als Strings

K_liste = ...
... # 




K_kurz = [ 'seit 2009: Krieg gegen die Taliban in Pakistan',
'2010–2011: Bürgerkrieg in der Elfenbeinküste',
'seit 2012: Konflikt in Mali' ]
K_liste[0:3] == K_kurz
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[4], line 10
      2 # 
      7 K_kurz = [ 'seit 2009: Krieg gegen die Taliban in Pakistan',
      8 '2010–2011: Bürgerkrieg in der Elfenbeinküste',
      9 'seit 2012: Konflikt in Mali' ]
---> 10 K_liste[0:3] == K_kurz

TypeError: 'ellipsis' object is not subscriptable

Teilaufgabe#

gegeben:

  • die obige Liste K_kurz (die ersten 3 Elemente aus obiger Teilaufgabe)

gesucht:

  • eine Liste aller “Namen” von Kriegen aus K_kurz ohne Zeitangabe

K_namen = ... # Namen von Kriegen
... # 




K_namen == [' Krieg gegen die Taliban in Pakistan',
 ' Bürgerkrieg in der Elfenbeinküste',
 ' Konflikt in Mali']
True

Teilaufgabe#

gegeben:

  • obige Liste K_kurz

gesucht:

  • Eine Liste der Namen aller Kriege aus K_kurz, die noch andauern

K_kurz_andauernd = ...
... # 




K_kurz_andauernd == ['Krieg gegen die Taliban in Pakistan', 'Konflikt in Mali']
True

Aufgabe#

Gesucht:

  • eine Liste Monate als Strings: [ '01', '02', ..., '12' ].

Berechnen Sie mit einer List-Comprehension.

Monate = ...
... # 




Monate == ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
True

Hinweis: Eine Zahl wie z.B. 3 kann man mit folgenden f-string in einen String mit führenden Nullen verwandeln:

zahl = 3
zahlstring = f'{zahl:02}'
zahlstring
'03'

Aufgabe#

Gegeben: ein Dict Feiertage:

Feiertage = { 'Weihnachten': '24.12', 'Silvester': '31.12', 'Neujahr': '01.01', 
             'Erster Mai': '01.05', 'Tag der Deutschen Einheit': '03.10' } 

Teilaufgabe#

gesucht:

  • eine Menge Monate_mit_Feiertag: In welchen Monaten gibt es einen Feiertag?

M = ['01', '02', '03', '04', '05', '06', 
     '07', '08', '09', '10', '11', '12']

Monate_mit_Feiertag = ...
... # 




Monate_mit_Feiertag == {'01', '05', '10', '12'}
True

Teilaufgabe#

gesucht:

  • eine Menge Monate_OHNE_Feiertag: In welchen Monaten gibt es keinen Feiertag?

Hinweis: Sie dürfen bei Bedarf gerne die folgende Liste M benutzen.

Monate_OHNE_Feiertag = ...
... # 




Monate_OHNE_Feiertag == {'02', '03', '04', '06', '07', '08', '09', '11'}
True

Aufgabe#

Gegeben ist ein Dict von Dicts, das zu Familien die Familienmitglieder und ihre Rollen angibt:

Familien = { 'Maier' : { 'Martin': 'Vater', 'Monika': 'Mutter', 
                        'Maria': 'Tochter', 'Merle': 'Tochter' },
            'Schulz': { 'Sabine': 'Mutter', 'Sarah': 'Tochter', 'Sieglinde': 'Oma' }}

gesucht:

  • ein Dict Familie_Groesse : Wie viele Familienmitglieder hat jede Familie?

  • eine Menge Alle_Rollen: Welche Rollen gibt es in diesen Familien?

  • eine Liste Alle_Toechter: Wie heißen die Töchter?

Familie_Groesse = ...
... # 




Familie_Groesse == {'Maier': 4, 'Schulz': 3}
True
Alle_Rollen = ...
... # 




Alle_Rollen == {'Mutter', 'Oma', 'Tochter', 'Vater'}
True
Alle_Toechter = ...
... # 




Alle_Toechter == ['Maria', 'Merle', 'Sarah']
True

Aufgabe#

Kontext: Es wird n mal mit zwei Würfeln gewürfelt, die Augen der beiden Würfel werden addiert, Bsp.:

2+2=4, 4+3=7, 3+3=6, 2+6=8, 2+6=8,  5+2=7, 2+2=4, 3+3=6, 6+6=12, 2+6=8,  3+6=9, 5+3=8, 5+6=11, 4+2=6, 3+5=8,  4+4=8, 3+3=6, 4+2=6, 2+5=7, 2+4=6

Teilaufgabe#

Gesucht:

  • ein Dict wuerfe, das für jeden Wurf die absolute Häufigkeit angibt

Ergänzen Sie das folgende Progrämmchen!

import random as rd
rd.seed(42) # außerhalb der Klausur besser: `None` to use current system time
n = 20      # außerhalb der Klausur besser z.B. n = 1000

wuerfe = ...
... # 

for i in range(n):
    a = rd.randrange(2, 7)
    b = rd.randrange(2, 7)
    wurf = a + b
    # print(f"{a}+{b}={wurf}", end=', ')
    ... # 
    ... # 
    ... # 


wuerfe == {4: 2, 7: 3, 6: 6, 8: 6, 12: 1, 9: 1, 11: 1}
True

Teilaufgabe#

gegeben:

  • obiges Dict wuerfe

gesucht:

  • ein zweites Dict wuerfe_relativ, in dem für jeden Wurf die Wurf-Häufigkeit als relative Häufigkeit in Prozent angegeben ist.

(Das geht einfach: absolute Wurf-Häufigkeit durch n teilen, dann mit 100 mulitiplizieren).

wuerfe_rel = {}
... # 





wuerfe_rel == { 4: 10.0, 7: 15.0, 6: 30.0, 8: 30.0, 12: 5.0, 9: 5.0, 11: 5.0}
True

Aufgabe#

gegeben:

  • zwei gleich lange Listen Name und Alter

Name = [ "Anna", "Ben", "Charly" ]
Alter = [ 23, 22, 20 ]

gesucht:

  • ein Dict, das für jeden Namen das Alter angibt

Teilaufgabe#

Lösen Sie die Aufgabe mit zip()!

Name_Alter = {}
... # 




Name_Alter
{'Anna': 23, 'Ben': 22, 'Charly': 20}

Teilaufgabe#

Lösen Sie die Aufgabe ohne zip()!

... # 
{'Anna': 23, 'Ben': 22, 'Charly': 20}

Aufgabe#

gegeben sind folgende Variablen:

s = "abc"             # String
l = [ "1", "2", "3" ] # Liste

zwei = 2
neun = 9

d = { "pi" : 3.14, "e": 2.71, "g": 9.81 }

Gesucht ist jeweils mindestens eine Rechnung mit diesen Variablen, die das angegebene Ergebnis hat. Beispiel:

# gegeben
"abcabc" == ...

# mögliche Lösungen
"abcabc" == 2 * s
"abcabc" == s + s
True

Noch ein Beispiel:

# gegeben
[ 'a', 'b', 'c' ] == ...

# Lösung(en)
[ 'a', 'b', 'c' ] == list( s )
[ 'a', 'b', 'c' ] == [ x for x in s ]
True

Jetzt sind Sie an der Reihe!

[ "1", "2", "3", "abc" ]

... # 
True
[ 1, 2, 3 ]

... # 
True
{ 3.14, 2.71, 9.81 }

... # 
True

Persönliche Angaben#

Familienname:

Vorname:

Matrikelnummer:

Studiengang:

Drittversuch?