Advertisement
KNenov96

PYTHON OOP 06.Formula 1 Manager

Feb 4th, 2023
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.92 KB | None | 0 0
  1. ### formula_team.py
  2. from abc import ABC
  3.  
  4.  
  5. class FormulaTeam(ABC):
  6.     def __init__(self, budget, place_prices, expenses):
  7.         self.budget = budget
  8.         self.place_price = place_prices
  9.         self.expenses = expenses
  10.  
  11.     @property
  12.     def budget(self):
  13.         return self.__budget
  14.  
  15.     @budget.setter
  16.     def budget(self, value):
  17.         if value < 1_000_000:
  18.             raise ValueError("F1 is an expensive sport, find more sponsors!")
  19.         self.__budget = value
  20.  
  21.     def calculate_revenue_after_race(self, race_pos: int):
  22.         earned_money = 0
  23.         for sponsor in self.place_price.keys():
  24.             for place in self.place_price[sponsor]:
  25.                 if race_pos <= place:
  26.                     earned_money += self.place_price[sponsor][place]
  27.                     break
  28.  
  29.         revenue = earned_money - self.expenses
  30.         self.budget += revenue
  31.         return f"The revenue after the race is {revenue}$. Current budget {self.budget}$"
  32.  
  33.    
  34.    
  35. ### red_bull_team.py
  36. from project.formula_teams.formula_team import FormulaTeam
  37.  
  38.  
  39. class RedBullTeam(FormulaTeam):
  40.     PLACE_PRICES = {"ORACLE": {1: 1_500_000, 2: 800_000},
  41.                     "HONDA": {8: 20_000, 10: 10_000}}
  42.     EXPENSES = 250_000
  43.  
  44.     def __init__(self, budget):
  45.         super().__init__(budget, self.PLACE_PRICES, self.EXPENSES)
  46.  
  47.  
  48.        
  49.        
  50. ### mercedes_team.py
  51. from project.formula_teams.formula_team import FormulaTeam
  52.  
  53.  
  54. class MercedesTeam(FormulaTeam):
  55.     PLACE_PRICES = {"Petronas": {1: 1_000_000, 2: 500_000},
  56.                     "TeamViewer": {5: 100_000, 7: 50_000}}
  57.     EXPENSES = 200_000
  58.  
  59.     def __init__(self, budget):
  60.         super().__init__(budget, self.PLACE_PRICES, self.EXPENSES)
  61.  
  62.        
  63.        
  64.        
  65. ### f1_season_app.py
  66. from project.formula_teams.mercedes_team import MercedesTeam
  67. from project.formula_teams.red_bull_team import RedBullTeam
  68.  
  69.  
  70. class F1SeasonApp:
  71.     def __init__(self):
  72.         self.red_bull_team = None
  73.         self.mercedes_team = None
  74.  
  75.     def register_team_for_season(self, team_name: str, budget: int):
  76.         if team_name == "Red Bull":
  77.             self.red_bull_team = RedBullTeam(budget)
  78.         elif team_name == "Mercedes":
  79.             self.mercedes_team = MercedesTeam(budget)
  80.         else:
  81.             raise ValueError("Invalid team name!")
  82.         return f"{team_name} has joined the new F1 season."
  83.  
  84.     def new_race_results(self, race_name: str, red_bull_pos: int, mercedes_pos: int):
  85.         if not self.red_bull_team or not self.mercedes_team:
  86.             raise Exception("Not all teams have registered for the season.")
  87.         better_team = "Red Bull" if red_bull_pos < mercedes_pos else "Mercedes"
  88.         return f"Red Bull: {self.red_bull_team.calculate_revenue_after_race(red_bull_pos)}. Mercedes: {self.mercedes_team.calculate_revenue_after_race(mercedes_pos)}." \
  89.                f" {better_team} is ahead at the {race_name} race."
  90.  
Tags: F1 Manager
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement