forked from tdwojak/Python2017
labs04 - Praca domowa nr 2
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
This commit is contained in:
parent
d7ea17b325
commit
6a3a51aa64
@ -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ółzednych 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)
|
Loading…
Reference in New Issue
Block a user