diff --git a/src/championship/championship.py b/src/championship/championship.py index 6ea07ba..fc33220 100644 --- a/src/championship/championship.py +++ b/src/championship/championship.py @@ -1,5 +1,6 @@ from src.driver.driver import Driver from src.race.race import Race +from src.race.raceResults import RaceResults from src.series.series import Series from src.team.team import Team from typing import List @@ -18,7 +19,7 @@ def __init__(self, series: Series, year: int): self.series = series self.year = year - self.rounds = dict() # key = race: Race, value = results: List(Driver) + self.race_results = list() # list of RaceResults objects self.driver_standings = dict() self.team_standings = dict() @@ -105,36 +106,13 @@ def getTeamStandings(self) -> List: return printable - def holdRace(self, race: Race, results: List[Driver]): + def holdRace(self, race: Race, results: RaceResults): ''' holds a race and updates standings given the results param: race: Race - results: List[Driver] + results: RaceResults ''' if not isinstance(race, Race): - raise TypeError(f"{race} must be of type Race, not {type(race)}") - - if not self.rounds.get(race): - self.rounds[race] = list() - - points_system = [None, 25, 18, 15, 12, 10, 8, 6, 4, 2, 1] - - for i in range(1, 11): # only the top 10 drivers get points - if not isinstance(results[i], Driver): - raise TypeError(f"{results[i]} must be of type Driver, not {type(results[i])}") - - # update values for driver standings and team standings - - # update driver standings - - self.driver_standings[results[i]] += points_system[i] - - if results.count(results[i]) > 1: # if this driver won fastest lap - self.driver_standings[results[i]] += 1 - - # update team standings - # TODO update the team standings (stretch goal???) - - self.rounds[race] = results \ No newline at end of file + raise TypeError(f"{race} must be of type Race, not {type(race)}") \ No newline at end of file diff --git a/src/race/raceResults.py b/src/race/raceResults.py new file mode 100644 index 0000000..b5b9f45 --- /dev/null +++ b/src/race/raceResults.py @@ -0,0 +1,46 @@ +from src.driver.driver import Driver +from src.race.race import Race +from src.team.team import Team +from typing import List + +class RaceResults(): + def __init__(self, race: Race, rankings: List[Driver], fastestLap: Driver): + if not isinstance(race, Race): + raise TypeError(f"{race} must be of type Race, not {type(race)}") + if not isinstance(rankings, List): + raise TypeError(f"{rankings} must be of type List, not {type(rankings)}") + if not isinstance(fastestLap, Driver): + raise TypeError(f"{fastestLap} must be of type Driver, not {type(fastestLap)}") + + self.race = race + self.results = dict() # key = driver: Driver, value = points: int + + # calculate points + + points_system = [None, 25, 18, 15, 12, 10, 8, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + + for i in range(1,21): + if not isinstance(rankings[i], Driver): + raise TypeError(f"{rankings[i]} must be of type Driver, not {type(rankings[i])}") + + self.results[rankings[i]] = points_system[i] + + if self.results[fastestLap] > 0: # if the driver who got the fastest lap finished in the points + self.results[fastestLap] += 1 # give them an extra point for fastest lap + + + def getPointsForDriver(self, driver: Driver) -> int: + if not isinstance(driver, Driver): + raise TypeError(f"{driver} must be of type Driver, not {type(driver)}") + + return self.results[driver] + + def getPointsForTeam(self, team: Team) -> int: + if not isinstance(team, Team): + raise TypeError(f"") # TODO + + points = 0 + for driver in team.drivers: + points += self.getPointsForDriver(driver) + + return points \ No newline at end of file