Advertisement
UniQuet0p1

Untitled

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