From 47635b551ae8fae78a6deb59eb85dc92d06b361b Mon Sep 17 00:00:00 2001 From: denis-on Date: Sat, 19 Mar 2022 20:02:26 +0300 Subject: [PATCH] dz les 6 --- less-06/task-01.py | 51 ++++++++++++++++++++ less-06/task-02.py | 25 ++++++++++ less-06/task-03.py | 38 +++++++++++++++ less-06/task-04.py | 116 +++++++++++++++++++++++++++++++++++++++++++++ less-06/task-05.py | 46 ++++++++++++++++++ 5 files changed, 276 insertions(+) create mode 100644 less-06/task-01.py create mode 100644 less-06/task-02.py create mode 100644 less-06/task-03.py create mode 100644 less-06/task-04.py create mode 100644 less-06/task-05.py diff --git a/less-06/task-01.py b/less-06/task-01.py new file mode 100644 index 0000000..09282b4 --- /dev/null +++ b/less-06/task-01.py @@ -0,0 +1,51 @@ +# Создать класс TrafficLight (светофор). +# +# определить у него один атрибут color (цвет) и метод running (запуск); +# атрибут реализовать как приватный; +# в рамках метода реализовать переключение светофора в режимы: красный, жёлтый, зелёный; +# продолжительность первого состояния (красный) составляет 7 секунд, второго (жёлтый) — 2 секунды, третьего (зелёный) — на ваше усмотрение; +# переключение между режимами должно осуществляться только в указанном порядке (красный, жёлтый, зелёный); +# проверить работу примера, создав экземпляр и вызвав описанный метод. +# +# Задачу можно усложнить, реализовав проверку порядка режимов. При его нарушении выводить соответствующее сообщение и завершать скрипт. +from time import sleep + + +class TrafficLight: + __color = {0: ['red', 7, '\033[91m'], 1: ['yellow', 2, '\33[6m\033[93m'], 2: ['green', 5, '\033[92m']} + __dig = {'red': 0, 'yellow': 1, 'green': 2} + __state = 0 + + def __step(self, sleep_step=False): + print(self.__color[self.__state][2] + self.__color[self.__state][0] + '\033[0m') + if sleep_step: + sleep(self.__color[self.__state][1]) + self.__state += 1 + if self.__state >= 3: self.__state = 0 + + def running(self, state=None): + if state is None: + self.__step() + else: + st = self.__dig[state.lower()] + while self.__state != st: + self.__step(True) + self.__step() + + def running_c(self, count): + for _ in range(count*3+1): + self.__step(True) + + + +a = TrafficLight() + +print('ручной режим типа next') +a.running() # запустит 1 шаг за промежутками следим сами +sleep(1) +a.running() +sleep(1) +print('\nперевести в сотояние Красный(red) из текущего') +a.running('red') # включит следующее состояние и будет преключаться до указаного +print('\nвыполним два полных круга от текущего') +a.running_c(2) # выполнит полных 2 от текущего состояния diff --git a/less-06/task-02.py b/less-06/task-02.py new file mode 100644 index 0000000..3e3b859 --- /dev/null +++ b/less-06/task-02.py @@ -0,0 +1,25 @@ +# Реализовать класс Road (дорога). +# +# определить атрибуты: length (длина), width (ширина); +# значения атрибутов должны передаваться при создании экземпляра класса; +# атрибуты сделать защищёнными; +# определить метод расчёта массы асфальта, необходимого для покрытия всей дороги; +# использовать формулу: длина*ширина*масса асфальта для покрытия одного кв. +# метра дороги асфальтом, толщиной в 1 см*число см толщины полотна; +# проверить работу метода. +# +# Например: 20 м*5000 м*25 кг*5 см = 12500 т. + +class Road: + def __init__(self, length, width): + self.__length = length + self.__width = width + + def getMass(self, cost_m, thickness): + return self.__length * self.__width * cost_m * thickness/1000 + + +a=Road(5000, 20) +b=Road(1000,3) +print(a.getMass(25,5),"т") +print(b.getMass(25,5),"т") \ No newline at end of file diff --git a/less-06/task-03.py b/less-06/task-03.py new file mode 100644 index 0000000..62197bb --- /dev/null +++ b/less-06/task-03.py @@ -0,0 +1,38 @@ +# Реализовать базовый класс 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, surmane, position, income): + self._name = name + self._surname = surmane + self._position = position + self.__income = income + +class Position(Worker): + def __init__(self, name, surmane, position, income): + super().__init__(name, surmane, position, income) + + def get_full_name(self): + return self._name+" "+self._surname + + def get_total_income(self): + return (self._Worker__income)["wage"] + (self._Worker__income)["bonus"] + + +user1=Position('имя1','фамилия1', 'должность1',{"wage": 24, "bonus": -3}) +user2=Position('имя2','фамилия2', 'должность2',{"wage": 12, "bonus": 2}) + +print(user1.get_full_name()) +print(user1.get_total_income()) + +print(user2.get_full_name()) +print(user2.get_total_income()) diff --git a/less-06/task-04.py b/less-06/task-04.py new file mode 100644 index 0000000..6a2465d --- /dev/null +++ b/less-06/task-04.py @@ -0,0 +1,116 @@ +#Реализуйте базовый класс Car. +# +# у класса должны быть следующие атрибуты: speed, color, name, is_police (булево). +# А также методы: go, stop, turn(direction), которые должны сообщать, что машина поехала, остановилась, +# повернула (куда); опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar; +# добавьте в базовый класс метод show_speed, который должен показывать текущую скорость автомобиля; +# для классов TownCar и WorkCar переопределите метод show_speed. При значении скорости +# свыше 60 (TownCar) и 40 (WorkCar) должно выводиться сообщение о превышении скорости. +# +#Создайте экземпляры классов, передайте значения атрибутов. Выполните доступ +#к атрибутам, выведите результат. Вызовите методы и покажите результат. +from random import randint + + +class Car: + numAvto = 0 + + def __init__(self, color, name, is_police): + self.speed = 0 + self.color = color + self.name = name + self.is_police = is_police + self.is_stop = True + + def getNewSpeed(self): + self.speed = 0 if self.is_stop else randint(20,100) + return self.speed + + def go(self): + self.is_stop = False + self.getNewSpeed() + print(f'{self.name}: Начало движения') + + def stop(self): + self.is_stop = True + self.speed = 0 + print(f'{self.name}: Конец движения. Остановка') + + def turn(self, direction): + print(f'{self.name}: Изменение направления на {direction}') + + def show_speed(self): + print(f'{self.name}: текущая скорость {self.getNewSpeed()}') + +class TownCar(Car): + def __init__(self, color): + TownCar.numAvto += 1 + super().__init__(color, "TownCar_"+str(TownCar.numAvto), False) + + def show_speed(self): + print(f'{self.name}: текущая скорость {self.getNewSpeed()}') + if self.speed > 60: + print('Внимание'+''+'привышение скорости') + +class SportCar(Car): + def __init__(self, color): + SportCar.numAvto += 1 + super().__init__(color, "SportCar_"+str(SportCar.numAvto), False) + +class WorkCar(Car): + def __init__(self, color): + WorkCar.numAvto += 1 + super().__init__(color, "WorkCar_"+str(WorkCar.numAvto), False) + + def show_speed(self): + print(f'{self.name}: текущая скорость {self.getNewSpeed()}') + if self.speed > 40: + print('\033[91m' + 'Внимание '+'\033[0m'+'привышение скорости') + +class PoliceCar(Car): + def __init__(self, color): + PoliceCar.numAvto += 1 + super().__init__(color, "PoliceCar_"+str(PoliceCar.numAvto), True) + + + + +car_1 = PoliceCar('red') +car_2 = PoliceCar('green') +car_t = TownCar('yellow') +car_s = SportCar('while') +car_w = WorkCar('grey') + +print(car_1.name,'цвет',car_1.color) +print(car_2.name,'цвет',car_2.color) +print(car_t.name,'цвет',car_t.color) +print(car_s.name,'цвет',car_s.color) +print(car_w.name,'цвет',car_w.color) + +car_t.go() +car_s.go() +car_1.go() +car_w.go() +car_2.go() + +# погоняем +print('\nпогоняем') +for _ in range(5): + car_t.show_speed() + car_s.show_speed() + car_1.show_speed() + car_w.show_speed() + car_2.show_speed() + print('') + +car_t.stop() +car_s.stop() +car_1.stop() +car_w.stop() +car_2.stop() +car_t.show_speed() +car_s.show_speed() +car_1.show_speed() +car_w.show_speed() +car_2.show_speed() + diff --git a/less-06/task-05.py b/less-06/task-05.py new file mode 100644 index 0000000..46014f5 --- /dev/null +++ b/less-06/task-05.py @@ -0,0 +1,46 @@ +# Реализовать класс Stationery (канцелярская принадлежность). +# +# определить в нём атрибут title (название) и метод draw (отрисовка). Метод выводит сообщение «Запуск отрисовки»; +# создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер); +# в каждом классе реализовать переопределение метода draw. +# Для каждого класса метод должен выводить уникальное сообщение; +# создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра. + +class Stationery: + title = "" + + def draw(self): + print('Запуск отрисовки') + +class Pen(Stationery): + def __init__(self): + self.title = "Pen" + + def draw(self): + print('Попишем ручкой') + +class Pencil(Stationery): + def __init__(self): + self.title = "Pencil" + + def draw(self): + print('Чертить карандашом') + +class Handle(Stationery): + def __init__(self): + self.title = "Handle" + + def draw(self): + print('Рисуем Маркером') + + +pen=Pen() +print(pen.title) +pencil=Pencil() +print(pencil.title) +handle=Handle() +print(handle.title) + +pen.draw() +pencil.draw() +handle.draw()