Skip to content

lesson_6 #9

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
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
Binary file added __pycache__/lesson_6_task_1.cpython-36.pyc
Binary file not shown.
Binary file added __pycache__/lesson_6_task_2.cpython-36.pyc
Binary file not shown.
Binary file added __pycache__/lesson_6_task_3.cpython-36.pyc
Binary file not shown.
Binary file added __pycache__/lesson_6_task_4.cpython-36.pyc
Binary file not shown.
18 changes: 18 additions & 0 deletions lesson_6_task_1.py
Original file line number Diff line number Diff line change
@@ -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])
25 changes: 25 additions & 0 deletions lesson_6_task_2.py
Original file line number Diff line number Diff line change
@@ -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
38 changes: 38 additions & 0 deletions lesson_6_task_3.py
Original file line number Diff line number Diff line change
@@ -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'])

97 changes: 97 additions & 0 deletions lesson_6_task_4.py
Original file line number Diff line number Diff line change
@@ -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()
49 changes: 49 additions & 0 deletions lesson_6_task_5.py
Original file line number Diff line number Diff line change
@@ -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')
'''
'''
8 changes: 8 additions & 0 deletions tasklist
Original file line number Diff line number Diff line change
@@ -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. Для каждого из классов методы должен выводить уникальное сообщение. Создать экземпляры классов и проверить, что выведет описанный метод для каждого экземпляра.
7 changes: 7 additions & 0 deletions tmp.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import time
from lesson_6_task_1 import TrafficLight

light = TrafficLight()

light.running(10)

4 changes: 4 additions & 0 deletions tmp_task_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from lesson_6_task_2 import Road

m_69 = Road(20, 5000)
print(m_69.calc())
11 changes: 11 additions & 0 deletions tmp_task_3.py
Original file line number Diff line number Diff line change
@@ -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()
10 changes: 10 additions & 0 deletions tmp_task_4.py
Original file line number Diff line number Diff line change
@@ -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')