Форум сайта python.su
0
Разработать систему «Автобаза».
Диспетчер распределяет заявки на Рейсы между Водителями и назначает для этого Автомобиль.
Водитель может сделать заявку на ремонт. Диспетчер может отстранить Водителя от работы.
Водитель делает отметку о выполнении Рейса и состоянии Автомобиля.
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)
Офлайн
186
> Не много ли классов я создал? Можно ли упростить код?
Не много, но сделал ты их не правильно.
1) Не надо создавать атрибуты класса и потом их переопределять.
2) Не существует класса для заявки
3) У класса Reys должны быть атрибуты с временем начала и продолжительностью рейса.
4) За водителем должна закрепляться машина, по этому он должен агрегировать экземпляр класса Car.
5) Водителю должен назначаться рейс, по этому он должен агрегировать экземпляр класса Reys.
6) Записью voditel.disqualify = True ты отправляешь всех водителей в вытрезвитель. Не надо так делать!
Офлайн
0
Спасибо. Буду разбираться
Офлайн
0
1. Атрибуты классов убрал
2. Класс заявки сделал.
3. атрибуты по времени сделал
4. Не совсем пойму что тут и в следующем совете мне надо сделать (можно на моем примере показать)?
6. Тут я мануально использую в мною выбранном рейсе этот метод. Согласен, не очень правильно. Но мне надо показать что такая возможность есть. Вот я и показал :-)
Офлайн
186
> 4. Не совсем пойму что тут и в следующем совете мне надо сделать (можно на моем примере показать)?
Агрегация это когда один объект содержит другие объекты.
class Voditel: def setAvto(self, avto): self._avto = avto def getAvto(self): return self._avto
Офлайн
294
VasiliyArmavir Если в вашем классе всего один метод __init__ то класс вам не нужен. Классы Car и Reys содержат только метод __init__ , их можно вполне заменить словарями.
Класс Operator не содержит никаких данных, только методы которые оперируют передаными аргументами. Следовательно он тоже не нужен, а методы можно заменить простыми процедурами.
[code python][/code]
Офлайн