Advertisement
simeonshopov

Zoo

Jul 10th, 2020
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.62 KB | None | 0 0
  1. class Zoo:
  2.     def __init__(self, name: str, budget: int, animal_capacity: int, workers_capacity: int):
  3.         self.name = name
  4.         self.animals = []
  5.         self.workers = []
  6.         self.__budget = budget
  7.         self.__animal_capacity = animal_capacity
  8.         self.__workers_capacity = workers_capacity
  9.  
  10.     def add_animal(self, animal, price):
  11.         enough_money = price <= self.__budget
  12.         enough_space = len(self.animals) < self.__animal_capacity
  13.         if enough_money and enough_space:
  14.             self.animals.append(animal)
  15.             self.__budget -= price
  16.             return f'{animal.name} the {animal.__class__.__name__} added to the zoo'
  17.         if not enough_money and enough_space:
  18.             return 'Not enough budget'
  19.         else:
  20.             return 'Not enough space for animal'
  21.  
  22.     def hire_worker(self, worker):
  23.         enough_space = len(self.workers) < self.__workers_capacity
  24.         if enough_space:
  25.             self.workers.append(worker)
  26.             return f'{worker.name} the {worker.__class__.__name__} hired successfully'
  27.         return 'Not enough space for worker'
  28.  
  29.     def fire_worker(self, worker_name):
  30.         if worker_name in [w.name for w in self.workers]:
  31.             worker = [w for w in self.workers if w.name == worker_name][0]
  32.             self.workers.remove(worker)
  33.             return f'{worker_name} fired successfully'
  34.         return f'There is no {worker_name} in the zoo'
  35.  
  36.     def pay_workers(self):
  37.         total_salaries = sum(w.salary for w in self.workers)
  38.         if total_salaries <= self.__budget:
  39.             self.__budget -= total_salaries
  40.             left_budget = self.__budget
  41.             return f'You payed your workers. They are happy. Budget left: {left_budget}'
  42.         return 'You have no budget to pay your workers. They are unhappy'
  43.  
  44.     def tend_animals(self):
  45.         total_expenses = sum([a.get_needs() for a in self.animals])
  46.         if total_expenses <= self.__budget:
  47.             self.__budget -= total_expenses
  48.             left_budget = self.__budget
  49.             return f'You tended all the animals. They are happy. Budget left: {left_budget}'
  50.         return 'You have no budget to tend the animals. They are unhappy.'
  51.  
  52.     def profit(self, amount):
  53.         self.__budget += amount
  54.  
  55.     def animals_status(self):
  56.         lions = [a for a in self.animals if a.__class__.__name__ == 'Lion']
  57.         tigers = [a for a in self.animals if a.__class__.__name__ == 'Tiger']
  58.         cheetahs = [a for a in self.animals if a.__class__.__name__ == 'Cheetah']
  59.         lions_info = '\n'.join([a.__repr__() for a in lions])
  60.         tigers_info = '\n'.join([t.__repr__() for t in tigers])
  61.         cheetahs_info = '\n'.join([c.__repr__() for c in cheetahs])
  62.  
  63.         return f'You have {len(self.animals)} animals\n----- {len(lions)} Lions:\n{lions_info}\n' \
  64.                f'----- {len(tigers)} Tigers:\n{tigers_info}\n----- {len(cheetahs)} Cheetahs:\n{cheetahs_info}'
  65.  
  66.     def workers_status(self):
  67.         keepers = [w for w in self.workers if w.__class__.__name__ == 'Keeper']
  68.         keepers_info = '\n'.join([k.__repr__() for k in keepers])
  69.         caretakers = [w for w in self.workers if w.__class__.__name__ == 'Caretaker']
  70.         caretakers_info = '\n'.join([c.__repr__() for c in caretakers])
  71.         vets = [w for w in self.workers if w.__class__.__name__ == 'Vet']
  72.         vets_info = '\n'.join([v.__repr__() for v in vets])
  73.  
  74.         return f'You have {len(self.workers)} workers\n----- {len(keepers)} Keepers:\n{keepers_info}\n' \
  75.                f'----- {len(caretakers)} Caretakers:\n{caretakers_info}\n----- {len(vets)} Vets:\n{vets_info}'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement