diff --git a/06_OOP/Task_01.py b/06_OOP/Task_01.py new file mode 100644 index 0000000..7573dc3 --- /dev/null +++ b/06_OOP/Task_01.py @@ -0,0 +1,44 @@ +''' +Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск). +Атрибут реализовать как приватный. + +В рамках метода реализовать переключение светофора в режимы: красный, желтый, зеленый. +Продолжительность первого состояния (красный) составляет 7 секунд, второго (желтый) — 2 секунды, +третьего (зеленый) — на ваше усмотрение. + +Переключение между режимами должно осуществляться только в указанном порядке (красный, желтый, зеленый). +Проверить работу примера, создав экземпляр и вызвав описанный метод. + +Задачу можно усложнить, реализовав проверку порядка режимов, и при его нарушении выводить соответствующее +сообщение и завершать скрипт. +''' + +import time + + +class TrafficLight: + + def __init__(self): + self.__color = ['Red', 'Yellow', 'Green'] + + + def running(self, times, *time_light): + ''' + Метод запуска светофора + :param times: количество циклов работы светофора + :param *time_light: длительность (сек) свечения каждым цветом + :return: выводит на экран сообщение о цвете + ''' + n_light = 0 + for i in range(times * len(self.__color)): + # вывод на экран информации о цвете световора с определенной длительностью времени + print(self.__color[n_light]) + time.sleep(time_light[n_light]) + # счетчик порядкового номера цвета в светофоре + n_light += 1 + if n_light == len(self.__color): + n_light = 0 + + +Light_01 = TrafficLight() +Light_01.running(3, 7, 2, 3) \ No newline at end of file diff --git a/06_OOP/Task_02.py b/06_OOP/Task_02.py new file mode 100644 index 0000000..3408d25 --- /dev/null +++ b/06_OOP/Task_02.py @@ -0,0 +1,30 @@ +''' +Реализовать класс Road (дорога), в котором определить атрибуты: length (длина), width (ширина). +Значения данных атрибутов должны передаваться при создании экземпляра класса. +Атрибуты сделать защищенными. + +Определить метод расчета массы асфальта, необходимого для покрытия всего дорожного полотна. +Использовать формулу: длина * ширина * плотность * число см толщины полотна. Проверить работу метода. + +''' + + +class Road: + + def __init__(self, density, length, width, thickness): + self.density = density # плотность асфальта, кг/м3 + self.length = length # длина участка дороги, м + self.width = width # ширина участка дороги, м + self.thickness = thickness # толщина дорожного полотна, см + + def mass(self): + ''' + Метод определения массы дорожного полотна + :return: масса, тонны + ''' + return (self.length * self.width * self.thickness / 100 * self.density) / 1000 + +road_section_01 = Road(1300, 5000, 20, 5) +mass_of_road = road_section_01.mass() +print(mass_of_road) + diff --git a/06_OOP/Task_03.py b/06_OOP/Task_03.py new file mode 100644 index 0000000..5d98ce2 --- /dev/null +++ b/06_OOP/Task_03.py @@ -0,0 +1,46 @@ +''' +Реализовать базовый класс Worker (работник). +- определить атрибуты: name, surname, position (должность), income (доход); +- последний атрибут должен быть защищённым и ссылаться на словарь, содержащий +элементы: оклад и премия, например, {"wage": wage, "bonus": bonus} + +Cоздать класс Position (должность) на базе класса Worker; +- в классе Position реализовать методы получения полного имени сотрудника +(get_full_name) и дохода с учётом премии (get_total_income); +- проверить работу примера на реальных данных: создать экземпляры класса Position, +передать данные, проверить значения атрибутов, вызвать методы экземпляров. +''' + + + + +class Worker: + + def __init__(self, name, surname, position, wage, bonus): + self.name = name # имя + self.surname = surname # фамилия + self.position = position # должность + self._income = {'wage': wage, 'bonus': bonus} # доход + + + +class Position(Worker): + + def get_full_name(self): # полное имя сотрудника + return f'{self.name} {self.surname}' + + def get_total_income(self): # сумма зарплаты и премии + return self._income['wage'] + self._income['bonus'] + + + + +max = Position('Max', 'Jason', 'Head of department', 7000, 2000) # создаю экземпляр класса +print(max.__dict__) # проверяю значения атрибутов + +full_name_max = max.get_full_name() # применяю метод для вывода полного имени работника +print(full_name_max) + +salary_max = max.get_total_income() # применяю метод расчета суммарного дохода +print(salary_max) + diff --git a/06_OOP/Task_04.py b/06_OOP/Task_04.py new file mode 100644 index 0000000..6a7b623 --- /dev/null +++ b/06_OOP/Task_04.py @@ -0,0 +1,103 @@ +''' +Реализуйте базовый класс Car: +- у класса должны быть следующие атрибуты: speed, color, name, is_police (булево). А также методы: go, stop, +turn(direction), которые должны сообщать, что машина поехала, остановилась, повернула (куда); +- опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar; +- добавьте в базовый класс метод show_speed, который должен показывать текущую +скорость автомобиля; +- для классов TownCar и WorkCar переопределите метод show_speed. При значении скорости свыше 60 (TownCar) и +40 (WorkCar) должно выводиться сообщение о превышении скорости. + +Создайте экземпляры классов, передайте значения атрибутов. Выполните доступ к атрибутам, выведите результат. +Вызовите методы и покажите результат. +''' + +class Car: + + def __init__(self, speed, color, name, is_polise): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_polise + + def go(self): + print(f'Автомобиль {self.name} поехал') + + def stop(self): + print(f'Автомобиль {self.name} остановился') + + def turn(self, direction): + print(f'Автомобиль {self.name} повернул на {direction}') + + def show_speed(self): + print(f'У водителя {self.name} текущая скорость {self.speed}') + + +class TownCar(Car): + + max_speed = 60 # можно ли по ходу выполнения программы переназначить этот параметр??? + + def __init__(self, speed, color, name, is_polise, invalid): + Car.__init__(self, speed, color, name, is_polise) + self.invalid = invalid + + def show_speed(self): + if self.speed <= TownCar.max_speed: + print(f'У водителя {self.name} текущая скорость {self.speed}') + else: + print(f'У водителя {self.name} превышение скорости!!! Допустимая скорость {TownCar.max_speed}') + + +class WorkCar(Car): + + max_speed = 40 + + def __init__(self, speed, color, name, is_polise, loaded): + Car.__init__(self, speed, color, name, is_polise) + self.loaded = loaded + + def show_speed(self): + if self.speed <= WorkCar.max_speed: + print(f'У водителя {self.name} текущая скорость {self.speed}') + else: + print(f'У водителя {self.name} превышение скорости!!! Допустимая скорость {WorkCar.max_speed}') + + +class SportCar(Car): + + def __init__(self, speed, color, name, is_polise, brand): + Car.__init__(self, speed, color, name, is_polise) + self.brand = brand + + +class PoliseCar(Car): + + def __init__(self, speed, color, name, is_polise, on_line): + Car.__init__(self, speed, color, name, is_polise) + self.on_line = on_line + + def signal(self): + print(f'Полицейская машина {self.name} включила проблесковые маячки') + + +max_car = TownCar(40, 'yellow', 'Max', False, False) +kate_car = WorkCar(60, 'yellow', 'Kate', False, False) +jack_car = SportCar(120, 'yellow', 'Jack', False, 'BMW') +tom_car = PoliseCar(40, 'yellow', 'Tom', True, False) + +print(max_car.__dict__) +print(kate_car.__dict__) +print(jack_car.__dict__) +print(tom_car.__dict__) + +print('-' * 100) + +max_car.go(), kate_car.go(), jack_car.go() +max_car.show_speed(), kate_car.show_speed(), jack_car.show_speed() +tom_car.go(), tom_car.signal() +kate_car.turn('Left'), jack_car.turn('Left'), tom_car.turn('Left') +kate_car.stop(), jack_car.stop(), tom_car.stop() + + + + diff --git a/06_OOP/Task_05.py b/06_OOP/Task_05.py new file mode 100644 index 0000000..920e165 --- /dev/null +++ b/06_OOP/Task_05.py @@ -0,0 +1,46 @@ +''' +Реализовать класс Stationery (канцелярская принадлежность). +- определить в нём атрибут title (название) и метод draw (отрисовка). Метод выводит сообщение «Запуск отрисовки»; +- создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер); +- в каждом классе реализовать переопределение метода draw. Для каждого класса +метод должен выводить уникальное сообщение; +- создать экземпляры классов и проверить, что выведет описанный метод для каждого +экземпляра. +''' + +class Stationery(): + + def __init__(self, title): + self.title = title + + 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('Запуск отрисовки маркером') + + +my_pen = Pen('Red color pen') +my_pencil = Pencil('Sample pencil') +my_handle = Handle('Greed handle') + +my_pen.draw() +my_pencil.draw() +my_handle.draw() + +