""" ć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 doda 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 odpowiadajaca za wyjatek 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""" def __is_numeric(self,n): for i in n: if not (isinstance(i, int) or isinstance(i,float)): return False return True and len(n) > 0 def __init__(self, xyz): """Konstruktor klasy Point, argument xyz - lista puntkwo w 3D. Warunkiem sa 3 wspolrzedne""" if not self.__is_numeric(xyz): raise DimensionError("Nieprawidlowe wspolrzedne!") if len(xyz) != 3: raise DimensionError("Nieprawidlowa liczba wspolrzednych (<> 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 liczbe wspolrzednych""" return 3 def __str__(self): """Funkcja string dla klasy Point, wypisuje wspolrzedne punktu jako string""" return self.to_string() if __name__ == "__main__": pkt1 = Point([4, 8, 12]) print('pkt1 =', pkt1) pkt2 = Point([-1, 0, 3]) print('pkt2 =', pkt2) pkt3 = Point.add(pkt1, pkt2) print('pkt3 = pkt1 (+) pkt2 = ', pkt3)