1
0
forked from tdwojak/Python2017
Python2017/labs04/task03.py
2017-12-10 16:26:15 +01:00

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)