diff --git a/labs04/task03.py b/labs04/task03.py index 88741a4..4cfd40c 100644 --- a/labs04/task03.py +++ b/labs04/task03.py @@ -1,3 +1,59 @@ #!/usr/bin/env python2 # -*- coding: utf-8 -*- + +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)