Created
January 6, 2019 18:59
-
-
Save thehappydinoa/23db0fa71b62387a3e2fc895e6b95e80 to your computer and use it in GitHub Desktop.
Swimmers written in Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class School(object): | |
def __init__(self, full_name, short_name): | |
self.full = full_name | |
self.short = short_name | |
class Swimmer(object): | |
def __init__(self, name, school): | |
self.name = name | |
self.school = school | |
self.times = dict() | |
def add_time(self, event_time): | |
self.times[event_time.event_id] = event_time | |
def best_time(self): | |
if len(self.times) > 0: | |
return self.times.sort()[0] | |
return | |
def get_time(self, event_id): | |
return self.times.get(event_id) | |
class EventTime(object): | |
def __init__(self, event_id, time): | |
# ID of event | |
self.event_id = event_id | |
# time in seconds | |
self.time = time | |
def __eq__(self, other): | |
# Equal | |
if isinstance(other, self.__class__): | |
return self.time == other.time | |
return False | |
def __ne__(self, other): | |
# Not Equal | |
if isinstance(other, self.__class__): | |
return self.time != other.time | |
return True | |
def __lt__(self, other): | |
# Less Than | |
assert isinstance(other, self.__class__) | |
return self.time < other.time | |
def __le__(self, other): | |
# Less Than or Equal | |
assert isinstance(other, self.__class__) | |
return self.time <= other.time | |
def __gt__(self, other): | |
# Greater Than | |
assert isinstance(other, self.__class__) | |
return self.time > other.time | |
def __ge__(self, other): | |
# Greater Than or Equal | |
assert isinstance(other, self.__class__) | |
return self.time >= other.time | |
class Event(object): | |
def __init__(self, id, distance): | |
self.id = id | |
self.distance = distance | |
self.swimmers = list() | |
def add_swimmer(self, swimmer): | |
self.swimmers.append(swimmer) | |
def add_swimmers(self, *args): | |
# Adds all arguments to swimmers | |
for swimmer in args: | |
self.add_swimmer(swimmer) | |
def add_time(self, lane, time): | |
swimmer = self.swimmers[lane] | |
swimmer.add_time(EventTime(self.id, time)) | |
def get_times(self): | |
return [swimmer.get_time(self.id).time for swimmer in self.swimmers] | |
def sort_swimmers(self, swimmer): | |
# TODO: Fix sorting | |
return swimmer.get_time(self.id).time | |
def get_best_times(self): | |
return self.swimmers.sort(key=self.sort_swimmers) | |
def get_best_swimmer(self): | |
best_times = self.get_best_times() | |
print(best_times) | |
return best_times[0] | |
if __name__ == '__main__': | |
school1 = School("Washington Lee", "WL") | |
school2 = School("Yorktown", "YT") | |
swimmer1 = Swimmer("Name1", school1) | |
swimmer2 = Swimmer("Name2", school1) | |
swimmer3 = Swimmer("Name3", school2) | |
swimmer4 = Swimmer("Name4", school2) | |
event1 = Event(1, 200) | |
event1.add_swimmers(swimmer1, swimmer2, swimmer3, swimmer4) | |
event1.add_time(0, 120) | |
event1.add_time(1, 110) | |
event1.add_time(2, 130) | |
event1.add_time(3, 150) | |
times = event1.get_times() | |
print("Times: " + str(times)) | |
winner = event1.get_best_swimmer() | |
print("Winner: " + winner.name) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment