trace = [] class Rakieta: ''' Obiekt Car opisuje nam wlasnosci samochodow. Args: masa (num): trzyma mase rakiety predkosc_maks (num): trzyma predkosc maksymalna rakiety ilosc_lotow (num): opisuje maksymalna ilosc lotow Attributes: pozycja: tu przechowujemy informacje o pozycji rakiety masa: tu przechowujemy informacje o masie rakiety predkosc_maks: tu przechowujemy informacje o predkosci maksymalnej x: tu przechowujemy informacje o pozycji x y: tu przechowujemy informacje o pozycji y ilosc_lotow: tu przechowujemy informacje o ilosci lotow paliwo: tu przechowujemy informacje o ilosci paliwa nr_seryjny: tu przechowujemy informacje o nr_seryjnym ''' nr_seryjny = 1 def __init__(self, masa, predkosc_maks, ilosc_lotow): self.pozycja = (0,0) self.masa = masa self.predkosc_maks = predkosc_maks self.x = 0 self.y = 0 self.ilosc_lotow = ilosc_lotow self.paliwo = 100 self.nr_seryjny = self.__class__.nr_seryjny self.zwieksz_nr_seryjny() def check_pos(pozycja): # nie ma self! assert isinstance(pozycja, (list, tuple)), "pos to lista lub krotka" assert len(pozycja) == 2, "pos powinna miec 2 elementy" assert all([isinstance(el, (int, float)) for el in pozycja]), "wszystkie elementy powinny byc liczbami" assert pozycja[1] >= 0, "wysokosc na jakiej jest Rakieta nie powinna byc ujemna" def zwieksz_nr_seryjny(self): if self.nr_seryjny < 99: self.__class__.nr_seryjny += 1 else: raise TypeError("Koniec produkcji") def get_masa(self): return self.masa def get_predkosc_maks(self): return self.predkosc_maks def get_pozycja(self): return (self.x , self.y) def get_ilosc_lotow(self): return self.ilosc_lotow def get_paliwo(self): return self.paliwo def get_nr_seryjny(self): return "R"+ str(self.nr_seryjny) def set_masa(self, x): if isinstance(x, (int, float)) and x > 0: self.masa = x else: raise TypeError("Masa powinna byc liczba INT lub FLOAT") def set_predkosc_maks(self, x): if isinstance(x, (int, float)) and x > 0: self.predkosc_maks = x else: raise TypeError("Predkosc maksymalna powinna byc liczba INT lub FLOAT") def set_pozycja(self, pozycja): Rakieta.check_pos(pozycja) stare_x = self.x stare_y = self.y self.pozycja = pozycja self.x = pozycja[0] self.y = pozycja[1] a = Rakieta.odleglosc_punkt(self, stare_x, stare_y)//1 roznica = self.paliwo - a Rakieta.set_paliwo(self, roznica) self.ilosc_lotow -= 1 if self.ilosc_lotow < 1: Rakieta.brak_lotu(self) return self.pozycja, trace.append((self.x, self.y)) def set_x(self, x): test_pos = x, self.pozycja[1] return self.set_pozycja(test_pos) def set_y(self, y): test_pos = self.pozycja[0], y return self.set_pozycja(test_pos) def set_ilosc_lotow(self, x): if isinstance(x, int) and x > 0: self.ilosc_lotow = x else: raise TypeError("Ilosc powinna byc liczba INT") def set_paliwo(self, x): if isinstance(x, (int, float)) and x > 0: self.paliwo = x else: self.y = 0 trace.append((self.x,self.y)) self.paliwo = 0 print(trace) raise TypeError("Koniec paliwa") def move_left(self, x): return self.set_x(self.x - x) def move_right(self, x): return self.set_x(self.x + x) def move_up(self, x): return self.set_y(self.y + x) def move_down(self, x): return self.set_y(self.y - x) def powrot(self): Rakieta.set_pozycja(self,(0,0)) def odleglosc_od_bazy(self): return ((self.x)**2 + (self.y)**2)**(1/2) def odleglosc_punkt(self, a, b): return ((a - self.x)**2 + (b - self.y)**2)**(1/2) def brak_lotu(self): self.y = 0 self.paliwo = 0 trace.append((self.x,self.y)) print(trace) raise TypeError("Brak lotow")