From 8c76a052001eb7efe6cb0610a238cad5181c7325 Mon Sep 17 00:00:00 2001 From: Tomasz Dwojak Date: Sun, 3 Dec 2017 13:05:05 +0100 Subject: [PATCH] Add labs4 --- labs04/Klasy.ipynb | 297 ++++++++++++++++++++++++++++++++++++++------- labs04/README.md | 18 +++ labs04/task01.py | 3 + labs04/task02.py | 3 + labs04/task03.py | 3 + 5 files changed, 280 insertions(+), 44 deletions(-) create mode 100644 labs04/README.md create mode 100644 labs04/task01.py create mode 100644 labs04/task02.py create mode 100644 labs04/task03.py diff --git a/labs04/Klasy.ipynb b/labs04/Klasy.ipynb index 5c34339..1cd0a99 100644 --- a/labs04/Klasy.ipynb +++ b/labs04/Klasy.ipynb @@ -9,11 +9,11 @@ } }, "source": [ - "# Wprowadzenie do Pythona: część 2\n", + "# Wprowadzenie do Pythona: Klasy\n", "\n", "## Tomasz Dwojak\n", "\n", - "## 2 grudnia 2017" + "### 3 grudnia 2017" ] }, { @@ -25,9 +25,8 @@ }, "source": [ "# Plan na dziś:\n", - " * ciąg dalszy podstaw,\n", " * klasy,\n", - " * moduły," + " * wyjątki." ] }, { @@ -229,39 +228,13 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 4, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on class Punkt in module __main__:\n", - "\n", - "class Punkt(builtins.object)\n", - " | Klasa reprezentująca punkt w 2D.\n", - " | \n", - " | Methods defined here:\n", - " | \n", - " | __init__(self, x, y)\n", - " | opis argumentów x i y.\n", - " | \n", - " | ----------------------------------------------------------------------\n", - " | Data descriptors defined here:\n", - " | \n", - " | __dict__\n", - " | dictionary for instance variables (if defined)\n", - " | \n", - " | __weakref__\n", - " | list of weak references to the object (if defined)\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "class Punkt(object):\n", " \"\"\"Klasa reprezentująca punkt w 2D.\"\"\"\n", @@ -273,7 +246,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 5, "metadata": { "slideshow": { "slide_type": "slide" @@ -326,7 +299,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 6, "metadata": { "slideshow": { "slide_type": "slide" @@ -340,7 +313,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__parse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__parse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: 'Parser' object has no attribute '__parse'" ] } @@ -367,7 +340,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 7, "metadata": { "slideshow": { "slide_type": "fragment" @@ -378,9 +351,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "<__main__.Punkt object at 0x7feb78045908>\n", - "<__main__.Punkt object at 0x7feb78045828>\n", - "<__main__.Punkt object at 0x7feb780457f0>\n" + "<__main__.Punkt object at 0x7f728015b358>\n", + "<__main__.Punkt object at 0x7f728015b4a8>\n", + "<__main__.Punkt object at 0x7f728015b438>\n" ] } ], @@ -406,16 +379,252 @@ { "cell_type": "markdown", "metadata": { + "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ - "## Co zostało pominięte?\n", - " * pola klas i metody statyczne,\n", - " * dekoratory,\n", - " * mutable i immutable \n", - " " + "## Atrybuty i metody statyczne" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "0\n" + ] + } + ], + "source": [ + "class Klasa:\n", + " atrybut = 0\n", + "\n", + "klasa = Klasa()\n", + "print(Klasa.atrybut)\n", + "print(klasa.atrybut)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Jestem statyczna!\n" + ] + } + ], + "source": [ + "class Klasa:\n", + " def __init__(self):\n", + " self.t = 0\n", + " def metoda():\n", + " print(\"Jestem statyczna!\")\n", + "\n", + "Klasa.metoda()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Wyjątki" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'nieistniejący_plik.txt'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"nieistniejący_plik.txt\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplik\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mplik\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'nieistniejący_plik.txt'" + ] + } + ], + "source": [ + "with open(\"nieistniejący_plik.txt\") as plik:\n", + " content = plik.read()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "try:\n", + " with open(\"nieistniejący_plik.txt\") as plik:\n", + " content = plik.read()\n", + "except FileNotFoundError:\n", + " contenct = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warning [Errno 2] No such file or directory: 'nieistniejący_plik.txt'\n" + ] + } + ], + "source": [ + "try:\n", + " with open(\"nieistniejący_plik.txt\") as plik:\n", + " content = plik.read()\n", + "except FileNotFoundError as e:\n", + " print(\"Warning {}\".format(e))\n", + " contenct = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warning [Errno 2] No such file or directory: 'nieistniejący_plik.txt'\n" + ] + } + ], + "source": [ + "try:\n", + " with open(\"nieistniejący_plik.txt\") as plik:\n", + " content = plik.read()\n", + "except Exception as e:\n", + " print(\"Warning {}\".format(e))\n", + " contenct = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "try:\n", + " with open(\"nieistniejący_plik.txt\") as plik:\n", + " content = plik.read()\n", + "except:\n", + " contenct = \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "class Figura:\n", + " def __init__(self, vertexes):\n", + " if len(vertexes) == 0:\n", + " raise Exception(\"Empty list of vertexes\")\n", + " self.vertexes = vertexes" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "class MyError(Exception):\n", + " def __init__(self, text):\n", + " self.text = text\n", + " def __str__(self):\n", + " return self.text" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "ename": "MyError", + "evalue": "Coś poszło nie tak!", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mMyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mMyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Coś poszło nie tak!\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mMyError\u001b[0m: Coś poszło nie tak!" + ] + } + ], + "source": [ + "raise MyError(\"Coś poszło nie tak!\")" ] }, { diff --git a/labs04/README.md b/labs04/README.md new file mode 100644 index 0000000..cce5ca4 --- /dev/null +++ b/labs04/README.md @@ -0,0 +1,18 @@ +**ćwiczenie 1** +Napisz funckję ``is_numeric``, która sprawdzi, czy każdy element z przekazanej listy jest typu int lub float. Wykorzystaj funcję ``isinstance()`` (https://docs.python.org/2/library/functions.html#isinstance). + +**ćwiczenie 2** +Napisz prostą hierarchię klas: + * Klasa bazowa ``Employee``, która będzie zawierać informacje o imieniu i nazwisku pracownika. Ponadto każdy pracownik otrzyma numer ``id``, który będzie unikatowy. Wykorzystaj do tego atrybut statyczny. Napisz metodę ``get_id``, która zwraca identyfikator pracownika. + * Klasy pochodna: ``Recruiter``, która ma dodatkową mtodę ``recruit``, która jako parament przyjmuje obiekt ``Employee`` i zapisuje jego ``id`` w liście ``self.recruited``. + * Klasa pochodna ``Programmer``. Klasa ``Programmer`` ma przyjąć w konstruktorze podstawowe informacje (imię i nazwisko) oraz obiekt rekturera. Ponadto stwórz atrybut ``recruiter``, który będzie przechowywać ``id`` rekrutera. + +**ćwiczenie 3 (zadanie domowe) ** +Stwórz klasę ``Point``, która będzie reprezentować punkt w przestrzeni wielowymiarowej: + * Konstruktor ma przyjąc tylko 1 parametr: listę współrzednych. Wykorzystaj funkcję z pierwszego zadania, żeby sprawdzić, czy lista zawiera wyłącznie liczby. + * Napisz metodę add, która dida dwa punkty po współrzędnych i zwróci obiekt typu ``Punkt``. Zaimplementuj własny wyjątek ``DimensionError``, który zostaje wyrzucony, jeżeli dodawany punkt ma inny wymiar. + * Napisz metodę ``to\_string``, która zwróci łancuch znakowy, który w czytelny sposób przedstawi punkt. + * Napisz metodę __len__, która zwróci liczbę współrzędnych punktu. Zobacz, czy możesz teraz wywołać funkcję len na obiekcie typy punkt. + * Napisz metodę __str__, która bedzie działać dokładnie tak samo jak metoda ``to_string``. Wyświetl obiekt typy Point korzystając z funkcji print. + + diff --git a/labs04/task01.py b/labs04/task01.py new file mode 100644 index 0000000..88741a4 --- /dev/null +++ b/labs04/task01.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- + diff --git a/labs04/task02.py b/labs04/task02.py new file mode 100644 index 0000000..88741a4 --- /dev/null +++ b/labs04/task02.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- + diff --git a/labs04/task03.py b/labs04/task03.py new file mode 100644 index 0000000..88741a4 --- /dev/null +++ b/labs04/task03.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +