Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 5 additions & 27 deletions src/championship/championship.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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()
Expand Down Expand Up @@ -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
raise TypeError(f"{race} must be of type Race, not {type(race)}")
46 changes: 46 additions & 0 deletions src/race/raceResults.py
Original file line number Diff line number Diff line change
@@ -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