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
gvon 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_monatealler 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
gvon 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_maialler 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:
die CSV-Datei
umsatz.csv.
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.