Advertisement
UniQuet0p1

Untitled

Oct 17th, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. """Train Station."""
  2.  
  3. class Passenger:
  4. def __init__(self, passenger_id: str, seat: str):
  5. self._passenger_id = passenger_id
  6. self._seat = seat
  7.  
  8. @property
  9. def id(self) -> str:
  10. return self._passenger_id
  11.  
  12. @property
  13. def seat(self) -> str:
  14. return self._seat
  15.  
  16. class Train:
  17. def __init__(self, train_id: str, carriages: int, seats_in_carriage: int):
  18. self._train_id = train_id
  19. self._carriages = carriages
  20. self._seats_in_carriage = seats_in_carriage
  21.  
  22. @property
  23. def carriages(self) -> int:
  24. return self._carriages
  25.  
  26. @property
  27. def train_id(self) -> str:
  28. return self._train_id
  29.  
  30. @property
  31. def seats_in_carriage(self) -> int:
  32. return self._seats_in_carriage
  33.  
  34. def get_seats_in_train(self) -> int:
  35. return self.carriages * self.seats_in_carriage
  36.  
  37. def get_number_of_passengers(self) -> int:
  38. return len(self.seats_in_carriage)
  39.  
  40. def get_passengers_in_carriages(self) -> dict:
  41. carriages = {}
  42.  
  43. for i in range(1, self.train_id + 1):
  44. carriages.setdefault(str(i), [])
  45. for passenger in self.seats_in_carriage:
  46. a = {
  47. passenger.passenger_id,
  48. passenger.seat
  49. }
  50. carriages[passenger.seat.split('-')[0]].append(a)
  51.  
  52. return carriages
  53.  
  54. @train_id.setter
  55. def train_id(self, value: str):
  56. self.train_id = str(value)
  57.  
  58. @carriages.setter
  59. def carriages(self, value: int):
  60. self.carriages = int(value)
  61.  
  62. @seats_in_carriage.setter
  63. def seats_in_carriage(self, value: int):
  64. self.seats_in_carriage = int(value)
  65.  
  66. def add_passenger(self, passenger: Passenger) -> Passenger:
  67. return self.Passenger(passenger)
  68.  
  69. class TrainStation:
  70. def __init__(self, trains: list, passengers: list):
  71. self._trains = trains
  72. self._passengers = passengers
  73.  
  74. def get_station_overview(self) -> list:
  75. return []
  76.  
  77. def get_number_of_passengers(self):
  78. return self.passengers
  79.  
  80. @property
  81. def passengers(self):
  82. return self.passengers
  83.  
  84. @passengers.setter
  85. def passengers(self, value_list: list):
  86. self.passengers = list(value_list)
  87.  
  88. @property
  89. def trains(self):
  90. return self._trains
  91.  
  92. @trains.setter
  93. def trains(self, value_list: list):
  94. self.trains = list(value_list)
  95.  
  96.  
  97. if __name__ == "__main__":
  98. # passengers
  99. p1 = Passenger("10", "AA-1-0")
  100. p2 = Passenger("11", "AA-1-1")
  101. p3 = Passenger("12", "AA-1-1")
  102. p4 = Passenger("13", "AA-1-2")
  103. p5 = Passenger("14", "AA-2-5")
  104. p6 = Passenger("15", "AB-2-4")
  105. p7 = Passenger("16", "AB-10-4")
  106. p8 = Passenger("17", "AB-0-0")
  107. passengers = [p1, p2, p3, p4, p5, p6, p7, p8]
  108. valid_passengers = [p2, p4, p5, p6]
  109.  
  110. # trains
  111. t1 = Train("AA", 5, 5)
  112. t2 = Train("AB", 2, 4)
  113. trains = [t1, t2]
  114.  
  115. # stations
  116. s1 = TrainStation(trains, passengers)
  117. stations = [s1]
  118.  
  119.  
  120. # TEST FUNCTION
  121. def basic_test(testname, output, expected):
  122. """Compare output with expected result."""
  123. if output == expected:
  124. print(f"{testname}: PASSED")
  125. else:
  126. print(f"{testname}: FAIL\n {output} - your output \n {expected} - expected")
  127.  
  128.  
  129. # TESTS
  130. basic_test("init_passengers", [p.passenger_id for p in passengers],
  131. ['10', '11', '12', '13', '14', '15', '16', '17'])
  132. basic_test("init_trains", [t.train_id for t in trains], ['AA', 'AB'])
  133. basic_test("init_station", s1.trains, trains)
  134. basic_test("get_seats_in_train", [t.get_seats_in_train() for t in trains], [25, 8])
  135. basic_test("get_number_of_passengers", [t.get_number_of_passengers() for t in trains], [3, 1])
  136. # basic_test("check_for_valid_passengers", [p.passenger_id for p in s1.passengers], ['11', '13', '14', '15'])
  137. get_passengers_in_carriages_correct = [{'1': [p2, p4], '2': [p5], '3': [], '4': [], '5': []}, {'1': [], '2': [p6]}]
  138. basic_test("get_passengers_in_carriages", [t.get_passengers_in_carriages() for t in trains],
  139. get_passengers_in_carriages_correct)
  140. get_station_overview_correct = [{'train_id': 'AA', 'carriages': 5, 'seats': '3/25'},
  141. {'train_id': 'AB', 'carriages': 2, 'seats': '1/8'}]
  142. basic_test("get_station_overview", s1.get_station_overview(), get_station_overview_correct)
  143. basic_test("get_number_of_passengers", s1.get_number_of_passengers(), 4)
  144.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement