forked from tdwojak/Python2017
112 lines
4.3 KiB
Python
112 lines
4.3 KiB
Python
#!/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 wyjątku, który zostaje wyrzucony, jeżeli dodawany punkt ma inny wymiar niż 3."""
|
|
pass
|
|
|
|
|
|
def is_numeric(x):
|
|
"""funkcja sprawdzajca czy każdy element z przekazanej listy zawiera tylko liczby"""
|
|
for i in x:
|
|
if (isinstance(i, (int, float)) == True):
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
|
|
class Point(object):
|
|
"""Klasa reprezentujaca punkt"""
|
|
lista_pktow = []
|
|
|
|
def __init__(self, coordinates=list):
|
|
"""Inicjalizator punktu przyjmuje jako parametr 3-elementowa liste koordynatow"""
|
|
if isinstance(coordinates, list):
|
|
if len(coordinates) == 3:
|
|
if not is_numeric(coordinates):
|
|
#jesli koordynaty nie zawieraja wartosci liczbowych zostaje wyrzucony wyjatek
|
|
raise Exception('Lista zawiera wartosci nieliczbowe')
|
|
|
|
else:
|
|
#atrybuty klasy Punkt: coordinates (lista wspolrzednych [x,y,z]); x ; y; z
|
|
self.coordinates = coordinates
|
|
self.x = coordinates[0]
|
|
self.y = coordinates[1]
|
|
self.z = coordinates[2]
|
|
self.lista_pktow.append(self.coordinates)
|
|
else:
|
|
# jesli punkt ma inny wymiar zostaje wyrzucony wyjatek
|
|
raise DimensionError('Wspolrzedne musza miec 3 wymiary!')
|
|
|
|
else:
|
|
print('parametrem musi byc lista!')
|
|
|
|
def add(punkt1, punkt2):
|
|
"""metoda add dodaje wspolrzedne obiektow typu punkt i dodaje nowy obiekt punkt"""
|
|
punkt3 = []
|
|
if not isinstance(punkt1, Point):
|
|
if not isinstance(punkt2, Point):
|
|
#jesli parametry metody add nie sa obiektami typu punkt zostaje wyrzucony komunikat
|
|
print('zly typ parametru! - parametrem musi byc obiekt typu Punkt')
|
|
else:
|
|
print('zly typ parametru! - parametrem musi byc obiekt typu Punkt')
|
|
else:
|
|
if punkt1.coordinates and punkt2.coordinates in Point.lista_pktow:
|
|
#jesli parametry metody add sa obiektami typu punkt - wspolrzedne x,y,z sa sumowane i zostaje zwracany nowy obiekt typu punkt
|
|
|
|
punkt3.append(punkt1.x+punkt2.x)
|
|
punkt3.append(punkt1.y+punkt2.y)
|
|
punkt3.append(punkt1.z+punkt2.z)
|
|
return Point(punkt3)
|
|
|
|
else:
|
|
print('Nie ma takich punktow!')
|
|
|
|
def __len__(self):
|
|
"""metoda len zwraca liczbe wspolrzednych - zawsze bedzie 3 bo tak zostalo zdefiniowane w inicjalizatorze"""
|
|
return len(self.coordinates)
|
|
|
|
def to_string(self):
|
|
"""metoda to_strng przedstawia wspolrzedne w czytelnej postaci"""
|
|
return (f'Koordynaty punktu: [{self.x}, {self.y}, {self.z}]')
|
|
|
|
def __str__(self):
|
|
"""Wyświetla obiekt typy Point korzystając z funkcji print"""
|
|
return self.to_string()
|
|
|
|
|
|
|
|
print('-------')
|
|
punkta = Point([1,5,6])
|
|
print(punkta.coordinates)
|
|
print(Point.lista_pktow)
|
|
punktb =Point([1,-3,-2])
|
|
print(punktb.coordinates)
|
|
print(Point.lista_pktow)
|
|
|
|
print(punkta.__len__())
|
|
print(punkta.z)
|
|
print('-------')
|
|
punkt3 = Point.add(punkta,punktb)
|
|
print(punkt3.coordinates)
|
|
print(punkt3.z)
|
|
print(Point.add(punkta,punktb))
|
|
print('-------')
|
|
|
|
print(Point.lista_pktow)
|
|
|
|
print(punkta.to_string())
|
|
print(punktb)
|
|
print(punkta)
|
|
|