Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions lesson_6/hw01_6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск).
# Атрибут реализовать как приватный. В рамках метода реализовать переключение светофора в режимы: красный, желтый,
# зеленый. Время перехода между режимами должно составлять 7 и 2 секунды.
# Проверить работу примера, создав экземпляр и вызвав описанный метод.


import time

class TrafficLight:
__color = None

def running(self):
time_to_start = time.time()
current_time = None
__color = 'красный'
print(f'Режим светофора: {__color}')

while __color != 'зеленый':
current_time = time.time()
if current_time - time_to_start == 1:
print(time.time())

if current_time - time_to_start >= 7 and __color == 'красный':
__color = 'желтый'
print(f'Режим светофора: {__color}')
time_to_start = time.time()
elif current_time - time_to_start >= 2 and __color == 'желтый':
__color = 'зеленый'
print(f'Режим светофора: {__color}')


light = TrafficLight()
light.running()
25 changes: 25 additions & 0 deletions lesson_6/hw02_6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Реализовать класс Road (дорога), в котором определить атрибуты: length (длина), width (ширина).
# Значения данных атрибутов должны передаваться при создании экземпляра класса. Атрибуты сделать защищенными.
# Определить метод расчета массы асфальта, необходимого для покрытия всего дорожного полотна.
# Использовать формулу: длина*ширина*масса асфальта для покрытия одного кв метра дороги асфальтом,
# толщиной в 1 см*число см толщины полотна. Проверить работу метода.
# Например: 20м*5000м*25кг*5см = 12500 т

# замечу, что формула в примере расчета некорректная, поскольку 5см необходимо перевести в метры, что мы и сделаем


class Road:
_length: int
_width: int

def __init__(self, length, width):
self._length = length
self._width = width

def get_quantity(self, thickness):
quantity = self._length * self._width * 25 * thickness / 1000
print(f'Масса асфальта: {self._length}м * {self._width}м * 25кг * {thickness}м = {quantity} тонн')


road = Road(5000, 20)
road.get_quantity(0.05)
39 changes: 39 additions & 0 deletions lesson_6/hw03_6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Реализовать базовый класс Worker (работник), в котором определить атрибуты: name, surname, position (должность),
# income (доход). Последний атрибут должен быть защищенным и ссылаться на словарь, содержащий элементы: оклад и премия,
# например, {"profit": profit, "bonus": bonus}. Создать класс Position (должность) на базе класса Worker.
# В классе Position реализовать методы получения полного имени сотрудника (get_full_name) и дохода с учетом премии
# (get_full_profit). Проверить работу примера на реальных данных (создать экземпляры класса Position,
# передать данные, проверить значения атрибутов, вызвать методы экземпляров).


class Worker:
name: str
surname: str
position: str
_income: dict

def __init__(self, name, surname, position, profit, bonus):
self.name = name
self.surname = surname
self.position = position
self._income = {'profit': profit, 'bonus': bonus}


class Position(Worker):

def __init__(self, name, surname, position, profit, bonus):
super().__init__(name, surname, position, profit, bonus)

def get_full_name(self):
print(f'Полное имя сотрудника: {self.name} {self.surname}')

def get_full_profit(self):
full_profit = 0
for key, value in self._income.items():
full_profit += value
print(f'Доход с учетом премии: {full_profit}')


position_test = Position('Андрей', 'Иванов', 'менеджер', 400, 100)
position_test.get_full_name()
position_test.get_full_profit()
66 changes: 66 additions & 0 deletions lesson_6/hw04_6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Опишите несколько классов: TownCar, SportCar, WorkCar, PoliceCar. У каждого класса должны быть следующие атрибуты:
# speed, color, name, is_police (булево). А также несколько методов: go, stop, turn(direction), которые должны
# сообщать, что машина поехала, остановилась, повернула (куда).


class Car:
speed: int
color: int
name: int
is_police: bool

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):
print(f'Машина поехала со скоростью {self.speed}')

def stop(self):
print('Машина остановилась')

def turn(self, direction:str):
print(f'Машина поворачивает {direction}')


class TownCar(Car):

def __init__(self, speed, color, name, is_police=False):
super().__init__(speed, color, name, is_police)


class SportCar(Car):

def __init__(self, speed, color, name, is_police=False):
super().__init__(speed, color, name, is_police)


class WorkCar(Car):

def __init__(self, speed, color, name, is_police=False):
super().__init__(speed, color, name, is_police)


class PoliceCar(Car):

def __init__(self, speed, color, name, is_police=True):
super().__init__(speed, color, name, is_police)


towncar = TownCar(300, 'Красный', 'Мазератти')
towncar.go()
print(type(towncar))

sportcar = SportCar(400, 'Белый', 'Феррари')
sportcar.stop()
print(type(sportcar))

workcar = WorkCar(120, 'Синий', 'Киа')
workcar.turn('направо')
print(type(sportcar))

policecar = PoliceCar(400, 'Бело-синий', 'Додж')
policecar.go()
print(type(policecar))
37 changes: 37 additions & 0 deletions lesson_6/hw05_6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Реализовать класс Stationery (канцелярская принадлежность). Определить в нем атрибут title (название) и метод draw
# (отрисовка). Метод выводит сообщение “Запуск отрисовки.” Создать три дочерних класса Pen (ручка), Pencil (карандаш),
# Handle (маркер). В каждом из классов реализовать переопределение метода draw. Для каждого из классов методы должен
# выводить уникальное сообщение. Создать экземпляры классов и проверить, что выведет описанный метод
# для каждого экземпляра.


class Stationery:
title: str

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('Пишем маркером. Очень толстая линия, стирается хуже ручки')


pen = Pen()
pen.draw()

pencil = Pencil()
pencil.draw()

handle = Handle()
handle.draw()