From b92192fbbb4f964618e96151febd0430dac739ab Mon Sep 17 00:00:00 2001 From: Shirguin Date: Wed, 5 May 2021 06:54:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BC=D0=B0=D1=88=D0=BD=D0=B5?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=20?= =?UTF-8?q?=D1=88=D0=B5=D1=81=D1=82=D0=BE=D0=BC=D1=83=20=D1=83=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task_1_lesson6.py | 35 ++++++++++++++++ task_2_lesson6.py | 25 ++++++++++++ task_3_lesson6.py | 34 ++++++++++++++++ task_4_lesson6.py | 100 ++++++++++++++++++++++++++++++++++++++++++++++ task_5_lesson6.py | 50 +++++++++++++++++++++++ 5 files changed, 244 insertions(+) create mode 100644 task_1_lesson6.py create mode 100644 task_2_lesson6.py create mode 100644 task_3_lesson6.py create mode 100644 task_4_lesson6.py create mode 100644 task_5_lesson6.py diff --git a/task_1_lesson6.py b/task_1_lesson6.py new file mode 100644 index 0000000..757db41 --- /dev/null +++ b/task_1_lesson6.py @@ -0,0 +1,35 @@ +# Задание№1 +# Создать класс TrafficLight (светофор). +# определить у него один атрибут color (цвет) и метод running (запуск); +# атрибут реализовать как приватный; +# в рамках метода реализовать переключение светофора в режимы: красный, жёлтый, +# зелёный; +# продолжительность первого состояния (красный) составляет 7 секунд, второго +# (жёлтый) — 2 секунды, третьего (зелёный) — на ваше усмотрение; +# переключение между режимами должно осуществляться только в указанном порядке +# (красный, жёлтый, зелёный); +# проверить работу примера, создав экземпляр и вызвав описанный метод. +# Задачу можно усложнить, реализовав проверку порядка режимов. При его нарушении +# выводить соответствующее сообщение и завершать скрипт. + +import time + +class TrafficLight: + __color = ['красный', 'желтый', 'зеленый'] + def running(self): + print((self.__color[0])) + time.sleep(7) + print(self.__color[1]) + time.sleep(2) + print(self.__color[2]) + time.sleep(5) + + +tl = TrafficLight() +tl.running() + +''' Не понял следующее условие: +Задачу можно усложнить, реализовав проверку порядка режимов. При его нарушении +выводить соответствующее сообщение и завершать скрипт. +Как может нарушиться порядок режимов, если в условии задачи задан абсолютно точный алгоритм. +''' \ No newline at end of file diff --git a/task_2_lesson6.py b/task_2_lesson6.py new file mode 100644 index 0000000..bfb4343 --- /dev/null +++ b/task_2_lesson6.py @@ -0,0 +1,25 @@ +# Задание №2 +# Реализовать класс Road (дорога). +# определить атрибуты: length (длина), width (ширина); +# значения атрибутов должны передаваться при создании экземпляра класса; +# атрибуты сделать защищёнными; +# определить метод расчёта массы асфальта, необходимого для покрытия всей дороги; +# использовать формулу: длина*ширина*масса асфальта для покрытия одного кв. метра +# дороги асфальтом, толщиной в 1 см*число см толщины полотна; +# проверить работу метода. +# Например: 20 м*5000 м*25 кг*5 см = 12500 т. + +class Road: + def __init__(self, length, width): + self._length = length + self._width = width + self.weight = 25 + self.height = 5 + + def weight_asphalt(self): + weight_asp = self._length * self._width * self.weight * self.height / 1000 + print(f'Необходимая масса асфальта: {weight_asp} тон.') + + +r = Road(50000, 15) +r.weight_asphalt() diff --git a/task_3_lesson6.py b/task_3_lesson6.py new file mode 100644 index 0000000..22e12f6 --- /dev/null +++ b/task_3_lesson6.py @@ -0,0 +1,34 @@ +# Задание №3 +# Реализовать базовый класс Worker (работник). +# определить атрибуты: name, surname, position (должность), income (доход); +# последний атрибут должен быть защищённым и ссылаться на словарь, содержащий +# элементы: оклад и премия, например, {"wage": wage, "bonus": bonus}; +# создать класс 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 __init__(self, name, surname, position, wage, bonus): + super().__init__(name, surname, position, wage, bonus) + + def get_full_name(self): + return f'{self.name} {self.surname}' + + def get_total_income(self): + return round((float(self._income.get("wage")) + float(self. _income.get("bonus"))), 2) + + +a = Position('Алексей', 'Иванов', 'Мастер', 40158.56, 15264.15) +print(f'{a.get_full_name()} {a.position} {a.get_total_income()} руб.') diff --git a/task_4_lesson6.py b/task_4_lesson6.py new file mode 100644 index 0000000..f9394cf --- /dev/null +++ b/task_4_lesson6.py @@ -0,0 +1,100 @@ +# Задание №4 +# Реализуйте базовый класс 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_police): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + def go(self): + return f'{self.name} поехала' + + def stop(self): + return f'{self.name} остановилась' + + def turn_right(self): + return f'{self.name} повернула на право' + + def turn_left(self): + return f'{self.name} повернула на лево' + + def show_speed(self): + return f'Текущая скорость {self.name} состовляет {self.speed} км/час' + + +class TownCar(Car): + def __init__(self, speed, color, name, is_police): + super().__init__(speed, color, name, is_police) + + def show_speed(self): + print(f'Текущая скорость {self.name} состовляет {self.speed} км/ч') + if self.speed == 0: + return f'{self.name} стоит недвижимо' + elif self.speed > 60: + return f'{self.name} превышает скорость' + else: + return f'Скорость {self.name} в пределах нормы' + + +class SportCar(Car): + def __init__(self, speed, color, name, is_police): + super().__init__(speed, color, name, is_police) + + +class WorkCar(Car): + def __init__(self, speed, color, name, is_police): + super().__init__(speed, color, name, is_police) + + def show_speed(self): + print(f'Текущая скорость {self.name} состовляет {self.speed}') + if self.speed == 0: + return f'{self.name} стоит недвижимо' + elif self.speed > 40: + return f'{self.name} превышает скорость' + else: + return f'Скорость {self.name} в пределах нормы' + + +class PoliceCar(Car): + def __init__(self, speed, color, name, is_police): + super().__init__(speed, color, name, is_police) + + def police(self): + if self.is_police: + return f'{self.name}, является полицейской машиной' + else: + return f'{self.name}, не является полицейской машиной' + + +kia = TownCar(80, 'белый', 'kia', False) +print(kia.go()) +print(kia.stop()) +print(kia.turn_left()) +print(kia.turn_right()) +print(kia.show_speed()) + +porsche = SportCar(150, 'красный', 'Porsche', False) +print(porsche.go()) +print(porsche.show_speed()) + +lada = WorkCar(50, 'зеденый', 'Lada', False) +print(lada.go()) +print(lada.show_speed()) + +patriot = PoliceCar(60, 'черный', 'Patriot', True) +print(patriot.turn_left()) +print(patriot.turn_right()) +print(patriot.police()) diff --git a/task_5_lesson6.py b/task_5_lesson6.py new file mode 100644 index 0000000..43162af --- /dev/null +++ b/task_5_lesson6.py @@ -0,0 +1,50 @@ +# Задание №5 +# Реализовать класс Stationery (канцелярская принадлежность). +# определить в нём атрибут title (название) и метод draw (отрисовка). Метод выводит +# сообщение «Запуск отрисовки»; +# создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер); +# в каждом классе реализовать переопределение метода draw. Для каждого класса +# метод должен выводить уникальное сообщение; +# создать экземпляры классов и проверить, что выведет описанный метод для каждого +# экземпляра. + +class Stationary: + def __init__(self, title): + self.title = title + + def draw(self): + return f'Запуск отрисовки {self.title}' + + +class Pen(Stationary): + def __init__(self, title): + super().__init__(title) + + def draw(self): + return f'Режим {self.title}. Запуск отрисовки ручкой' + + +class Pencil(Stationary): + def __init__(self, title): + super().__init__(title) + + def draw(self): + return f'Режим {self.title}. Запуск отрисовки карандашом' + + +class Handle(Stationary): + def __init__(self, title): + super().__init__(title) + + def draw(self): + return f'Режим {self.title}. Запуск отрисовки маркером' + + +brush = Stationary('Кисть') +pen = Pen('Ручка') +pencil = Pencil('Карандаш') +handle = Handle('Маркер') +print(brush.draw()) +print(pen.draw()) +print(pencil.draw()) +print(handle.draw())