#!/usr/bin/env python # coding: utf-8 # # Übungsblatt 8: Klassen # *Schreiben Sie in dieses Feld Ihren Vornamen, Namen und Matrikelnummer.* # ### Wichtige Hinweise # # * Das Schlüsselwort ```pass```, welches Sie in den Übungen finden, ist eine Python-Anweisung die nichts macht. Wir nutzen diese als Platzhalter, damit sich Python nicht über eine fehlende Implementation der Funktion beschwert. Ersetzen Sie die ```pass``` Anweisung einfach durch Ihre Implementation der Methode. # * Sie dürfen keine externen Bibliotheken verwenden # #### Uebung 1: Definition einer Klasse (5 Punkte) # # * Definieren Sie eine Klasse mit dem Namen```Temperature```. # * Die Klasse soll 2 Attribute enthalten, nämlich ```value``` und ```unit```, wobei der Wert von ```value``` eine Zahl ist und der Wert von ```unit``` ein Text (wie zum Beispiel ```"Kelvin"``` oder ```"Celsius"```). Initialisieren Sie die Attribute mit einem von Ihnen gewählten Initialwert. # * Definieren Sie die Initialisierungsfunktion ```__init__``` welche ausser dem Argument ```self``` eine Temperatur sowie die Einheit entgegennimmt. Diese soll die Attribute ```value``` und ```unit``` entsprechend initialisieren. # * Definieren Sie eine Methode ```print_out``` welche den Text ```VALUE degrees UNIT``` ausgibt. Dabei steht```VALUE``` für den im Attribute ```value``` gespeicherte Wert und ```UNIT``` für den im Attribute ```unit``` gespeicherte Wert. Wenn zum Beispiel ```value``` den Wert 5 und ```unit``` den Wert ```Celsius``` hat sollte der Text ```5 degrees Celsius``` ausgegeben werden. # * Definieren Sie eine Instanz dieser Klasse, wobei Sie für ```value``` den Wert ```0``` und als Einheit ```Celsius``` wählen. Ihre Instanz soll einer Variable ```zero_degrees_celsius``` zugewiesen werden. # In[25]: # Ihre Lösung # #### Uebung 2: Methoden definieren (2 Punkte) # # Gegeben ist die Klasse ```Fraction``` die einen Bruch repräsentiert. Fügen Sie eine Methode ```multiply``` hinzu. Diese soll einen zweiten Bruch als Argument entgegennehmen und das Resultat als neuen Bruch zurückgeben. # # Hinweis: Brüche multiplizieren Sie, indem Sie einfach Zähler und Nenner multiplizieren. Sie müssen den Bruch nicht kürzen. # In[26]: class Fraction: def __init__(self, numerator, denominator): self.numerator = numerator self.denominator = denominator # #### Uebung 3: Arbeiten mit Objekten (2 Punkte) # # Zur Implementation eines Warenkorbes für eine Online-shopping App nutzen wir eine Klasse ```Article```, die wie unten angegeben definiert ist. In dieser wird zu jedem Artikel der Name, der Preis und die Stückzahl gespeichert. Implementieren Sie die Funktion ```compute_total_price```, welche eine Liste von Artikeln entgegennimmt, und den Gesamtpreis zurückgibt, der der Kunde bezahlen muss. # In[1]: class Article: def __init__(self, name, price, number_of_pieces): self.name = name self.price = price self.number_of_pieces = number_of_pieces def compute_total_price(list_of_articles): pass # Ersetzen Sie pass durch Ihre Lösung # Der folgende Testfalls sollte 11 ergeben shopping_cart = [Article("shampoo", 3.50, 2), Article("bread", 4.0, 1)] # #### Uebung 4: Gleichheit von Objekten (1 Punkt) # # Gegeben ist die Klasse ```Vector``` sowie zwei Instanzen ```v1``` und ```v2```. # Leider gibt der Vergleich ```v1 == v2``` ```False``` aus, obwohl die beiden Vektoren offensichtlich gleich sind. Korrigieren Sie die Definition der Klasse ```Vector```, so dass korrekt auf Gleichheit verglichen wird. # In[29]: class Vector: def __init__(self, x, y): self.x = x self.y = y v1 = Vector(3, 4) v2 = Vector(3, 4) print(v1 == v2)