diff --git a/lesson_6/hw01_6.py b/lesson_6/hw01_6.py new file mode 100644 index 0000000..99888c0 --- /dev/null +++ b/lesson_6/hw01_6.py @@ -0,0 +1,33 @@ +# Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск). +# Атрибут реализовать как приватный. В рамках метода реализовать переключение светофора в режимы: красный, желтый, +# зеленый. Время перехода между режимами должно составлять 7 и 2 секунды. +# Проверить работу примера, создав экземпляр и вызвав описанный метод. + + +import time + +class TrafficLight: + __color = None + + def running(self): + time_to_start = time.time() + current_time = None + __color = 'красный' + print(f'Режим светофора: {__color}') + + while __color != 'зеленый': + current_time = time.time() + if current_time - time_to_start == 1: + print(time.time()) + + if current_time - time_to_start >= 7 and __color == 'красный': + __color = 'желтый' + print(f'Режим светофора: {__color}') + time_to_start = time.time() + elif current_time - time_to_start >= 2 and __color == 'желтый': + __color = 'зеленый' + print(f'Режим светофора: {__color}') + + +light = TrafficLight() +light.running() diff --git a/lesson_6/hw02_6.py b/lesson_6/hw02_6.py new file mode 100644 index 0000000..dcbea60 --- /dev/null +++ b/lesson_6/hw02_6.py @@ -0,0 +1,25 @@ +# Реализовать класс Road (дорога), в котором определить атрибуты: length (длина), width (ширина). +# Значения данных атрибутов должны передаваться при создании экземпляра класса. Атрибуты сделать защищенными. +# Определить метод расчета массы асфальта, необходимого для покрытия всего дорожного полотна. +# Использовать формулу: длина*ширина*масса асфальта для покрытия одного кв метра дороги асфальтом, +# толщиной в 1 см*число см толщины полотна. Проверить работу метода. +# Например: 20м*5000м*25кг*5см = 12500 т + +# замечу, что формула в примере расчета некорректная, поскольку 5см необходимо перевести в метры, что мы и сделаем + + +class Road: + _length: int + _width: int + + def __init__(self, length, width): + self._length = length + self._width = width + + def get_quantity(self, thickness): + quantity = self._length * self._width * 25 * thickness / 1000 + print(f'Масса асфальта: {self._length}м * {self._width}м * 25кг * {thickness}м = {quantity} тонн') + + +road = Road(5000, 20) +road.get_quantity(0.05) diff --git a/lesson_6/hw03_6.py b/lesson_6/hw03_6.py new file mode 100644 index 0000000..d133793 --- /dev/null +++ b/lesson_6/hw03_6.py @@ -0,0 +1,39 @@ +# Реализовать базовый класс Worker (работник), в котором определить атрибуты: name, surname, position (должность), +# income (доход). Последний атрибут должен быть защищенным и ссылаться на словарь, содержащий элементы: оклад и премия, +# например, {"profit": profit, "bonus": bonus}. Создать класс Position (должность) на базе класса Worker. +# В классе Position реализовать методы получения полного имени сотрудника (get_full_name) и дохода с учетом премии +# (get_full_profit). Проверить работу примера на реальных данных (создать экземпляры класса Position, +# передать данные, проверить значения атрибутов, вызвать методы экземпляров). + + +class Worker: + name: str + surname: str + position: str + _income: dict + + def __init__(self, name, surname, position, profit, bonus): + self.name = name + self.surname = surname + self.position = position + self._income = {'profit': profit, 'bonus': bonus} + + +class Position(Worker): + + def __init__(self, name, surname, position, profit, bonus): + super().__init__(name, surname, position, profit, bonus) + + def get_full_name(self): + print(f'Полное имя сотрудника: {self.name} {self.surname}') + + def get_full_profit(self): + full_profit = 0 + for key, value in self._income.items(): + full_profit += value + print(f'Доход с учетом премии: {full_profit}') + + +position_test = Position('Андрей', 'Иванов', 'менеджер', 400, 100) +position_test.get_full_name() +position_test.get_full_profit() diff --git a/lesson_6/hw04_6.py b/lesson_6/hw04_6.py new file mode 100644 index 0000000..7fce106 --- /dev/null +++ b/lesson_6/hw04_6.py @@ -0,0 +1,66 @@ +# Опишите несколько классов: TownCar, SportCar, WorkCar, PoliceCar. У каждого класса должны быть следующие атрибуты: +# speed, color, name, is_police (булево). А также несколько методов: go, stop, turn(direction), которые должны +# сообщать, что машина поехала, остановилась, повернула (куда). + + +class Car: + speed: int + color: int + name: int + is_police: bool + + def __init__(self, speed, color, name, is_police): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + def go(self): + print(f'Машина поехала со скоростью {self.speed}') + + def stop(self): + print('Машина остановилась') + + def turn(self, direction:str): + print(f'Машина поворачивает {direction}') + + +class TownCar(Car): + + def __init__(self, speed, color, name, is_police=False): + super().__init__(speed, color, name, is_police) + + +class SportCar(Car): + + def __init__(self, speed, color, name, is_police=False): + super().__init__(speed, color, name, is_police) + + +class WorkCar(Car): + + def __init__(self, speed, color, name, is_police=False): + super().__init__(speed, color, name, is_police) + + +class PoliceCar(Car): + + def __init__(self, speed, color, name, is_police=True): + super().__init__(speed, color, name, is_police) + + +towncar = TownCar(300, 'Красный', 'Мазератти') +towncar.go() +print(type(towncar)) + +sportcar = SportCar(400, 'Белый', 'Феррари') +sportcar.stop() +print(type(sportcar)) + +workcar = WorkCar(120, 'Синий', 'Киа') +workcar.turn('направо') +print(type(sportcar)) + +policecar = PoliceCar(400, 'Бело-синий', 'Додж') +policecar.go() +print(type(policecar)) diff --git a/lesson_6/hw05_6.py b/lesson_6/hw05_6.py new file mode 100644 index 0000000..72d8f87 --- /dev/null +++ b/lesson_6/hw05_6.py @@ -0,0 +1,37 @@ +# Реализовать класс Stationery (канцелярская принадлежность). Определить в нем атрибут title (название) и метод draw +# (отрисовка). Метод выводит сообщение “Запуск отрисовки.” Создать три дочерних класса Pen (ручка), Pencil (карандаш), +# Handle (маркер). В каждом из классов реализовать переопределение метода draw. Для каждого из классов методы должен +# выводить уникальное сообщение. Создать экземпляры классов и проверить, что выведет описанный метод +# для каждого экземпляра. + + +class Stationery: + title: str + + def draw(self): + print('Запуск отрисовки') + + +class Pen(Stationery): + def draw(self): + print('Пишем ручкой. Ластиком не стирается :(') + + +class Pencil(Stationery): + def draw(self): + print('Пишем карандашом. Надо бы заточить!') + + +class Handle(Stationery): + def draw(self): + print('Пишем маркером. Очень толстая линия, стирается хуже ручки') + + +pen = Pen() +pen.draw() + +pencil = Pencil() +pencil.draw() + +handle = Handle() +handle.draw()