13. Hausaufgaben

13.1. Hausaufgabe 1

Hausaufgabe 1.1 (1 Punkt)

Gegeben ist folgende Berechnungsvorschrift für x:

x :=  a \cdot \sqrt{1 - \left(\frac{y}{b}\right)^2}

  1. Erzeugen Sie ein Python Skript mit beliebigem Namen mittels Spyder.
  2. Schreiben Sie Ihren Namen in ein Kommentar
  3. Definieren Sie drei Variablen a, b, y mit den Werten 5, 2.5 und 1.
  4. Berechnen Sie den Wert von x.
  5. Geben Sie das Ergebnis aus 4) in der folgenden Form aus: x = ..., y = .... Setzen Sie dabei für die Punkte Ihr Ergebnis aus 4) und den Wert für y ein.
  6. Wiederholen Sie die Punkte 4) und 5) aber verwenden Sie anstelle des Divisionsoperators / den Ganzzahldivisionsoperator // in der Berechnungsvorschrift.
  7. Probieren Sie selbstständig weitere Werte für die Variablen a und b aus.

13.2. Hausaufgabe 2

Hausaufgabe 2.1 (1 Punkt)

Gegeben ist eine Liste Obstkorb mit den Einträgen "Apfel","Banane","Kiwi", "Apfel", "Banane".

Schreiben Sie Code, der die folgenden Punkte löst und lassen Sie sich zu jedem Punkt eine kurze Ausgabe mit erklärendem Text ausgeben.

  1. Definieren Sie die Liste Obstkorb.
  2. Finden Sie heraus ob sich die Zeichenkette "Banane" in dieser Liste befindet.
  3. Ermitteln Sie, wie oft "Banane" in der Liste vorkommt.
  4. Bestimmen Sie alle Indizes von "Banane" in der Liste Obstkorb. Kontrollieren Sie, dass Sie die richtigen Stellen gefunden haben, indem Sie die Indizes sowie die zugehörigen Werte ausgeben.
  5. Löschen Sie das vorletzte Element aus "Obstkorb" und speichern Sie dieses in einer beliebigen Variablen ab.
  6. Geben Sie die Länge der Liste aus.
  7. Fügen Sie die Zahl 5 ans Ende der Liste an.
  8. Multiplizieren Sie die Liste mit 2 und speichern Sie die neue Liste in der Variablen Obstkorb2.
  9. Erstellen Sie eine neue Liste Werte mit beliebigen Einträgen. Addieren Sie die Listen Obstkorb und Werte und geben Sie das Ergebnis aus.
  10. Erstellen Sie eine neue Liste doppel_Liste, die die Liste Obstkorb als 0. Element und die Liste Werte als 1. Element enthält. D.h. doppel_Liste ist eine Liste, die Listen enthält.
  11. Erstellen Sie eine explizite Kopie der Liste Obstkorb und nennen Sie diese Obstkorb_Kopie
  12. Überprüfen Sie auf mindestens eine Art, dass eine Veränderung an der Kopie die ursprüngliche Liste tatsächlich nicht verändert.

Hinweis

Überprüfen Sie nach jedem Punkt durch Ausgabe in der Konsole, dass Ihr Code richtig funktioniert.

Hausaufgabe 2.2 (1 Punkt)

Drei Freunde nehmen bei einen 5km-Staffellauf teil. Die Liste Laufzeiten mit den Einträgen "Tobias : 27min  ", "Alexander  :  24.3   min", "Maria:  32 min " beschreibt ihre Ergebnisse.

  1. Definieren Sie die gegebene Liste Laufzeiten.

  2. Extrahieren Sie die Zahlenwerte aus den Strings der Liste und speichern Sie sie in den Variablen Tobias, Alexander und Maria als Gleitkommazahlen ab. Achten Sie darauf, dass die Strings beliebige Zahlen mit beliebig vielen Leerzeichen beinhalten können. Ein Ausgabe sollte dann wie folgt aussehen:

    In[1]:print(Tobias)
    27.0
    
  3. Berechnen Sie die Summe der Laufzeiten und geben Sie das Ergebnis per print Befehl aus.

  4. Erstellen Sie ein Dictionary Laufzeiten_Dict, das die Variablen Tobias, Alexander und Maria mit ihren jeweiligen Zahlenwerten enthält. Dabei soll der jeweilige Variablenname als String der Schlüssel sein. Für den Wert wird der jeweilige Zahlenwert als Gleitkommazahl zugeordnet. Das Dictionary sollte folgendermaßen aussehen:

    In[2]:print(Laufzeiten_Dict)
    {'Tobias': 27.0, 'Alexander': 24.3, 'Maria': 32.0}
    
  5. Errechnen Sie erneut die Summe der Laufzeiten. Verwenden Sie diesmal jedoch das Dictionary Laufzeiten_Dict für die Berechnung. Geben Sie das Ergebnis erneut per print Befehl aus.

  6. Angenommen es hätte noch ein vierter Läufer an der Staffel teilgenommen, der auch den Namen Tobias trägt, jedoch eine Laufzeit von 22 Minuten erreicht hat. Fügen Sie den entsprechenden Eintrag im Dictionary hinzu (Schlüssel:"Tobias", Wert:22) und lassen Sie sich das neue Dictionary ausgeben. Beantworten Sie folgende Frage im Kommentar: Was passiert mit dem zugehörigen Wert, wenn in ein Dictionary ein bereits vorhandener Schlüssel hinzugefügt wird?

Hinweis

Um die Summe der Laufzeiten zu berechnen, erstellen Sie am besten zuerst eine Liste aller Werte des Dictionaries. Dann können Sie die Listenfunktion sum verwenden um die Summe zu berechnen.

Hinweis

Stellen Sie sicher, dass Ihr Programm auch für beliebige Listen mit 3 Einträgen der gleichen Art funktioniert (andere Namen/Zeiten/Anzahl an Leerzeichen innerhalb der Strings).

13.3. Hausaufgabe 3

Hausaufgabe 3.1 (1 Punkt)

Gegeben ist ein Dictionary Pakete mit z.B. folgendem Inhalt: '163' : 4.2, '175' : 0.5, '214' : 12, '159' : 0.3.

Die Schlüssel sind Strings und geben den Identifikationscode eines Pakets an. Der entsprechende Wert ist das Gewicht des Pakets in Kilogramm. Ab einem Gewicht von 2 kg wird ein höherer Betrag für die Zustellung verlangt. Für Pakete, die leichter sind als 2 kg ist die Zustellung billig. Eine Ausnahme bildet das Paket mit Identifikationsnummer '175'. Für Pakete mit dieser Identifikationsnummer ist die Zustellung immer teuer.

Erstellen Sie zwei Listen, billig und teuer, die jeweils die Identifikationsnummern der Briefe enthalten, bei denen die Zustellung billig bzw. teuer ist.
Gehen Sie wie folgt vor:
  1. Legen Sie zwei leere Listen billig und teuer an.

  2. Lesen Sie mit Hilfe einer Schleife die Identifikationsnummer und das Gewicht des Pakets aus. Definieren Sie dafür innerhalb der Schleife die Variablen ID und Gewicht.

  3. Wenn das Paket genau 2kg oder mehr wiegt oder die Identifikationsnummer '175' entspricht, fügen Sie die Identifikationsnummer zur Liste teuer hinzu. Andernfalls fügen Sie die Identifikationsnummer des Pakets zur Liste billig hinzu.

  4. Geben Sie beide Listen per print Befehl aus. Die Ausgabe sollte folgendermaßen aussehen:

    In[1]:print(billig, teuer)
    ['159'] ['163','175','214']
    

Hinweis

Stellen Sie sicher, dass Ihr Programm für beliebige Dictionaries (unterschiedliche Länge, unterschiedliche Einträge) funktioniert.

Hausaufgabe 3.2 (1 Punkt)

Gegeben ist eine Liste Zahlungen, die als Einträge eine Liste mit Vornamen (str) und von der Person getätigte Zahlungen in Euro (int) enthält:

Zahlungen = [["Anna",60],
            ["Sarah",37],
            ["Marco",88],
            ["Stefan",100],
            ["Sebastian",22],
            ["Marco",70],
            ["Anna",120]]

Erstellen Sie ein Dictionary Zahlungen_Dict welches als Schlüssel den Vornamen der Person enthält und als Wert die Summe der jeweiligen Zahlungen.

Gehen Sie dafür wie folgt vor:

  1. Erstellen Sie dazu zuerst ein leeres Dictionary Zahlungen_Dict.
  2. Durchlaufen Sie die Liste Zahlungen und lesen Sie in jedem Schritt den Vornamen der Person sowie die jeweilige Höhe der Zahlungen aus der Liste aus.
  3. Überprüfen Sie, ob der Vorname bereits im Dictionary vorhanden ist:
  • Wenn der Vorname noch nicht vorhanden ist, fügen Sie im Dictionary einen neuen Eintrag hinzu, wobei der Vorname der Person der Schlüssel und die Höhe der Zahlung der Wert sein soll.
  • Wenn der Vorname bereits im Dictionary vorhanden ist, soll nur der Wert des bestehenden Eintrags verändert werden. Die ausgelesene Zahlung soll dabei zu der Zahlung, das bereits als Wert im Dictionary gespeichert wurde, addiert werden.
  1. Geben Sie das Dictionary mit Hilfe von print aus. Am Ende sollte das Dictionary folgendermaßen aussehen:

    In [1]: print(Zahlungen_Dict)
    {'Anna': 180, 'Sarah': 37, 'Marco': 158, 'Stefan': 100, 'Sebastian': 22}
    
  2. Verwenden Sie das Dictionary um das Maximum der Zahlungen zu bestimmen. Speichern Sie die Zahl unter der Variable Max_Zahlungen ab. Geben Sie die maximale Zahlung mittels print-Befehl aus. Verwenden Sie dabei für die Formatierung die f-String Methode und geben Sie die Zahl mit zwei Kommastellen aus.

Hinweis

Um das Maximum der Zahlungen zu berechnen, erstellen Sie am besten zuerst eine Liste aller Werte des Dictionaries. Dann können Sie die Listenfunktion max verwenden um das Maximum herauszufinden.

Hinweis

Stellen Sie sicher, dass Ihr Programm für beliebige Listen (unterschiedliche Länge, unterschiedliche Einträge) funktioniert.

13.4. Hausaufgabe 4

Hausaufgabe 4.1 (1 Punkt)

Definieren Sie eine Funktion Pruefung, welche eine Liste Pruefungsantritte und ein optionales Argument Bestehensgrenze (Typ:int) übergeben bekommt. Die Liste Pruefungsantritte enthält als Einträge jeweils eine Liste pro Person mit den Daten Vorname und erreichte Prüfungspunkte:

Pruefungsantritte = [["Anton",60],
                    ["Natalia",37],
                    ["Manuel",88],
                    ["Heinrich",100],
                    ["Christoph",22],
                    ["Mario",70]]

Die Prüfung gilt als bestanden wenn zumindest 60 Punkte erreicht wurden. Das optionale Argument Bestehensgrenze soll deswegen als default Wert auf die Zahl 60 gesetzt werden.

In der Funktion sollen nun aus der Liste Pruefungsantritte die Namen aller Personen, die die Prüfung bestanden haben, gesucht werden und in eine neu erstellte Liste geschrieben werden. Die Funktion soll dann die neu erstellte Liste und die Anzahl der Personen in dieser Liste zurückgeben.

Wenden Sie nun die Funktion Pruefung im Hauptteil ihres Skripts auf die Liste Pruefungsantritte an. Rufen Sie dafür zuerst Ihre Funktion ohne Angabe des optionalen Arguments auf und lassen Sie sich die Liste und die Anzahl der Personen per print-Befehl ausgeben. Der Output sollte dann z.B. wie folgt aussehen:

In[1]: Liste1 = Pruefung(Pruefungsantritte)
In[2]: print(Liste1[0],Liste1[1])
['Anton', 'Manuel', 'Heinrich', 'Mario'] 4

Rufen Sie danach im Hauptteil Ihres Skripts Ihre Funktion mit Angabe des optionalen Arguments auf. Setzen Sie das optionale Argument Bestehensgrenze auf eine beliebige Zahl wie zum Beispiel 90 und lassen Sie sich die Liste und die Anzahl der Personen erneut per print-Befehl ausgeben. In diesem Fall sollte der Output dann z.B. wie folgt aussehen:

In[3]: Liste2 = Pruefung(Pruefungsantritte,90)
In[4]: print(Liste2[0],Liste2[1])
['Heinrich'] 1

Hinweis

Stellen Sie sicher, dass Ihr Programm für beliebige Listen (unterschiedliche Länge, unterschiedliche Einträge) funktioniert.

13.5. Hausaufgabe 5

Hausaufgabe 5.1 (1 Punkt)

Ziel dieser Aufgabe ist es 3 Funktionen zu schreiben, mit denen eine Textdatei eingelesen, verarbeitet, und das Ergebnis abgespeichert werden kann. Die Funktionen sollen im Hauptteil des Programms auf eine Beispieldatei angewendet werden.

In diesem Beispiel gehen wir von mehreren Messreihen aus, die in einer Textdatei dokumentiert wurden. Sie finden dafür die Beispieldatei „messreihen.txt“ auf TUWEL. Jede Zeile enthält die Bezeichnung der Messreihe (z.B. „Messreihe 1“), gefolgt vom Datum (z.B. „21.8.2022“) und genau 3 Messwerten. Die einzelnen Einträge sind durch einen Strichpunkt (;) voneinander getrennt. Eine Zeile der Datei sieht z.B. wie folgt aus:

Messreihe 1; 21.8.2022; 20.1; 20.3; 21.0
  1. Erstellen Sie eine Funktion Datei_einlesen(filename), die die Messwerte aus einer Textdatei mit Namen filename einliest und die Daten als Dictionary zurückgibt. Als Key des Dictionaries verwenden Sie die Bezeichnung der Messreihe. Der Value ist eine Liste mit den Messwerten (Liste von float Variablen). Das Datum kann ingorniert werden. Gehen Sie davon aus, dass die Textdatei im selben Verzeichnis wie Ihr Python-Skript liegt.
  2. Erstellen Sie eine Funktion Berechne_mittelwerte(daten), die ein Dictionary daten übergeben bekommt. In dieser Funktion sollen 2 Listen erstellt werden:
  • bezeichnungen enthält die Bezeichnung aller Messreihen als string
  • mittelwerte enthält die Mittelwerte der jeweiligen Messreihen als float (Berechnung durch: Summe der Messwerte/Anzahl Messwerte)

Die Funktion soll die beiden Listen abschließend zurückgeben.

  1. Erstellen Sie eine Funktion Datei_schreiben(bezeichnungen,mittelwerte,filename). Die Funktion liest die beiden Listen bezeichnungen und mittelwerte ein und speichert die Informationen in einer Textdatei mit Namen filename. Die Bezeichnung der Messreihe und deren Mittelwert sollen durch einen Doppelpunkt (:) getrennt sein.

  2. Verwenden Sie nun Ihre 3 Funktionen, um die Beispieldatei messreihen.txt einzulesen (Funktion Datei_einlesen), die Mittelwerte aller Messreihen zu bestimmen (Funktion Berechne_mittelwerte), und das Ergebnis als Datei mittelwerte.txt abzuspeichern (Funktion Datei_schreiben). Eine Zeile der Datei mittelwerte.txt sollte dann z.B. wie folgt aussehen:

    Messreihe 1: 20.47
    

Hinweis

Das Programm muss mit beliebigen Textdateien des oben genannten Formats funktionieren. Wenn Ihre Abgabe nur mit der Textdatei aus TUWEL funktioniert erhalten Sie keine Punkte.

13.6. Hausaufgabe 6

Hausaufgabe 6.1 (1 Punkt)

  1. Erstellen Sie eine Klasse Mitarbeiter, die die die Attribute name, arbeitszeit (Jahresarbeitszeit in Stunden), und gehalt (Jahresgehalt in Euro) übergeben bekommt. gehalt soll als privates Attribut gespeichert werden. Das Erstellen eines Objekts könnte z.B. so aussehen:

    In [1]: Mitarbeiter1 = Mitarbeiter("Magdalena Muster", 1680, 58800.0)
    In [2]: print(Mitarbeiter1.name,Mitarbeiter1.arbeitszeit)
    Magdalena Muster 1680.0
    
  2. Schreiben Sie eine Methode get_gehalt, die das private Attribut gehalt zurückgibt.

    In [3]: print(Mitarbeiter1.get_gehalt())
    58800.0
    
  3. Schreiben Sie eine Methode get_stundenlohn, die den Stundenlohn (gehalt/arbeitszeit) berechnet und zurückgibt. z.B.:

    In [4]: print(Mitarbeiter1.get_stundenlohn())
    35.0
    
  4. Überladen Sie den print Operator (__str__), sodass der Name und Stundenlohn ausgegeben wird, wenn die Funktion print auf ein Objekt vom Typ Mitarbeiter angewandt wird:

    In [5]: print(Mitarbeiter1)
    Magdalena Muster, Stundenlohn 35.00 Euro/h
    
  5. Schreiben Sie eine Methode gehalt_anpassung, die eine Gehaltsanpassung in Prozent (float) übergeben bekommt. Die Methode soll das Gehalt um diesen Prozentsatz erhöhen. z.B.:

    In [6]: Mitarbeiter1.gehalt_anpassung(10.0)
    In [7]: print(Mitarbeiter1.get_gehalt())
    64680.0
    In [8]: print(Mitarbeiter1)
    Magdalena Muster, Stundenlohn 38.50 Euro/h
    

Hausaufgabe 6.2 (1 Punkt)

  1. Erstellen Sie eine von Mitarbeiter abgeleitete Klasse Programmierer, die zusätzlich zu den Attributen von Mitarbeiter eine Liste programmiersprachen (liste von strings) übergeben bekommt. Außerdem soll die Anzahl der Programmiersprachen als Attribut anzahl gespeichert werden. Um die restlichen Attribute von Programmierer, zu initialisieren, verwenden Sie den Konstruktor der Klasse Mitarbeiter. Das Erstellen einer Instanz der Klasse Programmierer könnte z.B. so aussehen:

    In [1]: Programmierer1 = Programmierer("Gustav Generisch", 1680, 84000.0,["C++","Python"])
    In [2]: print(Programmierer1.programmiersprachen)
    ['C++', 'Python']
    In [3]: print(Programmierer1.anzahl)
    2
    
  2. Überladen Sie den print-Operator (__str__) der Klasse Programmierer, sodass der Name, Stundenlohn und die Anzahl der Programmiersprachen ausgegeben wird, z.B.:

    In [4]: print(Programmierer1)
    Gustav Generisch, Stundenlohn 50.00 Euro/h, beherrscht 2 Programmiersprachen
    
  3. Überladen Sie den Vergleichsoperator (__lt__), sodass zwei Objekte der Klasse Programmierer anhand der Anzahl von Programmiersprachen verglichen werden:

    In [5]: Programmierer2 = Programmierer("Peter Muster", 1680, 84000.0,["C++"])
    In [6]: print(Programmierer1>Programmierer2)
    True
    In [7]: print(Programmierer1<Programmierer2)
    False
    
  4. Schreiben Sie eine Klassenmethode check, die eine Programmiersprache als string übergeben bekommt. Die Methode überprüft, ob sich die Programmiersprache in der Liste programmiersprachen befindet. Wenn ja, soll True zurückgegeben werden, ansonsten False. z.B.:

    In [8]: Programmierer1.check("Python")
    True
    In [9]: Programmierer2.check("Python")
    False
    

13.7. Hausaufgabe 7

Hausaufgabe 7.1 (1 Punkt)

Schreiben Sie basierend auf der Funktion Datei_einlesen aus Hausaufgabe 5.1 eine Methode Datei_einlesen_check. Diese Methode soll das selbe machen wie die Funktion Datei_einlesen, aber zusätzlich überprüfen, ob die Information in der übergebenen Datei das richtige Format hat. Wenn nur einzelne Zeilen der Datei Formatfehler haben, sollen alle Messreihen gespeichert werden, für die Angaben im richtigen Format vorhanden sind (siehe Beispiele weiter unten).

Fangen Sie dazu die folgenden typischen Fehler mit Hilfe von try-except-else Blöcken ab:

  1. Die Datei könnte z.B. nicht existieren.
  2. Die Datei könnte anstatt Zahlen für die Messwerte etwas enthalten, das sich nicht zu einer Gleitkommazahl konvertieren lässt. Siehe z.B. die Testdatei messreihen_fehlerhaft_v1.txt auf TUWEL.
  3. Die Datei könnte in einer Zeile falsche Trennzeichen, z.B. Beistriche (,) statt Strichpunkten (;) enthalten bzw. eine falsche Anzahl an Angaben enthalten. Siehe z.B. die Testdatei messreihen_fehlerhaft_v2.txt auf TUWEL.

Geben Sie eine Fehlermeldung aus, die die Art des Fehlers beinhaltet! (siehe Beispiele unten)

Hinweis

Am Besten Sie gehen wie folgt vor:

  • Rufen Sie die Funktion mit einer Datei auf, die den gewünschten Fehler erzeugt (einige Dateien finden Sie auf TUWEL).
  • Finden Sie den minimalen Codeblock, der den Fehler erzeugt.
  • Schreiben Sie eine try-except Anweisung mit dem richtigen Fehlertyp.
  • Überlegen Sie sich, welche Teile des Codes nur ausgeführt werden sollen, wenn KEIN Fehler aufgetreten ist. Diese Teile gehören in einen else-Block.
  • Wenn ein Codeblock in mehreren try-Blöcken enthalten sein müsste: Verwenden Sie stattdessen einen try-Block mit mehreren except-Blöcken und einem else-Block!

Testen Sie Ihren Code mit einigen Beispielen. Wenn Ihre Funktion richtig funktioniert, sollten Sie in etwa folgende Ausgaben erhalten:

  • Bei einer nicht existierenden Datei, z.B. messreihen_existiertnicht.txt:

    In [1]: daten = Datei_einlesen_check("messreihen_existiertnicht.txt")
    Datei 'messreihen_existiertnicht.txt' nicht gefunden!
    In [2]: print(daten)
    {}
    
  • Mit der Testdatei messreihen_fehlerhaft_v1.txt:

    In [1]: daten = Datei_einlesen_check("messreihen_fehlerhaft_v1.txt")
    Falscher Datentyp!
    Falscher Datentyp!
    In [2]: print(daten)
    {'Messreihe 1': [20.1, 20.3, 21.0], 'Messreihe 3': [20.2, 21.2, 21.0]}
    
  • Mit der Testdatei messreihen_fehlerhaft_v2.txt:

    In [1]: daten = Datei_einlesen_check("messreihen_fehlerhaft_v2.txt")
    Falsche Trennzeichen oder falsche Anzahl von Werten!
    Falsche Trennzeichen oder falsche Anzahl von Werten!
    In [2]: print(daten)
    {'Messreihe 2': [21.5, 20.3, 19.3], 'Messreihe 3': [20.2, 21.2, 21.0]}
    

Hinweis

Bitte verwenden Sie ausschließlich die Lösungen und zur Verfügung gestellten Dateien aus TUWEL!

Hausaufgabe 7.2 (1 Punkt)

Verwenden Sie das Modul doctest, um Ihre Klasse Mitarbeiter aus Hausaufgabe 6.1 zu testen:

  1. Kopieren Sie hierfür die Lösung von Hausaufgabe 6.1 in ein neues Python-File.
  2. Schreiben Sie für alle Methoden der Klasse (also Konstruktor, get_gehalt, get_stundenlohn, gehalt_anpassung, und überladener print-Operator) jeweils einen Test. Das Testen von privaten Attributen des Konstruktors ist nicht so einfach - beschränken Sie sich beim Testen des Konstruktors daher auf die restlichen Attribute (name, arbeitszeit).
  3. Führen Sie danach den doctest im Hauptteil des Skripts aus.

Hinweis

Es wird emfphohlen die Lösung von Hausaufgabe 6.1. aus TUWEL zu verwenden.

13.8. Hausaufgabe 8

Hausaufgabe 8.1

In dieser Hausaufgabe sollen Sie eine gegebene Funktion einlesen (aus der Datei H8_1_Funktion.py in TUWEL), sowie die Bibliotheken NumPy und Matplotlib verwenden, um die Entwicklung der Inflation im Jahr 2021 und 2022 zu berechnen und grafisch darzustellen.

Hierfür steht eine Textdatei preisentwicklung.txt zur Verfügung, in der die Entwicklung des Milchpreises aus dem Supermarkt dokumentiert wurde. Jede Zeile der Textdatei enthält das Jahr, die Produktbezeichnung, sowie die Milchpreise für die Monate Jänner bis August des jeweiligen Jahres. z.B.:

2020; Milch; 1.16; 1.17; 1.18; 1.18; 1.18; 1.19; 1.19; 1.19

Gehen Sie nun wie folgt vor:

  1. Verwenden Sie die Funktion Datei_einlesen (aus H8_1_Funktion.py von TUWEL) um die Datei preisentwicklung.txt als Dictionary einzulesen. Erstellen Sie danach 3 Listen:
  • liste_2020: Enthält die Milchpreise pro Monat für das Jahr 2020
  • liste_2021: Enthält die Milchpreise pro Monat für das Jahr 2021
  • liste_2022: Enthält die Milchpreise pro Monat für das Jahr 2022
  1. Wandeln Sie alle 3 Listen in NumPy-Arrays um und speichern Sie sie als array_2020, array_2021, array_2022. Importieren Sie dafür die entsprechende Bibliothek.

  2. Berechnen Sie nun die Inflationsrate für jedes Monat des Jahres 2022 und speichern Sie das Ergebnis als NumPy-Array inflation_2022. Die Inflationsrate jedes Monats ergibt sich aus der Preissteigerung im Vergleich zum selben Monat des Vorjahres in Prozent (z.B. inflation_jaenner_2022 = (preis_jaenner_2022-preis_jaenner_2021)/preis_jaenner_2021*100 ). Versuchen Sie, das neue Array komplett ohne zusätzliche Funktionen oder Schleifen zu berechnen! inflation_2022 sollte dann wie folgt aussehen:

    In [1]: inflation_2022
    array([ 4.01823881,  3.419808  ,  7.54386505,  6.82385029,  7.30207889,
            8.94010068, 10.3441237 ,  9.96024243])
    
  3. Berechnen Sie analog zu Schritt 3 die Inflationsrate jedes Monats des Jahres 2021 und speichern Sie das Ergebnis als NumPy-Array inflation_2021.

  4. Vergleichen Sie nun die Entwicklung der Inflationsraten grafisch, in dem Sie die Arrays inflation_2021 und inflation_2022 grafisch darstellen. Verwenden Sie dafür die plot Funktion der Bibliothek matplotlib (siehe Kapitel 12.2. im Skriptum). Ihr Ergebnis sollte dann in etwa wie folgt aussehen:

_images/HUE8_1_plot.png

Hinweis

Um die Bezeichnungen der Monate auf der x-Achse einzufügen, können Sie eine Liste monate erstellen, die die Bezeichnungen der Monate als strings beinhaltet, und der plot Funktion als erstes Argument übergeben.