Python Unittest Übung

URL: ../..wdic/python/unittests.html

Python Unittest Übung

Unittests link symbol

Vorbereitungen:

  1. Neues Verzeichnis erstellen (Name unittests)
  2. Dieses Verzeichnis mit VS Code öffnen
  3. Eine leere Datei main.py in diesem Ordner erstellen
  4. In VS Code das Terminal öffnen und python -m venv .venv ausführen
  5. Nun gibt es zwei Varianten:
  6. VS Code sollte nun die virtuelle Umgebung erkennen und fragen, ob man es auswählen will -> Dies mit "Ja" (bzw. "Yes") bestätigen
  7. Falls VS Code nicht nachfragt, hilft es das aktuelle Terminal zu schließen (Mülleimer-Symbol) und wieder zu öffnen
  8. Das Paket pytest mittels python -m pip install pytest installieren

Übung Durchschnittsalter link symbol

  • Dateiname: average_age.py
  • Funktion: def get_average_age(persons_dict: dict) -> float:

Der Funktion wird ein Dictionary übergeben. Die Keys sind Personennamen (Strings) und die Values sind das Alter.

Beispiel:

>>> get_average_age({'Klaus': 17, 'Hubert': 19, 'Otto': 20})
18.666666666666668

Unittest link symbol

  • Dateiname: test_average_age.py

  • Der Unittest soll die Funktion get_average_age sinvoll testen.

  • Sind die Anforderungen vollständig definiert?

Übung Median link symbol

  • Dateiname: median.py bzw. test_median.py
  • Funktion: def calc_median(numbers: list) -> float:

Der Funktion wird eine Liste an Zahlen übergeben. Zurückgegeben wird der sogenannte Median -> die Zahl, die in der Mitte steht, wenn die Liste sortiert ist.

Beispiel:

>>> calc_median([3, 1, 6, 10 ,2])
3

Auch in dieser Übung ist der entsprechende Unittest zu entwerfen

Übung Progressive Steuern link symbol

  • Dateiname: progressive_tax.py bzw. test_progressive_tax.py
  • Funktion: def calc_tax(earnings: float) -> float:

Implementiere eine Funktion die die progressiven Steuern laut Österreichischer Einkommenssteuertabelle berechnet.

Beispiel:

>>> calc_tax(700)
0
>>> calc_tax(2000)
242.366  # using data from 2023: 985.42€: 0%, 1605,50€: 20%, 2683.92€: 30%

Übung Zinseszins link symbol

  • Dateiname: compound_interest.py bzw. test_compound_interest.py
  • Funktion: def calc_compound_interest(value: float, years: int, interest: float) -> float:

Wir berechnen den Zinseszins . Dazu starten wir mit einem Kapital (value), legen es für eine bestimmte Anzahl an Jahren (years) an zu einem bestimmten Zinssatz in Prozent (interest).

Beispiel:

>>> calc_compound_interest(1000, 1, 1)
1010
>>> calc_compount_interest(1, 2000, 0.5)
21484.41

Übung Elemente zählen link symbol

  • Dateiname: enumerate_list.py bzw. test_enumerate_list.py
  • Funktion: def enumerate_list(elements: list) -> dict:

Aus einer Liste an Elemente soll ein Dictionary erstellt werden, welches die Anzahl der enthaltenen Elemente angibt.

Beispiel:

>>> enumerate_list(['A', 'B', 'B', 'C', 'A', 'A'])
{'A': 3, 'B': 2, 'C': 1}
>>> enumerate_list([1, 0, 2, 2, 0, 0, 1, 2])
{1: 2, 0: 3, 2: 3}

Übung Gemeinsamkeiten link symbol

  • Dateiname: common_list.py bzw. test_common_list.py
  • Funktion: def get_common_elements(list1: list, list2: list) -> list:

Die Funktion ermittelt die Elemente, die in beiden Listen sind. Die Ausgabe ist selbst wieder eine Liste, deren Sortierung aber beliebig sein kann.

Beispiel:

>>> get_common_elements([1, 2, 3, 4, 1], [2, 1])
[1, 2]
>>> get_common_elements(['A', 1, 'A', 0, 'B'], ['C', 'D'])
[]

Übung Wörter durcheinander würfeln link symbol

  • Dateiname: shuffle.py bzw. shuffle.py
  • Funktion: def shuffle_words(message: str) -> str:

Ein String bestehend aus mehreren Wörtern soll wortweise durcheinander gewürfelt werden. Dabei soll jeweils der erste und letzte Buchstabe eines Wortes unverändert bleiben.

Beispiel:

>>> shuffle_words('Hier wohnt Herr Schuster')
'Heir wnoht Hrer Steuschr'

Hinweise:

  • Um einen String zufällig zu sortieren seht ihr hier in der ersten Antwort ein Beispiel: Stackoverflow
  • Beim Testen wird es auch etwas schwieriger, weil ihr überprüfen müsst, ob das Resultat gültig ist. sorted() kann hier hilfreich sein!
  • Im String kommen keine Satzzeichen vor (., ,, ...)

Übung Niedrigster Preis link symbol

  • Dateiname: lowest_price.py bzw. test_lowest_price.py
  • Funktion: def lowest_price(items: dict) -> list:

Der Funktion wird ein Dictionary mit Artikelnamen und deren Preisen gegeben. Zurückgegeben werden soll eine Liste mit den drei günstigsten Artikeln.

Beispiel:

>>> get_cheapest_articles({'Allegro': 17.5, 'Adagio': 3.5, 'Forte': 15, 'Largo': 5, 'Legato': 18})
['Adagio', 'Largo', 'Forte']

Hinweis:

  • Das Wörterbuch enthält immer mindestens drei Einträge