Диспетчер распределяет заявки на Рейсы между Водителями и назначает для этого Автомобиль.
Водитель может сделать заявку на ремонт. Диспетчер может отстранить Водителя от работы.
Водитель делает отметку о выполнении Рейса и состоянии Автомобиля.
class Car: """Cars in CarPark""" model = None category = None tonnaj = 0 mesto = 0 repair = True def __init__(self, model, category, tonnaj, mesto): """ Variable definition""" self.model = model self.category = category self.tonnaj = tonnaj self.mesto = mesto class Reys: """Trip information""" gruz = 0 name = None passengers = 0 parking = False def __init__(self, gruz, name, passengers): """ Variable definition""" self.gruz = gruz self.name = name self.passengers = passengers class Voditel: """Driver information""" name_driver = None category = None disqualify = False free = False def __init__(self, name_driver, category): """ Variable definition""" self.name_driver = name_driver self.category = category def remont(self, car): """ Repair need""" car.repair = False print("По машине {}, водитель {} запросил ремонт".format(car.model, self.name_driver)) def report_car(self, car): """ When reys ends, driver report about car""" if car.repair is True: print("Водитель {} отчитался, что автомобиль {} в норме".format(self.name_driver, car.model)) else: print("Водитель {} отчитался, что автомобиль {} поломан".format(self.name_driver, car.model)) def start_reys(self, reys, car): """ Reys begin""" self.free = False reys.parking = True car.repair = True print("Водитель {}, на машине {}, начал рейс {}".format(self.name_driver, car.model, reys.name)) def end_reys(self, reys, car): """ Reys end""" reys.parking = False car.repair = True self.free = True print("Водитель {}, на машине {}, закончил рейс {}".format(self.name_driver, car.model, reys.name)) class Operator: def remove_voditel(self, voditel): voditel.disqualify = True print("Водитель {}, пьян после обеда и отстранен от работы".format(voditel.name_driver)) def new_reys(self, reys, park_drivers, new_cars): for car in new_cars: if car.tonnaj >= reys.gruz and car.repair and car.mesto >= reys.passengers: my_car = car for voditel in park_drivers: if my_car.category in voditel.category and not voditel.disqualify and not voditel.free: new_voditel = voditel return new_voditel, my_car voditel_first = Voditel(name_driver="Sergey", category=["DE", "D1E"]) voditel_second = Voditel(name_driver="Stepan", category=["B", "C"]) park_drivers = [voditel_first, voditel_second] bus = Car(model="Bogdan", category="C", tonnaj=2000, mesto=10, ) trailer = Car(model="Scania", category="D1E", tonnaj=20000, mesto=2) new_cars = [bus, trailer] operator = Operator() food_reys = Reys(gruz=50, name="Lunch break", passengers=8) new_voditel, my_car = operator.new_reys(reys=food_reys, park_drivers=park_drivers, new_cars=new_cars) new_voditel.start_reys(reys=food_reys, car=my_car) new_voditel.end_reys(reys=food_reys, car=my_car) new_voditel.report_car(car=my_car) work_reys = Reys(name="Road repair", passengers=2, gruz=15000) new_voditel, my_car = operator.new_reys(reys=work_reys, park_drivers=park_drivers, new_cars=new_cars) new_voditel.start_reys(reys=work_reys, car=my_car) new_voditel.end_reys(reys=work_reys, car=my_car) new_voditel.remont(car=my_car) operator.remove_voditel(new_voditel)