1
0
forked from tdwojak/Python2017
Python2017/labs04/task03.py

65 lines
2.7 KiB
Python
Raw Normal View History

2017-12-15 22:27:02 +01:00
""" ć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.
"""
2017-12-03 13:05:05 +01:00
2017-12-15 22:27:02 +01:00
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)