Add uebungen for day 1
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
This commit is contained in:
		
							parent
							
								
									2fec50720d
								
							
						
					
					
						commit
						d59ec6069b
					
				
							
								
								
									
										147
									
								
								uebungen/dateien.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								uebungen/dateien.md
									
									
									
									
									
										Normal file
									
								
							@ -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.
 | 
			
		||||
							
								
								
									
										93
									
								
								uebungen/dictonaries.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								uebungen/dictonaries.md
									
									
									
									
									
										Normal file
									
								
							@ -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/>
 | 
			
		||||
							
								
								
									
										8
									
								
								uebungen/employee_skills.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								uebungen/employee_skills.txt
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
			
		||||
							
								
								
									
										5
									
								
								uebungen/job_skills.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								uebungen/job_skills.txt
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
			
		||||
							
								
								
									
										10
									
								
								uebungen/salaries-errors.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								uebungen/salaries-errors.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
Anna: 2000
 | 
			
		||||
Mark: 3000$
 | 
			
		||||
# Gekündigt:
 | 
			
		||||
# Margrit: 4000
 | 
			
		||||
Judith: 3500€
 | 
			
		||||
Thomas 2500
 | 
			
		||||
Barbara: 3000€
 | 
			
		||||
Elke: 3300
 | 
			
		||||
Michael: 2800€
 | 
			
		||||
Johann: 2000
 | 
			
		||||
							
								
								
									
										8
									
								
								uebungen/salaries.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								uebungen/salaries.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
Anna: 2000
 | 
			
		||||
Mark: 3000
 | 
			
		||||
Judith: 3500
 | 
			
		||||
Thomas: 2500
 | 
			
		||||
Barbara: 3000
 | 
			
		||||
Elke: 3300
 | 
			
		||||
Michael: 2800
 | 
			
		||||
Johann: 2000
 | 
			
		||||
							
								
								
									
										83
									
								
								uebungen/sets.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								uebungen/sets.md
									
									
									
									
									
										Normal file
									
								
							@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user