forked from tdwojak/Python2017
task03 (labs04) done
This commit is contained in:
parent
2ce58cac05
commit
86c8cf7c0c
106
labs04/task03.py
106
labs04/task03.py
@ -1,3 +1,109 @@
|
||||
#!/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('-------')
|
||||
Point.add(punkta,punktb)
|
||||
print(Point.add(punkta,punktb))
|
||||
print('-------')
|
||||
|
||||
print(Point.lista_pktow)
|
||||
|
||||
print(punkta.to_string())
|
||||
print(punktb)
|
||||
print(punkta)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user