63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
'''
|
|
**ć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 (dwa wektory) 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):
|
|
pass
|
|
|
|
|
|
def validate_list(list_arg):
|
|
return sum([not (type(element) is int or type(element) is float) for element in list_arg]) == 0
|
|
|
|
|
|
class Point:
|
|
def __init__(self, coords):
|
|
if validate_list(coords):
|
|
self.coords = coords[:]
|
|
else:
|
|
self.coords = [0]
|
|
|
|
def add(self, point_right):
|
|
n = len(self.coords)
|
|
|
|
if n != len(point_right):
|
|
raise DimensionError("Wymiary punktów się nie zgadzają.")
|
|
|
|
return Point([self.coords[i] + point_right.coords[i] for i in range(n)])
|
|
|
|
def to_string(self):
|
|
return '(' + ', '.join(map(str, self.coords)) + ')'
|
|
|
|
def __len__(self):
|
|
return len(self.coords)
|
|
|
|
def __str__(self):
|
|
return self.to_string()
|
|
|
|
|
|
# testowanie
|
|
|
|
p1 = Point([1, 2, 3])
|
|
p2 = Point([4, 5, 6])
|
|
|
|
print(p1.to_string())
|
|
print(p2.to_string())
|
|
|
|
print(str(p1.add(p2)))
|
|
print(len(p1))
|
|
print(Point(['1']))
|
|
|
|
try:
|
|
p1.add(Point([1]))
|
|
except:
|
|
print('wyjątek')
|
|
|
|
|