Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """Train Station."""
- class Passenger:
- def __init__(self, passenger_id: str, seat: str):
- self._passenger_id = passenger_id
- self._seat = seat
- @property
- def id(self) -> str:
- return self._passenger_id
- @property
- def seat(self) -> str:
- return self._seat
- class Train:
- def __init__(self, train_id: str, carriages: int, seats_in_carriage: int):
- self._train_id = train_id
- self._carriages = carriages
- self._seats_in_carriage = seats_in_carriage
- @property
- def carriages(self) -> int:
- return self._carriages
- @property
- def train_id(self) -> str:
- return self._train_id
- @property
- def seats_in_carriage(self) -> int:
- return self._seats_in_carriage
- def get_seats_in_train(self) -> int:
- return self.carriages * self.seats_in_carriage
- def get_number_of_passengers(self) -> int:
- return len(self.seats_in_carriage)
- def get_passengers_in_carriages(self) -> dict:
- carriages = {}
- for i in range(1, self.train_id + 1):
- carriages.setdefault(str(i), [])
- for passenger in self.seats_in_carriage:
- a = {
- passenger.passenger_id,
- passenger.seat
- }
- carriages[passenger.seat.split('-')[0]].append(a)
- return carriages
- @train_id.setter
- def train_id(self, value: str):
- self.train_id = str(value)
- @carriages.setter
- def carriages(self, value: int):
- self.carriages = int(value)
- @seats_in_carriage.setter
- def seats_in_carriage(self, value: int):
- self.seats_in_carriage = int(value)
- def add_passenger(self, passenger: Passenger) -> Passenger:
- return self.Passenger(passenger)
- class TrainStation:
- def __init__(self, trains: list, passengers: list):
- self._trains = trains
- self._passengers = passengers
- def get_station_overview(self) -> list:
- return []
- def get_number_of_passengers(self):
- return self.passengers
- @property
- def passengers(self):
- return self.passengers
- @passengers.setter
- def passengers(self, value_list: list):
- self.passengers = list(value_list)
- @property
- def trains(self):
- return self._trains
- @trains.setter
- def trains(self, value_list: list):
- self.trains = list(value_list)
- if __name__ == "__main__":
- # passengers
- p1 = Passenger("10", "AA-1-0")
- p2 = Passenger("11", "AA-1-1")
- p3 = Passenger("12", "AA-1-1")
- p4 = Passenger("13", "AA-1-2")
- p5 = Passenger("14", "AA-2-5")
- p6 = Passenger("15", "AB-2-4")
- p7 = Passenger("16", "AB-10-4")
- p8 = Passenger("17", "AB-0-0")
- passengers = [p1, p2, p3, p4, p5, p6, p7, p8]
- valid_passengers = [p2, p4, p5, p6]
- # trains
- t1 = Train("AA", 5, 5)
- t2 = Train("AB", 2, 4)
- trains = [t1, t2]
- # stations
- s1 = TrainStation(trains, passengers)
- stations = [s1]
- # TEST FUNCTION
- def basic_test(testname, output, expected):
- """Compare output with expected result."""
- if output == expected:
- print(f"{testname}: PASSED")
- else:
- print(f"{testname}: FAIL\n {output} - your output \n {expected} - expected")
- # TESTS
- basic_test("init_passengers", [p.passenger_id for p in passengers],
- ['10', '11', '12', '13', '14', '15', '16', '17'])
- basic_test("init_trains", [t.train_id for t in trains], ['AA', 'AB'])
- basic_test("init_station", s1.trains, trains)
- basic_test("get_seats_in_train", [t.get_seats_in_train() for t in trains], [25, 8])
- basic_test("get_number_of_passengers", [t.get_number_of_passengers() for t in trains], [3, 1])
- # basic_test("check_for_valid_passengers", [p.passenger_id for p in s1.passengers], ['11', '13', '14', '15'])
- get_passengers_in_carriages_correct = [{'1': [p2, p4], '2': [p5], '3': [], '4': [], '5': []}, {'1': [], '2': [p6]}]
- basic_test("get_passengers_in_carriages", [t.get_passengers_in_carriages() for t in trains],
- get_passengers_in_carriages_correct)
- get_station_overview_correct = [{'train_id': 'AA', 'carriages': 5, 'seats': '3/25'},
- {'train_id': 'AB', 'carriages': 2, 'seats': '1/8'}]
- basic_test("get_station_overview", s1.get_station_overview(), get_station_overview_correct)
- basic_test("get_number_of_passengers", s1.get_number_of_passengers(), 4)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement