diff --git a/Lesson_6/task_1.py b/Lesson_6/task_1.py new file mode 100644 index 0000000..9fe476c --- /dev/null +++ b/Lesson_6/task_1.py @@ -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() diff --git a/Lesson_6/task_2.py b/Lesson_6/task_2.py new file mode 100644 index 0000000..45feb86 --- /dev/null +++ b/Lesson_6/task_2.py @@ -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() diff --git a/Lesson_6/task_3.py b/Lesson_6/task_3.py new file mode 100644 index 0000000..74415cc --- /dev/null +++ b/Lesson_6/task_3.py @@ -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()) diff --git a/Lesson_6/task_4.py b/Lesson_6/task_4.py new file mode 100644 index 0000000..83f0c49 --- /dev/null +++ b/Lesson_6/task_4.py @@ -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}') diff --git a/Lesson_6/task_5.py b/Lesson_6/task_5.py new file mode 100644 index 0000000..698e8a1 --- /dev/null +++ b/Lesson_6/task_5.py @@ -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()