From a7cf6aed5f440d4c058198393d25fe79103641fe Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Tue, 7 May 2024 00:24:56 +0200 Subject: [PATCH] Add solution for dictionaries uebung Signed-off-by: Christopher Arndt --- loesungen/dictionaries.py | 142 ++++++++++++++++++++++++++++++++++++++ uebungen/dictonaries.md | 21 ++++-- 2 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 loesungen/dictionaries.py diff --git a/loesungen/dictionaries.py b/loesungen/dictionaries.py new file mode 100644 index 0000000..c3d7a6c --- /dev/null +++ b/loesungen/dictionaries.py @@ -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) + diff --git a/uebungen/dictonaries.md b/uebungen/dictonaries.md index fe15a95..de333ab 100644 --- a/uebungen/dictonaries.md +++ b/uebungen/dictonaries.md @@ -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: