Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions homeworks/les06/task01.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
"""
1. Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск).
Атрибут реализовать как приватный. В рамках метода реализовать переключение светофора в режимы:
красный, желтый, зеленый.
Продолжительность первого состояния (красный) составляет 7 секунд, второго (желтый) — 2 секунды,
третьего (зеленый) — на ваше усмотрение.
Переключение между режимами должно осуществляться только в указанном порядке (красный, желтый, зеленый).
Проверить работу примера, создав экземпляр и вызвав описанный метод.

Задачу можно усложнить, реализовав проверку порядка режимов, и при его нарушении выводить соответствующее сообщение и
завершать скрипт.
"""
from time import sleep


class TrafficLight:
# контрольный автомат состояний
chain_states = {'красный': 'желтый', 'желтый': 'зеленый', 'зеленый': 'красный'}
chain_prev = ''

def __init__(self):
self.__color = ''

def _check_color(self, color):
is_good = False
if self.chain_prev == '':
is_good = True
else:
# контроль перехода состояний
is_good = (color == self.chain_states[self.chain_prev])
return is_good

def _run(self, color, time):
if not self._check_color(color):
print(f'Неправильная последовательность переключения {self.chain_prev}->{color}')
return False
self.chain_prev = color
self.__color = color
self._shine(time)
return True

def _shine(self, time):
print(self.__color, end='')
for _ in range(time):
sleep(1)
print('.', end='') # иммитация периода действия цвета
print('')

def running(self):
for color, time in [('красный', 7), ('желтый', 2), ('зеленый', 5), ('зеленый', 5)]:
if not self._run(color, time):
print('Установлена неправильная последовательность')
break


if __name__ == '__main__':
light_1 = TrafficLight()
light_1.running()
24 changes: 24 additions & 0 deletions homeworks/les06/task02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
"""
2. Реализовать класс Road (дорога), в котором определить атрибуты: length (длина), width (ширина).
Значения данных атрибутов должны передаваться при создании экземпляра класса.
Атрибуты сделать защищенными. Определить метод расчета массы асфальта, необходимого для покрытия всего дорожного полотна.
Использовать формулу: длина * ширина * масса асфальта для покрытия одного кв метра дороги асфальтом,
толщиной в 1 см * чи сло см толщины полотна. Проверить работу метода.
Например: 20м * 5000м * 25кг * 5см = 12500 т
"""


class Road:
_mass_asphalt_m2 = 25

def __init__(self, length, width):
self._length = length
self._width = width

def mass_asphalt(self, depth=1):
return self._length * self._width * self._mass_asphalt_m2 * depth


if __name__ == '__main__':
near_road = Road(1000, 24)
print('Масса асфальта', near_road.mass_asphalt(8))
Loading