SHARE
TWEET

Untitled

a guest Aug 23rd, 2019 80 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from abc import ABC, abstractmethod     # не може да се създават обекти от абстрактни класове
  2.  
  3.  
  4.  
  5. class Apartment(ABC):    #наследява абстрактния клас
  6.     def __init__(self, id, rooms, baths, square_meters, price):
  7.         self.id = id
  8.         self.rooms = int(rooms)
  9.         self.baths = int(baths)
  10.         self.square_meters = float(square_meters)
  11.         self.price = float(price)
  12.         self.is_taken = False  # в началото е незает
  13.  
  14.     @abstractmethod  #абстрактният клас трябва да има поне един абстрактен метод, ако вкараш , вдигнеш инстанция a = Apartment(id, rooms) дава ти нужната грешка, че не може да инстанцираш обект от абстрактен клас с абстрактен метод
  15.     def __str__(self):    # string метода трябва да се презапише от нормалните класове, ако не - a = LivingApartment(Apartment) пак хвърля грешката за абстрактен клас
  16.         return f"{self.rooms} rooms place with {self.baths} bathroom/s.\n{self.square_meters} sq. meters for {self.price} lv." #на нов ред \n
  17.  
  18.  
  19. class LivingApartment(Apartment):
  20.     def __init__(self, id, rooms, baths, square_meters, price):
  21.         Apartment.__init__(self, id, rooms, baths, square_meters, price) # на бащата инит, иначе долу гърми място в паметта, няма ги стойностите
  22.  
  23.     def __str__(self):                   # в наследниците се презаписва стринг метода от абстрактния клас
  24.         return Apartment.__str__(self)  # ако няма ритърн дава грешка за стринг
  25.  
  26.  
  27. class OfficeApartment(Apartment):
  28.     def __init__(self, id, rooms, baths, square_meters, price):
  29.         Apartment.__init__(self, id, rooms, baths, square_meters, price)
  30.  
  31.     def __str__(self):
  32.         return Apartment.__str__(self)
  33.  
  34.  
  35. data = input()
  36. apartments_list = []
  37.  
  38. while not data == "start_selling":
  39.     try:
  40.         current_app = eval(data)
  41.         apartments_list.append(current_app)
  42.     except Exception as ex:
  43.         print(ex)
  44.  
  45.     data = input()
  46.  
  47. data_list = input().split()
  48. ids_list = list(map(lambda a: a.id, apartments_list)) #лист от id-tata от апртментслист, вадя апартамент
  49.  
  50. while not (data_list[0] == "free" or data_list[0] == "taken"):  #задължително трябва да е в скоби, иначе за taken няма да работи
  51.     command = data_list[0]
  52.     id = data_list[1]
  53.  
  54.     if id in ids_list:
  55.         current_app: Apartment = list(filter(lambda a: a.id == id, apartments_list))[0]  #минавам по всички апартаменти, търси дали го има това id, може и да е без : Apartment ще върви по същия начин, това е само за интелисенса да ти покаже пропъртитата
  56.         if current_app.is_taken:
  57.             print(f"Apartment with id - {id} is already taken!")
  58.         elif command == "rent" and isinstance(current_app, LivingApartment): # връща true или false , обект и клас му се подава, слага се класа за който се смята, че ще хвърли грешка
  59.             print(f"Apartment with id - {id} is only for selling!")
  60.         elif command == "buy" and isinstance(current_app, OfficeApartment):
  61.             print(f"Apartment with id - {id} is only for renting!")
  62.         else:
  63.             current_app.is_taken = True
  64.     else:
  65.         print(f"Apartment with id - {id} does not exist!")
  66.  
  67.     data_list = input().split()
  68.  
  69. if data_list[0] == 'taken':
  70.     taken_ap_list = list(filter(lambda a: a.is_taken == True, apartments_list))
  71.     for apartment in sorted(taken_ap_list, key=lambda a: (a.price, -a.square_meters)): # за цифри десендинг низходящо може с минус отпред
  72.         print(apartment)
  73.  
  74. elif data_list[0] == 'free':
  75.     taken_ap_list = list(filter(lambda a: a.is_taken == False, apartments_list))
  76.     for apartment in sorted(taken_ap_list, key=lambda a: (-a.price, a.square_meters)):
  77.         print(apartment)
  78.  
  79. if len(taken_ap_list) == 0:
  80.     print("No information for this query")
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top