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