diff --git a/__pycache__/lesson_6_task_1.cpython-36.pyc b/__pycache__/lesson_6_task_1.cpython-36.pyc new file mode 100644 index 0000000..af7e5ab Binary files /dev/null and b/__pycache__/lesson_6_task_1.cpython-36.pyc differ diff --git a/__pycache__/lesson_6_task_2.cpython-36.pyc b/__pycache__/lesson_6_task_2.cpython-36.pyc new file mode 100644 index 0000000..dc87198 Binary files /dev/null and b/__pycache__/lesson_6_task_2.cpython-36.pyc differ diff --git a/__pycache__/lesson_6_task_3.cpython-36.pyc b/__pycache__/lesson_6_task_3.cpython-36.pyc new file mode 100644 index 0000000..a485afb Binary files /dev/null and b/__pycache__/lesson_6_task_3.cpython-36.pyc differ diff --git a/__pycache__/lesson_6_task_4.cpython-36.pyc b/__pycache__/lesson_6_task_4.cpython-36.pyc new file mode 100644 index 0000000..021d5a5 Binary files /dev/null and b/__pycache__/lesson_6_task_4.cpython-36.pyc differ diff --git a/lesson_6_task_1.py b/lesson_6_task_1.py new file mode 100644 index 0000000..7507377 --- /dev/null +++ b/lesson_6_task_1.py @@ -0,0 +1,18 @@ +'''1. Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск). Атрибут реализовать как приватный. В рамках метода реализовать переключение светофора в режимы: красный, желтый, зеленый. Продолжительность первого состояния (красный) составляет 7 секунд, второго (желтый) — 2 секунды, третьего (зеленый) — на ваше усмотрение. Переключение между режимами должно осуществляться только в указанном порядке (красный, желтый, зеленый). Проверить работу примера, создав экземпляр и вызвав описанный метод. +Задачу можно усложнить, реализовав проверку порядка режимов, и при его нарушении выводить соответствующее сообщение и завершать скрипт.''' +import time +from itertools import cycle as i_cycle + +class TrafficLight: + __colors = ('red','yellow','green') + + def __init__(self): + self.__color = self.__colors[0] + + def running(self, signal): + timer = (7, 2, signal) + for el in i_cycle(zip(self.__colors, timer)): + print(el) + self.__color = el[0] + print(self.__color) + time.sleep(el[1]) diff --git a/lesson_6_task_2.py b/lesson_6_task_2.py new file mode 100644 index 0000000..01bcf54 --- /dev/null +++ b/lesson_6_task_2.py @@ -0,0 +1,25 @@ +'''2. Реализовать класс Road (дорога), в котором определить атрибуты: +length (длина), +width (ширина). +Значения данных атрибутов должны передаваться при создании экземпляра класса. Атрибуты сделать защищенными. +Определить метод расчета массы асфальта, необходимого для покрытия всего дорожного полотна. Использовать формулу: длина * ширина * масса асфальта для покрытия одного кв метра дороги асфальтом, толщиной в 1 см * чи сло см толщины полотна. Проверить работу метода. +Например: 20м * 5000м * 25кг * 5см = 12500 т''' + +# run tmp_task_2.py for test class +class Road: + ''' + Road calculation suite + length: int + width: int + mass per 1 sm (kg) + heigth (meters) + ''' + __tmp = 0 + + def __init__(self, length: int, width: int, mass = 25, heigth = 5): + self._length = length + self._width = width + Road.__tmp = mass * heigth / 1000 + + def calc(self): + return self.__tmp * self._length * self._width diff --git a/lesson_6_task_3.py b/lesson_6_task_3.py new file mode 100644 index 0000000..e465f8e --- /dev/null +++ b/lesson_6_task_3.py @@ -0,0 +1,38 @@ +'''3. Реализовать базовый класс +Worker (работник), +атрибуты: name, surname, position (должность), +_income (доход). Последний атрибут должен быть защищенным и ссылаться на словарь, содержащий элементы: оклад и премия, например, +{ + "wage": wage, + "bonus": bonus +}. +Создать класс Position (должность) на базе класса Worker. +В классе Position реализовать методы: +(get_full_name) получения полного имени сотрудника +(get_total_income) дохода с учетом премии. +''' +# run tmp_task_3.py for test class + +class Worker: + ''' from dawn till dusk ''' + + def __init__(self, name, surname, position, wage, bonus): + self.name = name + self.surname = surname + self.position = position + self._income = { + 'wage': wage, + 'bonus': bonus + } + +class Position(Worker): + + def __init__(self, name, surname, position, wage, bonus): + super(Position, self).__init__(name, surname, position, wage, bonus) + + def get_full_name(self): + print(self.name , ' ', self.surname) + + def get_total_income(self): + print(self._income['wage'], ' ', self._income['bonus']) + diff --git a/lesson_6_task_4.py b/lesson_6_task_4.py new file mode 100644 index 0000000..fcdc6e8 --- /dev/null +++ b/lesson_6_task_4.py @@ -0,0 +1,97 @@ +'''4. Реализуйте базовый класс Car. У данного класса должны быть следующие атрибуты: speed, color, name, is_police (булево). А также методы: go, stop, turn(direction), которые должны сообщать, что машина поехала, остановилась, повернула (куда). +''' + +class Car: + ''' My lovely car class + self, name = 'noname', color = 'nocolor', speed :int = 0, is_police :bool = False ''' + + def __init__(self, name = 'noname', color = 'nocolor', speed :int = 0, is_police :bool = False ): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + def go(self, speed :int = 15): + print(f'{self.name} on run, speed up') + self.speed += speed + + def stop(self): + self.speed = 0 + print(f'{self.name} stoped') + + def turn(self, direction): + if direction in ('left', 'right'): # ... , 'Fw', 'Bw') + print(f'{self.name} goes {direction} direction') + else: + raise ValueError('values must be left or right') + + def show_speed(self): + print(f'{self.name} current speed {self.speed}') + + +'''Опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar. Добавьте в базовый класс метод show_speed, который должен показывать текущую скорость автомобиля. Для классов TownCar и WorkCar переопределите метод show_speed. При значении скорости свыше 60 (TownCar) и 40 (WorkCar) должно выводиться сообщение о превышении скорости. +''' + +class TownCar(Car): + ''' TownCar переопределите метод show_speed. При значении скорости свыше 60 (TownCar) должно выводиться сообщение о превышении скорости.''' + def show_speed(self): + if self.speed > 40: + print(f'Warning speed > 40') + super().show_speed() + + +class SportCar(Car): + pass + + +class WorkCar(Car): + '''WorkCar переопределите метод show_speed. При значении скорости 40 (WorkCar) должно выводиться сообщение о превышении скорости.''' + def show_speed(self): + if self.speed > 60: + print(f'Warning speed > 60') + super().show_speed() + + +class PoliceCar(Car): + '''self, name, speed, is_police : bool = True''' + def __init__(self, name, speed, is_police : bool = True ): + self.is_police = is_police + super().__init__(name, 'police color cheme', speed, True) + +vehicle = Car('tesla', 'red', 110) + +vehicle.go(70) +vehicle.turn('left') +vehicle.show_speed() +vehicle.stop() +vehicle.show_speed() + +car1 = TownCar('Towncar', 'white' , 20) +car2 = SportCar('Sportcar', 'black') +car2.go() +car3 = WorkCar('WorkCar', 'yellow' ) +car3.go(50) +car4 = PoliceCar('Sherif', 60) +print() + +car1.show_speed() +car2.show_speed() +car3.show_speed() +car4.show_speed() +print() + +car1.stop() +car1.go() +print() + +print(f"Скорость {car2.name} = {car2.speed}") +car2.go() +print(f"Скорость {car2.name} = {car2.speed}") +car2.go(250) +print(f"Скорость {car2.name} = {car2.speed}") + +print(f"{type(car4)} это машина полиции? {car4.is_police}") +print(f"{type(car1)} это машина полиции? {car1.is_police}") + +vehicle.go() +vehicle.show_speed() \ No newline at end of file diff --git a/lesson_6_task_5.py b/lesson_6_task_5.py new file mode 100644 index 0000000..9ef7047 --- /dev/null +++ b/lesson_6_task_5.py @@ -0,0 +1,49 @@ +'''5. Реализовать класс Stationery (канцелярская принадлежность). Определить в нем атрибут title (название) и метод draw (отрисовка). Метод выводит сообщение “Запуск отрисовки.” Создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер). В каждом из классов реализовать переопределение метода draw. Для каждого из классов методы должен выводить уникальное сообщение. Создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра. +''' +class Stationery: + ''' (канцелярская принадлежность). ''' + def __init__(self, title = 'default'): + self.title = title + def draw(self): + '''(отрисовка). Метод выводит сообщение “Запуск отрисовки.” ''' + print("“Запуск отрисовки.”") + + +#Создать три дочерних класса +class Pen(Stationery): + '''(ручка) + переопределение метода draw. ''' + def __init__(self): + super().__init__('pen') + def draw(self, item:str = 'текст'): + print(f" {self.title} написан {item} ”") + +class Pencil(Stationery): + '''(карандаш) ''' + def __init__(self): + super().__init__('pencil') + def draw(self): + print(f" item 3 = {self.title} ”") + +class Handle(Stationery): + ''' (маркер) ''' + def __init__(self): + super().__init__('маркер') + def draw(self): + print(f" item 3 = {self.title} ”") + +''' Создать экземпляры классов и проверить, + что выведет описанный метод для каждого экземпляра.''' + +stationery = Stationery() +stationery.draw() +pen = Pen() +pen.draw() +pencil = Pencil() +pencil.draw() +handle = Handle() + +handle.draw() +pen.draw('test text for pen') +''' +''' \ No newline at end of file diff --git a/tasklist b/tasklist new file mode 100644 index 0000000..2a21935 --- /dev/null +++ b/tasklist @@ -0,0 +1,8 @@ +1. Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск). Атрибут реализовать как приватный. В рамках метода реализовать переключение светофора в режимы: красный, желтый, зеленый. Продолжительность первого состояния (красный) составляет 7 секунд, второго (желтый) — 2 секунды, третьего (зеленый) — на ваше усмотрение. Переключение между режимами должно осуществляться только в указанном порядке (красный, желтый, зеленый). Проверить работу примера, создав экземпляр и вызвав описанный метод. +Задачу можно усложнить, реализовав проверку порядка режимов, и при его нарушении выводить соответствующее сообщение и завершать скрипт. +2. Реализовать класс Road (дорога), в котором определить атрибуты: length (длина), width (ширина). Значения данных атрибутов должны передаваться при создании экземпляра класса. Атрибуты сделать защищенными. Определить метод расчета массы асфальта, необходимого для покрытия всего дорожного полотна. Использовать формулу: длина * ширина * масса асфальта для покрытия одного кв метра дороги асфальтом, толщиной в 1 см * чи сло см толщины полотна. Проверить работу метода. +Например: 20м * 5000м * 25кг * 5см = 12500 т +3. Реализовать базовый класс Worker (работник), в котором определить атрибуты: name, surname, position (должность), income (доход). Последний атрибут должен быть защищенным и ссылаться на словарь, содержащий элементы: оклад и премия, например, {"wage": wage, "bonus": bonus}. Создать класс Position (должность) на базе класса Worker. В классе Position реализовать методы получения полного имени сотрудника (get_full_name) и дохода с учетом премии (get_total_income). Проверить работу примера на реальных данных (создать экземпляры класса Position, передать данные, проверить значения атрибутов, вызвать методы экземпляров). +4. Реализуйте базовый класс Car. У данного класса должны быть следующие атрибуты: speed, color, name, is_police (булево). А также методы: go, stop, turn(direction), которые должны сообщать, что машина поехала, остановилась, повернула (куда). Опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar. Добавьте в базовый класс метод show_speed, который должен показывать текущую скорость автомобиля. Для классов TownCar и WorkCar переопределите метод show_speed. При значении скорости свыше 60 (TownCar) и 40 (WorkCar) должно выводиться сообщение о превышении скорости. +Создайте экземпляры классов, передайте значения атрибутов. Выполните доступ к атрибутам, выведите результат. Выполните вызов методов и также покажите результат. +5. Реализовать класс Stationery (канцелярская принадлежность). Определить в нем атрибут title (название) и метод draw (отрисовка). Метод выводит сообщение “Запуск отрисовки.” Создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер). В каждом из классов реализовать переопределение метода draw. Для каждого из классов методы должен выводить уникальное сообщение. Создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра. diff --git a/tmp.py b/tmp.py new file mode 100644 index 0000000..34e458a --- /dev/null +++ b/tmp.py @@ -0,0 +1,7 @@ +import time +from lesson_6_task_1 import TrafficLight + +light = TrafficLight() + +light.running(10) + diff --git a/tmp_task_2.py b/tmp_task_2.py new file mode 100644 index 0000000..ee3faa8 --- /dev/null +++ b/tmp_task_2.py @@ -0,0 +1,4 @@ +from lesson_6_task_2 import Road + +m_69 = Road(20, 5000) +print(m_69.calc()) \ No newline at end of file diff --git a/tmp_task_3.py b/tmp_task_3.py new file mode 100644 index 0000000..7c5331d --- /dev/null +++ b/tmp_task_3.py @@ -0,0 +1,11 @@ +'''Проверить работу примера на реальных данных (создать экземпляры класса Position, передать данные, проверить значения атрибутов, вызвать методы экземпляров).''' + +from lesson_6_task_3 import Worker +from lesson_6_task_3 import Position + +unit = Position('Dilly', 'Jonson', 'engineer', 1000, 6000) +print(unit.name) +print(unit.surname) +print(unit.position) +unit.get_full_name() +unit.get_total_income() \ No newline at end of file diff --git a/tmp_task_4.py b/tmp_task_4.py new file mode 100644 index 0000000..f2a0818 --- /dev/null +++ b/tmp_task_4.py @@ -0,0 +1,10 @@ +'''Опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar. Добавьте в базовый класс метод show_speed, который должен показывать текущую скорость автомобиля. Для классов TownCar и WorkCar переопределите метод show_speed. При значении скорости свыше 60 (TownCar) и 40 (WorkCar) должно выводиться сообщение о превышении скорости. +''' +from lesson_6_task_4 import Car + +vehicle = Car(100, 'red', 'tesla', False) + +vehicle.go() +vehicle.stop() +vehicle.turn('left') +