Add uebungen for day 1
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
This commit is contained in:
parent
2fec50720d
commit
d59ec6069b
|
@ -0,0 +1,147 @@
|
||||||
|
# Übungen zu Dateine (Teil 1)
|
||||||
|
|
||||||
|
|
||||||
|
## Ausgangslage
|
||||||
|
|
||||||
|
Im Ordner `uebungen` sind folgende Textdateien mit Mitarbeiter- und
|
||||||
|
Planstellendaten vorhanden:
|
||||||
|
|
||||||
|
* `employee_skills.txt`
|
||||||
|
* `job_skills.txt`
|
||||||
|
* `salaries.txt`
|
||||||
|
* `salaries-errors.txt`
|
||||||
|
|
||||||
|
Jede dieser Dateien enthält einen Datensatz pro Zeile. Jede Zeile ist
|
||||||
|
nach folgendem Schema aufgebaut:
|
||||||
|
|
||||||
|
* Name
|
||||||
|
* Doppelpunkt
|
||||||
|
* Whitespace (ein oder mehrere Leerzeichen)
|
||||||
|
* Daten
|
||||||
|
|
||||||
|
Das Format des Datenfelds unterscheidet sich je nach Datei.
|
||||||
|
|
||||||
|
|
||||||
|
Aufgabe 1:
|
||||||
|
|
||||||
|
Öffnen Sie die Datei `employee_skills.txt` zum Lesen und lesen Sie die gesamte
|
||||||
|
Datei in einen String ein.
|
||||||
|
|
||||||
|
Wieviele Bytes ist der Dateihalt lang?
|
||||||
|
|
||||||
|
|
||||||
|
Aufgabe 3:
|
||||||
|
|
||||||
|
Öffnen Sie die Datei `employee_skills.txt` zum Lesen und lesen Sie die Datei
|
||||||
|
zeilenweise ein.
|
||||||
|
|
||||||
|
Wieviele Zeilen mit Daten enhält die Datei? Zeilen, die *nur* Whitespace
|
||||||
|
(Leerzeichen, CR, LF, Tabs, etc.) enthalten, werden nicht gezählt.
|
||||||
|
|
||||||
|
|
||||||
|
Aufgabe 3:
|
||||||
|
|
||||||
|
Öffnen Sie die Datei `employee_skills.txt` zum Lesen und lesen Sie die Datei
|
||||||
|
zeilenweise ein. Parsen Sie den Namen des Mitarbeiters aus jeder Datenzeile und
|
||||||
|
fügen Sie ihn zu einer Liste hinzu.
|
||||||
|
|
||||||
|
Geben Sie die Liste der Namen der Mitarbeiter alphabetisch sortiert, ein Name
|
||||||
|
pro Zeile, aus.
|
||||||
|
|
||||||
|
|
||||||
|
Tipp: verwenden Sie die String-Methode `split()` zum Parsen jeder Zeile.
|
||||||
|
|
||||||
|
|
||||||
|
Aufgabe 4:
|
||||||
|
|
||||||
|
Öffnen Sie die Datei `salaries.txt` zum Lesen und lesen Sie die Datei
|
||||||
|
zeilenweise ein. Parsen Sie den Namen des Mitarbeiters sowie das Gehalt aus
|
||||||
|
jeder Datenzeile und speichern die Daten in einem Dictionary mit dem Namen
|
||||||
|
des Mitarbeiters als Key und dem Gehalt als Wert. Der Gehaltswert sollte
|
||||||
|
jeweils in einen Integerwert umgewandelt werden.
|
||||||
|
|
||||||
|
Geben Sie das höchste, sowie das niedrigste Gehalt aus.
|
||||||
|
|
||||||
|
|
||||||
|
Tipp 1: verwenden Sie die String-Methode `split()` zum Parsen jeder Zeile und
|
||||||
|
die Funktion `int()` zum Umwandeln des Gehaltwerts.
|
||||||
|
|
||||||
|
Tipp 2: verwenden Sie die `min()` und `max()` Funktionen und wenden sie jeweils
|
||||||
|
auf alle Werte des Dictionaries auf einmal an.
|
||||||
|
|
||||||
|
|
||||||
|
Aufgabe 5:
|
||||||
|
|
||||||
|
Öffnen Sie die Datei `employee_skills.txt` zum Lesen und lesen Sie die Datei
|
||||||
|
zeilenweise ein. Parsen Sie den Namen des Mitarbeiters sowie die Liste der
|
||||||
|
Skills aus jeder Datenzeile und speichern die Daten in einem Dictionary mit dem
|
||||||
|
Namen des Mitarbeiters als Key und der Liste der Skills als Wert. Die Liste der
|
||||||
|
Skills für jeden Mitarbeiter sollte jeweils in eine Liste von Strings (ein
|
||||||
|
Element pro Skill) umgewandelt werden.
|
||||||
|
|
||||||
|
Tipp 1: verwenden Sie die String-Methode `split()` zum Parsen jeder Zeile und
|
||||||
|
nochmals zum Parsen der Liste der Skills. Dabei müssen jeweils unterschiedliche
|
||||||
|
Trennzeichen verwendet werden.
|
||||||
|
|
||||||
|
|
||||||
|
Aufgabe 6:
|
||||||
|
|
||||||
|
Kombinieren Sie die Programme aus Aufgabe 4 und 5 und kombinieren Sie die
|
||||||
|
beiden Dictionaries, die Sie aus den Daten erstellt haben.
|
||||||
|
|
||||||
|
Speichern Sie dabei das Gehalt und die Skills jedes Mitarbeiters jeweils
|
||||||
|
zusammen in einem Dictionary mit folgendem Format:
|
||||||
|
|
||||||
|
```py
|
||||||
|
employee_data = {
|
||||||
|
"salary": ..., # integer
|
||||||
|
"skills": [...], # list of strings
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Speichern Sie alle Daten in einem Dictionary mit dem Namen des Mitarbeiters
|
||||||
|
als Key und dem `employee_data` Dictionary als Wert. Dadurch ergibt sich
|
||||||
|
folgende geschachtelte Datenstruktur:
|
||||||
|
|
||||||
|
```py
|
||||||
|
employees = {
|
||||||
|
"name 1": {
|
||||||
|
"salary": ...,
|
||||||
|
"skills": [...],
|
||||||
|
},
|
||||||
|
"name 2": {
|
||||||
|
"salary": ...,
|
||||||
|
"skills": [...],
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Aufgabe 7:
|
||||||
|
|
||||||
|
Diese Aufgabe ist ähnlich wie Aufgabe 4, die einzulesende Datei enthält jedoch
|
||||||
|
mehrere Fehler, die Sie abfangen und behandeln müssen.
|
||||||
|
|
||||||
|
Öffnen Sie die Datei `salaries-errors.txt` zum Lesen und lesen Sie die Datei
|
||||||
|
zeilenweise ein. Parsen Sie den Namen des Mitarbeiters sowie das Gehalt aus
|
||||||
|
jeder Datenzeile und speichern die Daten in einem Dictionary mit dem Namen
|
||||||
|
des Mitarbeiters als Key und dem Gehalt als Wert. Der Gehaltswert sollte
|
||||||
|
jeweils in einen Integerwert umgewandelt werden.
|
||||||
|
|
||||||
|
Die Datei enthält folgende Fehler:
|
||||||
|
|
||||||
|
* Manche Zeilen sind auskommentiert (d.h. sie starten mit einem Hash (`#`).
|
||||||
|
dise Zeilen sollen ignoriert werden, d.h. sie werden nicht in den Daten
|
||||||
|
gespeichert.
|
||||||
|
* Bei manchen Zeilen fehlt der trennende Doppelpunkt zwischen dem Namen und
|
||||||
|
dem Gehalt. Fangen Sie diesen Fehler beim Parsen der Zeile ab und
|
||||||
|
ignorieren Sie entweder die Zeile oder versuchen Sie sie erneut mit einer
|
||||||
|
anderen Methode zu parsen.
|
||||||
|
* Bei manchen Mitarbeitern ist das Gehalt mit einem Währungssymbol angegeben.
|
||||||
|
Fangen Sie den Fehler beim Umwandeln des Gehaltwerts in einen Integer ab und
|
||||||
|
ignorieren Sie entweder die Zeile oder entfernen Sie das Währungssymbol vor
|
||||||
|
dem Parsen.
|
||||||
|
|
||||||
|
|
||||||
|
Geben Sie das höchste, sowie das niedrigste Gehalt aus.
|
|
@ -0,0 +1,93 @@
|
||||||
|
# Übungen zu Dictionaries
|
||||||
|
|
||||||
|
|
||||||
|
## Ausgangslage
|
||||||
|
|
||||||
|
Sie haben zwei Tabellen mit Personallisten jeweils mit Namen und Monatsgehältern
|
||||||
|
als ein Python-Dictionary. Die Keys sind die Namen der Angestellten (strings),
|
||||||
|
die Werte das jeweilige Monatsgehalt (integer):
|
||||||
|
|
||||||
|
```py
|
||||||
|
salaries_1 = {'Anna': 2000, 'Mark': 3000, 'Judith': 3500, 'Thomas': 2500}
|
||||||
|
salaries_2 = {'Barbara': 3000, 'Elke': 3300, 'Michael': 2800, 'Johann': 2000}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 1:
|
||||||
|
|
||||||
|
Schreiben Sie ein Programm, das die beiden Dictionaries in einem neuen
|
||||||
|
Dictionary (`salaries_all`) zusammenführt und die Namen aller Mitarbeiter
|
||||||
|
als Liste ausgibt.
|
||||||
|
|
||||||
|
Tipp: Machen Sie zunächst eine Kopie des ersten Dictionaries (`dict.copy()`)
|
||||||
|
und fügen Sie dann die Einträge des zweiten Dictionaries der Kopie hinzu
|
||||||
|
(`dict.update()`).
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 2:
|
||||||
|
|
||||||
|
Schreiben Sie ein Programm, das den Namen und das Gehalt des Mitarbeiters mit
|
||||||
|
dem höchsten Gehalt aus den gesamten Daten ermittelt und diese ausgibt (mit
|
||||||
|
`print`).
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 3:
|
||||||
|
|
||||||
|
Schreiben Sie ein Programm, das die Gesamtsumme aller monatlichen Gehälter
|
||||||
|
ermittelt und diese ausgibt.
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 4:
|
||||||
|
|
||||||
|
Schreiben Sie ein Programm, das das Gehalt aller Mitarbeiter um 10% erhöht und
|
||||||
|
diese Daten in einem *neuen* Dictionary mit der selben Struktur speichert. Das
|
||||||
|
ursprüngliche Dictionary soll nicht verändert werden.
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 5:
|
||||||
|
|
||||||
|
Lassen Sie das Program dieses neue Dictionary in folgendem Format ausgeben:
|
||||||
|
|
||||||
|
```
|
||||||
|
Name Gehalt
|
||||||
|
--------------
|
||||||
|
Anna ???
|
||||||
|
Mark ???
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Tipp: verwenden Sie die Escape-Sequenz für Tabulatoren `\t`.
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 6:
|
||||||
|
|
||||||
|
|
||||||
|
Lassen Sie das Programm die alten Gehälter in der gleichen Form ausgeben,
|
||||||
|
um zu zeigen, dass das ursprüngliche Dictionary nicht verändert wurde.
|
||||||
|
|
||||||
|
|
||||||
|
## Bonusaufgaben:
|
||||||
|
|
||||||
|
1. Sortieren Sie die Liste nach Höhe des Gehalts (absteigend).
|
||||||
|
|
||||||
|
Tipp: verwenden Sie die Funktion `sorted()` zum Sortieren.
|
||||||
|
|
||||||
|
2. Nummerieren Sie die Listeneinträge in der Ausgabe, startend mit 1.
|
||||||
|
|
||||||
|
3. Ermitteln Sie das durchschnittliche Gehalt nach der Erhöhung.
|
||||||
|
|
||||||
|
4. Berechnen Sie, wieviel Prozent des durchschnitlichen Gehalts jeder Mitarbeiter
|
||||||
|
verdient und geben diese Prozentzahl in einer zusätzlichen Spalte aus.
|
||||||
|
|
||||||
|
Tipp: Sie können die Prozentzahlen in einem neuen, zusätzlichen Dictionary
|
||||||
|
speichern oder, anstatt nur dem Gehalt, für jeden Mitarbeiter das Gehalt und
|
||||||
|
die Prozent des Durchschnittsverdienstes als Tuple mit zwei Elementen als
|
||||||
|
Wert im Dictionary ablegen.
|
||||||
|
|
||||||
|
|
||||||
|
## Ressourcen
|
||||||
|
|
||||||
|
Hilfe zu Dictionaries:
|
||||||
|
|
||||||
|
* <https://docs.python.org/3/library/stdtypes.html#mapping-types-dict>
|
||||||
|
* <https://www.data-science-architect.de/dictionaries-python/>
|
|
@ -0,0 +1,8 @@
|
||||||
|
Anna: buchhaltung,management,marketing
|
||||||
|
Mark: management,marketing
|
||||||
|
Judith: management,buchhaltung,human resources
|
||||||
|
Thomas: software development,it support
|
||||||
|
Barbara: software development,management
|
||||||
|
Elke: management,buchhaltung,it support
|
||||||
|
Michael: software development,buchhaltung
|
||||||
|
Johann: it support,software development
|
|
@ -0,0 +1,5 @@
|
||||||
|
office manager: management,buchhaltung
|
||||||
|
ceo: management,human resources
|
||||||
|
developer: software development
|
||||||
|
cto: software development,system design,human resources
|
||||||
|
support desk: it support
|
|
@ -0,0 +1,10 @@
|
||||||
|
Anna: 2000
|
||||||
|
Mark: 3000$
|
||||||
|
# Gekündigt:
|
||||||
|
# Margrit: 4000
|
||||||
|
Judith: 3500€
|
||||||
|
Thomas 2500
|
||||||
|
Barbara: 3000€
|
||||||
|
Elke: 3300
|
||||||
|
Michael: 2800€
|
||||||
|
Johann: 2000
|
|
@ -0,0 +1,8 @@
|
||||||
|
Anna: 2000
|
||||||
|
Mark: 3000
|
||||||
|
Judith: 3500
|
||||||
|
Thomas: 2500
|
||||||
|
Barbara: 3000
|
||||||
|
Elke: 3300
|
||||||
|
Michael: 2800
|
||||||
|
Johann: 2000
|
|
@ -0,0 +1,83 @@
|
||||||
|
# Übungen zu Sets
|
||||||
|
|
||||||
|
|
||||||
|
## Ausgangslage
|
||||||
|
|
||||||
|
Sie haben eine Liste mit Mitarbeitern und ihren Skills sowie eine Liste
|
||||||
|
von Planstellen im Betrieb mit erforderlichen Skills:
|
||||||
|
|
||||||
|
```py
|
||||||
|
employee_skills = {
|
||||||
|
'Anna': ("buchhaltung", "management", "marketing"),
|
||||||
|
'Mark': ("management", "marketing"),
|
||||||
|
'Judith': ("management", "buchhaltung", "human resources"),
|
||||||
|
'Thomas': ("software development", "it support"),
|
||||||
|
'Barbara': ("software development", "management"),
|
||||||
|
'Elke': ("management", "buchhaltung", "it support"),
|
||||||
|
'Michael': ("software development", "buchhaltung"),
|
||||||
|
'Johann': ("it support", "software development"),
|
||||||
|
}
|
||||||
|
|
||||||
|
job_skills = {
|
||||||
|
"office manager": ("management", "buchhaltung"),
|
||||||
|
"ceo": ("management", "human resources"),
|
||||||
|
"developer": ("software development",),
|
||||||
|
"cto": ("software development", "system design", "human resources"),
|
||||||
|
"support desk": ("it support",),
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 1:
|
||||||
|
|
||||||
|
Schreiben Sie ein Programm, das ermittelt, welche Menge an Skills bei den
|
||||||
|
Mitarbeitern insgesamt vorhanden sind. Jeder Skill wird nur einmal
|
||||||
|
berücksichtigt.
|
||||||
|
|
||||||
|
Verwenden Sie zum Speichern ein Set und geben Sie den Inhalt diese Sets aus.
|
||||||
|
Wieviele unterschiedliche Skills sind vorhanden?
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 2:
|
||||||
|
|
||||||
|
Schreiben Sie ein Programm, das ermittelt, welche Menge an Skills benötigt
|
||||||
|
werden, um die Anforderungen für alle Planstellen zu erfüllen.
|
||||||
|
|
||||||
|
Verwenden Sie zum Speichern ein Set und geben Sie den Inhalt diese Sets aus.
|
||||||
|
Wieviele unterschiedliche Skills werden insgesamt benötigt?
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 3:
|
||||||
|
|
||||||
|
Schreiben Sie ein Programm, das die beiden Sets aus Aufgabe 1 und 2 vergleicht
|
||||||
|
und feststellt, welche Skills im Mitabeiterstamm fehlen.
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 3:
|
||||||
|
|
||||||
|
Schreiben Sie ein Programm, das die beiden Sets aus Aufgabe 1 und 2 vergleicht
|
||||||
|
und feststellt, welche vorhandene Skills der Mitarbeiter von keiner Planstelle
|
||||||
|
abgedeckt werden.
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 4:
|
||||||
|
|
||||||
|
Schreiben Sie ein Programm, das für jede Planstelle herausfindet, welche
|
||||||
|
Mitarbeiter die notwendigen Skills für die Stelle besitzen.
|
||||||
|
|
||||||
|
Speichern Sie das Ergebnis in einem Dictionary der Form:
|
||||||
|
|
||||||
|
```py
|
||||||
|
candidates = {
|
||||||
|
"job 1": ("name 1", "name 2", ...),
|
||||||
|
"job 2: ("name 1", "name 3", ...),
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Ressourcen
|
||||||
|
|
||||||
|
Hilfe zu Dictionaries:
|
||||||
|
|
||||||
|
* <https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset>
|
Loading…
Reference in New Issue