Add solution for dictionaries uebung

Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
This commit is contained in:
Christopher Arndt 2024-05-07 00:24:56 +02:00
parent d44a6725b8
commit a7cf6aed5f
2 changed files with 157 additions and 6 deletions

142
loesungen/dictionaries.py Normal file
View File

@ -0,0 +1,142 @@
# Ausgangslage
salaries_1 = {'Anna': 2000, 'Mark': 3000, 'Judith': 3500, 'Thomas': 2500}
salaries_2 = {'Barbara': 3000, 'Elke': 3300, 'Michael': 2800, 'Johann': 2000}
# Aufgabe 1:
salaries_all = salaries_1.copy()
salaries_all.update(salaries_2)
print(salaries_all)
print("-" * 50)
# Aufgabe 2:
employee = ""
max_salary = 0
sum_salary = 0
for name, salary in salaries_all.items():
if salary > max_salary:
max_salary = salary
employee = name
sum_salary += salary
print("Topverdiener:", employee, max_salary)
print("-" * 50)
# Aufgabe 3:
print("Summe:", sum_salary)
# Aufgabe 3 alternativ:
print("Summe:", sum(salaries_all.values()))
print("-" * 50)
# Aufgabe 4:
salaries_new = {}
for key in salaries_all:
salaries_new[key] = salaries_all[key] * 1.1
# Aufgabe 5:
heading = "Name Gehalt"
print(heading)
print("-" * len(heading))
for name, salary in salaries_new.items():
print(name.ljust(8), int(salary))
print("-" * 50)
# Aufgabe 6:
heading = "Name Gehalt"
print(heading)
print("-" * len(heading))
for name, salary in salaries_all.items():
print(name.ljust(8), int(salary))
print("-" * 50)
# Aufgabe 5 & 6 mit Funktion
def print_salary_list(data, col_width=8):
heading = "Name".ljust(col_width) + "Gehalt"
print(heading)
print("-" * len(heading))
for name, salary in data.items():
print(name.ljust(col_width), int(salary))
print_salary_list(salaries_new, 10)
print("-" * 50)
print_salary_list(salaries_all, 10)
print("-" * 50)
# Bonusaufgabe 1:
def print_ordered_salary_list(data, col_width=8):
heading = "Name".ljust(col_width) + "Gehalt"
print(heading)
print("-" * len(heading))
salary_first = []
for name, salary in data.items():
salary_first.append((salary, name))
for salary, name in sorted(salary_first, reverse=True):
print(name.ljust(col_width), int(salary))
print_ordered_salary_list(salaries_new)
print("-" * 50)
# Bonusaufgabe 2:
def print_enumerated_salary_list(data, col_width=8):
heading = "Nr. " + "Name".ljust(col_width) + "Gehalt"
print(heading)
print("-" * len(heading))
salary_first = []
for name, salary in data.items():
salary_first.append((salary, name))
for i, (salary, name) in enumerate(sorted(salary_first, reverse=True)):
print(str(i+1).rjust(3), name.ljust(col_width), int(salary))
print_enumerated_salary_list(salaries_new)
print("-" * 50)
# Bonusaufgabe 3:
print("Gehaltsdurchschnitt:", sum(salaries_new.values()) / len(salaries_new))
print("-" * 50)
# Bonusaufgabe 4:
def print_extended_salary_list(data, col_width=8):
mean_salary = sum(data.values()) / len(data)
heading = "Nr. " + "Name".ljust(col_width + 1) + "Gehalt".ljust(col_width +1) + "% d. ø"
print(heading)
print("-" * len(heading))
salary_first = []
for name, salary in data.items():
salary_first.append((salary, name))
for i, (salary, name) in enumerate(sorted(salary_first, reverse=True)):
print(str(i+1).rjust(3), name.ljust(col_width), str(int(salary)).ljust(col_width), round(salary / (mean_salary / 100), 2))
print_extended_salary_list(salaries_new)

View File

@ -19,9 +19,12 @@ 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()`)
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()`).
([dict.update]`()`).
[dict.copy]: https://docs.python.org/3/library/stdtypes.html#dict.copy
[dict.update]: https://docs.python.org/3/library/stdtypes.html#dict.update
## Aufgabe 2:
@ -40,8 +43,8 @@ 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.
diese Daten in einem *neuen* Dictionary (z.B. `salaries_new`) mit der selben
Struktur speichert. Das ursprüngliche Dictionary soll *nicht* verändert werden.
## Aufgabe 5:
@ -56,7 +59,10 @@ Mark ???
...
```
Tipp: verwenden Sie die Escape-Sequenz für Tabulatoren `\t`.
Tipp: verwenden Sie die String-Methode [ljust]`()` für die Ausgabe der ersten
Spalte, um die zweite Spalte auszurichten.
[ljust]: https://docs.python.org/3/library/stdtypes.html#str.ljust
## Aufgabe 6:
@ -70,7 +76,7 @@ um zu zeigen, dass das ursprüngliche Dictionary nicht verändert wurde.
1. Sortieren Sie die Liste nach Höhe des Gehalts (absteigend).
Tipp: verwenden Sie die Funktion `sorted()` zum Sortieren.
Tipp: verwenden Sie die Funktion [sorted]`()` zum Sortieren.
2. Nummerieren Sie die Listeneinträge in der Ausgabe, startend mit 1.
@ -85,6 +91,9 @@ um zu zeigen, dass das ursprüngliche Dictionary nicht verändert wurde.
Wert im Dictionary ablegen.
[sorted]: https://docs.python.org/3/library/functions.html#sorted
## Ressourcen
Hilfe zu Dictionaries: