mirror of
https://github.com/denis-on/basicsPython.git
synced 2026-02-03 08:00:51 +03:00
dz les 6
This commit is contained in:
parent
8188d0766d
commit
47635b551a
51
less-06/task-01.py
Normal file
51
less-06/task-01.py
Normal 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
25
less-06/task-02.py
Normal 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
38
less-06/task-03.py
Normal 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
116
less-06/task-04.py
Normal 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
46
less-06/task-05.py
Normal 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()
|
||||||
Loading…
x
Reference in New Issue
Block a user