Skip to content
31 changes: 31 additions & 0 deletions Lesson_6/task_1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Создать класс TrafficLight (светофор).
# Определить у него один атрибут color (цвет) и метод running (запуск);
# атрибут реализовать как приватный;
# в рамках метода реализовать переключение светофора в режимы: красный, жёлтый, зелёный;
# продолжительность первого состояния (красный) составляет 7 секунд,
# второго (жёлтый) — 2 секунды, третьего (зелёный) — на ваше усмотрение;
# переключение между режимами должно осуществляться только в указанном порядке (красный, жёлтый, зелёный);
# проверить работу примера, создав экземпляр и вызвав описанный метод.

import time


class TrafficLights:
# __color = None
__colors = ['RED', 'YELLOW', 'GREEN']

def running(self):
i = 0
while i < 3:
print(f'Traffic light color is: {TrafficLights.__colors[i]}')
if i == 0:
time.sleep(7)
elif i == 1:
time.sleep(2)
else:
time.sleep(5)
i += 1


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

class Road:

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

def square(self):
square = self._length * self._width / 1000000
print(f'Road surface area is: {square} km\u00B2')

def mass(self, mass_m2=25, tickness=25):
mass = self._length * self._width * mass_m2 * tickness / 1000
print(f'For the construction of a road with length of {self._length} m. and width of {self._width} m.,\n'
f' {mass} tons of asphalt will be required.')


road = Road(15000, 20)
road.square()
road.mass()
34 changes: 34 additions & 0 deletions Lesson_6/task_3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Реализовать базовый класс 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, salary, bonus):
self.name = name
self.surname = surname
self.position = position
self.salary = salary
self.bonus = bonus


class Position(Worker):

def get_full_name(self):
return self.name + ' ' + self.surname

def get_total_income(self):
self._income = {'salary': self.salary, 'bonus': self.bonus}
return self.salary + self.bonus


val = Position('James', 'Bond', 'Agent', 300000, 140000)
print(val.position)
print(val.get_full_name())
print(val.get_total_income())
85 changes: 85 additions & 0 deletions Lesson_6/task_4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Реализуйте базовый класс 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, name, color, speed, is_police):
self.name = name
self.color = color
self.speed = speed
self.is_police = is_police

def go(self):
return f'start moving with the speed {self.speed} km/h'

def stop(self):
return f'slowdown and stop moving'

def turn_left(self):
return f'turn left'

def turn_right(self):
return f'turn right'

def show_speed(self):
return f'Current car speed is: {self.speed}'


class TownCar(Car):

def show_speed(self):
if self.speed > 60:
print('Exceeding the speed limit for moving around the city in 60 km/h. Current speed of', self.name, 'is',
self.speed, 'km/h')
else:
print('No over-speed detected. The current speed of', self.name, 'is', self.speed, 'km/h')


class SportCar(Car):

def sport_car(self):
pass


class WorkCar(Car):

def show_speed(self):
if self.speed > 40:
print('Exceeding the speed limit for special vehicles for moving around the city in 40 km/h. '
'Current speed of', self.name, 'is', self.speed, 'km/h')
else:
print('No over-speed detected. The current speed of', self.name, 'is', self.speed, 'km/h')


class PoliceCar(Car):

def police(self):
if self.is_police:
print('This', self.name, 'belongs to the police office')
else:
print('This', self.name, 'is civilian')


car_a = TownCar('Mercedes', 'White', 60, False)
car_b = SportCar('McLaren', 'Dark-red', 240, False)
car_c = WorkCar('Kamaz', 'Orange', 60, False)
car_d = PoliceCar('BMW', 'Unknown', 100, True)
print(f'Car {car_a.name} {car_a.go()} then {car_a.turn_left()}, {car_a.stop()}')
print(f'Car {car_b.name} {car_b.go()} then {car_b.turn_right()}, {car_b.stop()}')
print(f'Car {car_c.name} {car_c.go()} then {car_c.turn_left()}, {car_c.stop()}')
print(f'Car {car_d.name} {car_d.go()} then {car_d.turn_left()}, {car_d.stop()}')
car_a.show_speed()
car_b.sport_car()
car_c.show_speed()
car_d.police()
print(f'Is {car_a.name} belong to police office?: {car_a.is_police}')
75 changes: 75 additions & 0 deletions Lesson_6/task_5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Реализовать класс Stationery (канцелярская принадлежность).
# определить в нём атрибут title (название) и метод draw (отрисовка). Метод выводит сообщение «Запуск отрисовки»;
# создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер);
# в каждом классе реализовать переопределение метода draw.
# Для каждого класса метод должен выводить уникальное сообщение;
# создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра.

class Stationary:

def __init__(self, title, pen, pencil, handle):
self.title = title
self.pen = pen
self.pencil = pencil
self.handle = handle

def draw(self):
print('Start the rendering process: ', self.title)


class Pen(Stationary):

def draw(self):
if self.pen == True:
print('The pen tool is ready. The rendering process is started')
else:
print('The pen tool is not available. Please, choose a different tool.')


class Pencil(Stationary):

def draw(self):
if self.pencil == True:
print('The pencil tool is ready. The rendering process is started')
else:
print('The pencil tool is not available. Please, choose a different tool.')


class Handle(Stationary):

def draw(self):
if self.handle == True:
print('The handle tool is ready. The rendering process is started')
else:
print('The handle tool is not available. Please, choose a different tool.')


print('Test option 1:')
title = Stationary('Beginning', False, False, False)
pen = Pen('Beginning', True, False, False)
pencil = Pencil('Beginning', False, True, False)
handle = Handle('Beginning', False, False, True)
title.draw()
pen.draw()
pencil.draw()
handle.draw()

print('Test option 2:')
title = Stationary('Beginning', False, False, False)
pen = Pen('Beginning', True, False, False)
pencil = Pencil('Beginning', True, False, False)
handle = Handle('Beginning', False, False, False)
title.draw()
pen.draw()
pencil.draw()
handle.draw()

print('Test option 3:')
title = Stationary('Beginning', False, False, False)
pen = Pen('Beginning', False, False, False)
pencil = Pencil('Beginning', False, True, False)
handle = Handle('Beginning', True, False, False)
title.draw()
pen.draw()
pencil.draw()
handle.draw()