напиши код на Python 3 для решения задачи
На перекрёстке есть светофоры для пешеходов и светофоры для автомобилей.
Пешеходы могут переходить дорогу только по пешеходным переходам.
Пронумеруем пешеходные переходы числами от 1 до 4 так, как показано на рисунке.
Углы перекрёстка будем обозначать комбинациями цифр 12, 23, 34 и 41 — по номерам переходов, которыми можно воспользоваться, находясь на этом углу.
Для каждого перехода известно время RJ, в течение которого пешеходам горит красный свет, и время GJ, в течение которого пешеходам горит зелёный свет (J=1, 2, 3, 4). Также для каждого перехода известно время TJ
python
class TrafficLight:
def __init__(self):
self.state = "red"
2) Затем создадим класс "Crossroad", который будет представлять перекрёсток. У перекрёстка будет 4 светофора для пешеходов (pedestrian_lights) и 4 светофора для автомобилей (car_lights). У каждого светофора будет время горения красного света (RJ), время горения зелёного света (GJ) и время смены света (TJ).
python
class Crossroad:
def __init__(self):
self.pedestrian_lights = [TrafficLight() for _ in range(4)] # 4 светофора для пешеходов
self.car_lights = [TrafficLight() for _ in range(4)] # 4 светофора для автомобилей
self.RJ = [] # время горения красного света для пешеходов
self.GJ = [] # время горения зелёного света для пешеходов
self.TJ = [] # время смены света для пешеходов
3) Добавим методы для установки времени горения светофоров и для смены состояния светофоров. Определим, что состояние светофора определяется его типом и текущим временем. Кроме того, добавим метод для пешеходов "can_cross", который будет проверять, могут ли пешеходы переходить дорогу в данный момент.
python
class Crossroad:
# ...
def set_pedestrian_times(self, RJ, GJ, TJ):
self.RJ = RJ
self.GJ = GJ
self.TJ = TJ
def set_car_times(self, RJ, GJ, TJ):
# Аналогично для светофоров автомобилей
pass
def change_traffic_lights(self, time):
for i, light in enumerate(self.pedestrian_lights):
# Вычисляем текущее состояние светофора
light_type = i % 4 + 1
current_time = time % (self.RJ[light_type] + self.GJ[light_type] + self.TJ[light_type])
if current_time < self.RJ[light_type]:
light.state = "red"
elif current_time < self.RJ[light_type] + self.GJ[light_type]:
light.state = "green"
else:
light.state = "yellow"
def can_cross(self, pedestrian_light_type, time):
current_time = time % (self.RJ[pedestrian_light_type] + self.GJ[pedestrian_light_type] + self.TJ[pedestrian_light_type])
if current_time < self.GJ[pedestrian_light_type]:
return True
else:
return False
4) Протестируем нашу модель на примере.
python
crossroad = Crossroad()
crossroad.set_pedestrian_times([0, 10, 5, 15, 0], [5, 15, 0, 10, 5], [3, 2, 4, 1, 3])
time = 0
while time < 60:
crossroad.change_traffic_lights(time)
for i, light in enumerate(crossroad.pedestrian_lights):
if crossroad.can_cross(i, time):
print(f"Pedestrians can cross on crossing {i+1}")
time += 1
В данном примере мы задаём время горения светофоров для пешеходов (RJ, GJ, TJ) на перекрёстке. Затем в цикле с шагом в 1 секунду мы меняем состояние светофоров и проверяем, могут ли пешеходы переходить дорогу в данный момент. Если они могут, то выводим сообщение об этом.
Таким образом, мы реализовали модель перекрестка с использованием конечного автомата, которая позволяет определить, могут ли пешеходы переходить дорогу на данном перекрёстке в заданный момент времени.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет