{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Übungsblatt 8: Klassen" ] }, { "cell_type": "markdown", "metadata": { "deletable": false }, "source": [ "*Schreiben Sie in dieses Feld Ihren Vornamen, Namen und Matrikelnummer.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Wichtige Hinweise\n", "\n", "* 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. \n", "* Sie dürfen keine externen Bibliotheken verwenden" ] }, { "cell_type": "markdown", "metadata": { "deletable": false }, "source": [ "#### Uebung 1: Definition einer Klasse (5 Punkte)\n", "\n", "* Definieren Sie eine Klasse mit dem Namen```Temperature```. \n", "* 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. \n", "* 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. \n", "* 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. \n", "* 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. " ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "deletable": false, "exercise_id": 1 }, "outputs": [], "source": [ "# Ihre Lösung" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Uebung 2: Methoden definieren (2 Punkte)\n", "\n", "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. \n", "\n", "Hinweis: Brüche multiplizieren Sie, indem Sie einfach Zähler und Nenner multiplizieren. Sie müssen den Bruch nicht kürzen. " ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "deletable": false, "exercise_id": 2 }, "outputs": [], "source": [ "class Fraction:\n", " def __init__(self, numerator, denominator):\n", " self.numerator = numerator\n", " self.denominator = denominator" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Uebung 3: Arbeiten mit Objekten (2 Punkte)\n", "\n", "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." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "deletable": false, "exercise_id": 3 }, "outputs": [], "source": [ "class Article:\n", " def __init__(self, name, price, number_of_pieces):\n", " self.name = name\n", " self.price = price\n", " self.number_of_pieces = number_of_pieces\n", "\n", "def compute_total_price(list_of_articles):\n", " pass # Ersetzen Sie pass durch Ihre Lösung\n", "\n", "\n", "# Der folgende Testfalls sollte 11 ergeben\n", "shopping_cart = [Article(\"shampoo\", 3.50, 2), Article(\"bread\", 4.0, 1)]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Uebung 4: Gleichheit von Objekten (1 Punkt)\n", "\n", "Gegeben ist die Klasse ```Vector``` sowie zwei Instanzen ```v1``` und ```v2```. \n", "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. " ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "deletable": false, "exercise_id": 4 }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n" ] } ], "source": [ "class Vector: \n", " def __init__(self, x, y):\n", " self.x = x\n", " self.y = y\n", " \n", "v1 = Vector(3, 4)\n", "v2 = Vector(3, 4)\n", "print(v1 == v2)" ] } ], "metadata": { "celltoolbar": "Edit Metadata", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" }, "notebook_id": 8, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": false, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": false, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }