Python 101 LN 3#

Übungsblatt 3

Name, Vorname:

MatNr:

email:

Aufgabe 1#

gegeben: eine verschachtelte Datenstruktur, z.B.

[ 1, [ 21, 22, 23 ], 3 ]
[1, [21, 22, 23], 3]

gesucht: Eine Zuweisung der einzelnen Teile dieser Liste von Listen an die drei Variablen eins, zwei, drei.

# Aufgabe: LN3.1
# Name: Musterfrau, Erika
# MatNr: 012 34 56

... # 
eins, zwei, drei
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[2], line 6
      1 # Aufgabe: LN3.1
      2 # Name: Musterfrau, Erika
      3 # MatNr: 012 34 56
      5 ... # 
----> 6 eins, zwei, drei

NameError: name 'eins' is not defined
assert eins == 1
assert zwei == [ 21, 22, 23 ]
assert drei == 3
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[3], line 1
----> 1 assert eins == 1
      2 assert zwei == [ 21, 22, 23 ]
      3 assert drei == 3

NameError: name 'eins' is not defined

Aufgabe 2#

gegeben:

  • Ein Dict g von Geburtstagen, z.B.

g = { "Anna": "2004-05-06", "Ben": "2005-05-26", "Charlie": "2002-02-26" }
g
{'Anna': '2004-05-06', 'Ben': '2005-05-26', 'Charlie': '2002-02-26'}

gesucht:

  • die Menge g_monate aller Monate, an denen jemand Geburtstag hat

Hinweis: Um aus einem Datums-String wie z.B. "2004-05-06" den Monat herausholen eignet sich natürlich slicing ganz gut ;-)

# Aufgabe: LN3.2
# Name: Musterfrau, Erika
# MatNr: 012 34 56

# g_monate = set()
... # 

# oder so:
... # 
Ellipsis
assert g_monate == {'02', '05'}
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[6], line 1
----> 1 assert g_monate == {'02', '05'}

NameError: name 'g_monate' is not defined

Aufgabe 3#

gegeben:

  • Ein Dict g von Geburtstagen ähnlich wie in Aufgabe 2, jedoch in einer leicht anderen Datenstruktur, nämlich ein Dict von Listen:

g = { "Anna": [ 2004, 5 , 6], "Ben": [ 2005, 5, 6], "Charlie": [2002, 2, 26] }
g
{'Anna': [2004, 5, 6], 'Ben': [2005, 5, 6], 'Charlie': [2002, 2, 26]}

gesucht:

  • Eine Liste g_mai aller Personen, die im Mai Geburtstag haben.

# Aufgabe: LN3.3
# Name: Musterfrau, Erika
# MatNr: 012 34 56

g_mai = []
... # 
g_mai
[]
assert g_mai == [ 'Anna', 'Ben' ]
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[9], line 1
----> 1 assert g_mai == [ 'Anna', 'Ben' ]

AssertionError: 

Aufgabe 4#

Gegeben:

Gesucht:

  • Gesamt-Umsatz pro Person – unabhängig von der Region

Vorgehen:

  • einlesen mit umsatz_df = pd.read_csv("umsatz.csv")

  • umwandeln in eine native Python Datenstruktur mit umsatz_d = umsatz_df.to_dict(orient="list")

import pandas as pd
umsatz_df = pd.read_csv("umsatz.csv")
umsatz_df
Region Name Umsatz
0 Nord Anna 100
1 Nord Ben 150
2 Süd Anna 120
3 Süd Anna 110
umsatz_spaltenweise = umsatz_df.to_dict(orient="list")
umsatz_spaltenweise
{'Region': ['Nord', 'Nord', 'Süd', 'Süd'],
 'Name': ['Anna', 'Ben', 'Anna', 'Anna'],
 'Umsatz': [100, 150, 120, 110]}

Welche Namen haben wir?

alle_namen = set(  umsatz_spaltenweise["Name"]  )
alle_namen
{'Anna', 'Ben'}

Wie viele Zeilen haben wir?

anzahl_zeilen = len( umsatz_spaltenweise["Name"] )

Grundstruktur Listenbearbeitung

summierte_umsaetze = { name: 0  for name in alle_namen  }
summierte_umsaetze
{'Anna': 0, 'Ben': 0}
# wir gehen zeilenweise (!) durch eine Tabelle durch, die spaltenweise angegeben ist ;-)

for i in range(anzahl_zeilen):
    
    ... # 
    ... # 
    
    print(mein_Name, mein_Umsatz )    
    summierte_umsaetze[mein_Name] += mein_Umsatz

summierte_umsaetze
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[16], line 8
      5     ... # 
      6     ... # 
----> 8     print(mein_Name, mein_Umsatz )    
      9     summierte_umsaetze[mein_Name] += mein_Umsatz
     11 summierte_umsaetze

NameError: name 'mein_Name' is not defined

Aufgabe 5 (Scherzaufgabe)#

optional, zum Knobeln

gegeben ein x:

x = [ 0, [1, 2], 3]

Im folgenden ist ein etwas unverständlicher Slicing-Ausdruck. Wie man leicht ausprobieren kann, evaluiert dieser Ausdruck zu [1, 2]:

x[x[1][0]:x[1][1]][x[0]]
[1, 2]

Aufgabe: Erstellen Sie bei gleichem x kreativ einen anderen, idealerweise noch völlig unverständlicheren Ausdruck, der das Ergebnis {1, 3} produziert!

... # 
Ellipsis

Hintergrund: https://pyobfusc.com/, die Python-Version von https://www.ioccc.org/index.html.