This commit is contained in:
denis-on 2022-03-19 20:02:26 +03:00
parent 8188d0766d
commit 47635b551a
5 changed files with 276 additions and 0 deletions

51
less-06/task-01.py Normal file
View File

@ -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 от текущего состояния

25
less-06/task-02.py Normal file
View File

@ -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),"т")

38
less-06/task-03.py Normal file
View File

@ -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())

116
less-06/task-04.py Normal file
View File

@ -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()

46
less-06/task-05.py Normal file
View File

@ -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()