From d6f5f45c322dc934954ba48c8f9a2fd49fba4777 Mon Sep 17 00:00:00 2001 From: s45158 Date: Fri, 22 Dec 2017 07:19:02 +0100 Subject: [PATCH] zad dom lab 4 task3 --- labs04/task03.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/labs04/task03.py b/labs04/task03.py index 88741a4..dbb4a1b 100644 --- a/labs04/task03.py +++ b/labs04/task03.py @@ -1,3 +1,80 @@ #!/usr/bin/env python2 # -*- coding: utf-8 -*- +""" +**ć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. +""" + +class DimensionError(Exception): + """Klasa reprezentująca wyjątek ilości współrzędnych <> 3""" + def __init__(self, text): + self.text = text + def __str__(self): + return self.text + +class Point: + """Klasa reprezentująca punkt w 3D. + Pola publiczne: + x, y , z - współrzędne punktu w 3 D + """ + + def __is_numeric(self, my_list): + """Zwraca True jeśli podana lista argumentów ma dokładnie 3 elementy typu int lub float + argument my_list - lista 3 współrzednych liczbowych typu int lub float""" + for item in my_list: + if not (isinstance(item, int) or isinstance(item, float)): + return False + return True and len(my_list) > 0 + + def __init__(self, xyz): + """Konstruktor klasy Point + argument xyz - lista współrzędnych punktu w 3D. Musi zawierać 3 współrzędne! + """ + if not self.__is_numeric(xyz): + raise DimensionError("Invalid coordindates!. Check the numbers!") + if len(xyz) != 3: + raise DimensionError("Invalid number of coordindates! (<> 3)") + self.x = xyz[0] + self.y = xyz[1] + self.z = xyz[2] + + def to_string(self): + """Wypisuje wektor współrzędnych punktu w 3D jako string""" + return '[' + ','.join([str(self.x), str(self.y), str(self.z)]) + ']' + + + def add(oPoint1, oPoint2): + """Metoda statyczna klasy Point. Zwraca sumę współrzędnych danych 2 punktów w 3D. + arg1 - obiekt klasy Punkt + arg2 - obiekt klasy Punkt + """ + l1 = [oPoint1.x, oPoint1.y, oPoint1.z] + l2 = [oPoint2.x, oPoint2.y, oPoint2.z] + nl = [c1+c2 for c1, c2 in zip(l1, l2)] + return Point(nl) + + + def __len__(self): + """Zwraca liczbę współrzędnych = 3 bo punkt w przestrzeni 3D :-)""" + return 3 + + def __str__(self): + """Funkcja string dla klasy Point. Wypisuje współrzędne punktu jako string""" + return self.to_string() + +#################################################### + +if __name__ == "__main__": + p1 = Point([1, 2, 3]) + print('p1 =', p1) + p2 = Point([-3, 0, -2]) + print('p2 =', p2) + p3 = Point.add(p1, p2) + print('p3 = p1 (+) p2 = ', p3) \ No newline at end of file