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
35 changes: 35 additions & 0 deletions task-1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""
Задание:
Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск).
Атрибут реализовать как приватный. В рамках метода реализовать переключение светофора в режимы: красный, желтый,зеленый.
Продолжительность первого состояния (красный) составляет 7 секунд, второго (желтый) — 2 секунды,
третьего (зеленый) — на ваше усмотрение.
Переключение между режимами должно осуществляться только в указанном порядке (красный, желтый, зеленый).
Проверить работу примера, создав экземпляр и вызвав описанный метод.
Задачу можно усложнить, реализовав проверку порядка режимов,
и при его нарушении выводить соответствующее сообщение и завершать скрипт.
"""


import itertools
import time


class TrafficLight:

__lights = {"красный": 7, "желтый": 2, "зеленый": 7}

def __gen_cycle(self):
for c in itertools.cycle(["красный", "желтый", "зеленый"]):
yield self.__lights[c]

__color = None

def running(self):
for self.__color in itertools.cycle(["красный", "желтый", "зеленый"]):
print("Текущий цвет: {}".format(self.__color))
time.sleep(self.__lights[self.__color])


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

__length = None
__width = None
__deep = None
__weight = None

def calc(self):
return int(self.__deep * self.__weight * self.__length * self.__width)

def __init__(self, length, width, deep=5, weight=25):
self.__length = length
self.__width = width
self.__deep = deep / 1000
self.__weight = weight

Road1 = Road(20, 5000)
print("{} Т".format(Road1.calc()))
35 changes: 35 additions & 0 deletions task-3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""
Задание:
Реализовать базовый класс Worker (работник), в котором определить атрибуты: name, surname, position (должность),
income (доход). Последний атрибут должен быть защищенным и ссылаться на словарь, содержащий элементы: оклад и премия,
например, {"wage": wage, "bonus": bonus}. Создать класс Position (должность) на базе класса Worker.
В классе Position реализовать методы получения полного имени сотрудника (get_full_name)
и дохода с учетом премии (get_total_income).
Проверить работу примера на реальных данных (создать экземпляры класса Position,
передать данные, проверить значения атрибутов, вызвать методы экземпляров).
"""

di = {"wage": 43000, "bonus": 25000}


class Worker:
name = None
surname = None
position = None
_income = di


class Position(Worker):
def get_full_name(self):
return "{} {}".format(self.name, self.surname)

def get_total_income(self):
return sum([value for name, value in self._income.items()])


IvanovIvan = Position()
IvanovIvan.name = "Ivan"
IvanovIvan.surname = "Ivanov"

print(IvanovIvan.get_full_name(), end=" ")
print(IvanovIvan.get_total_income())
74 changes: 74 additions & 0 deletions task-4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
"""
Задание:
Реализуйте базовый класс 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:
speed = 0
color = None
name = None
is_police = False

def __init__(self):
self.is_police = False

def go(self):
pass

def stop(self):
pass

def turn(self, direction):
pass

def show_speed(self):
print("Speed {} kn/h".format(self.speed))

class TownCar(Car):
def show_speed(self):
# 60
print("Speed {} kn/h{}".format(self.speed, "" if self.speed <= 60 else " превышение"))


class WorkCar(Car):
def show_speed(self):
# 40
print("Speed {} kn/h{}".format(self.speed, "" if self.speed <= 40 else " превышение"))

class SportCar(Car):
pass

class PoliceCar(Car):
def __init__(self):
self.is_police = True

A = TownCar()
A.speed = 60
A.color = "red"
A.name = "Name A"
A.show_speed()

B = WorkCar()
B.speed = 60
B.color = "green"
B.name = "Name B"
B.show_speed()

C = SportCar()
C.speed = 60
C.color = "blue"
C.name = "Name C"
C.show_speed()

D = PoliceCar()
D.speed = 60
D.color = "transparent"
D.name = "Name D"
D.show_speed()
34 changes: 34 additions & 0 deletions task-5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""
Задание:
Реализовать класс Stationery (канцелярская принадлежность).
Определить в нем атрибут title (название) и метод draw (отрисовка).
Метод выводит сообщение “Запуск отрисовки.” Создать три дочерних класса Pen (ручка), Pencil (карандаш), Handle (маркер).
В каждом из классов реализовать переопределение метода draw.
Для каждого из классов метод должен выводить уникальное сообщение. Создать экземпляры классов и проверить,
что выведет описанный метод для каждого экземпляра.
"""

class Stationery:
title = None

def draw(self):
print("Запуск отрисовки. Объект {}".format(self.title))

class Pen(Stationery):
title = "ручка"

class Pencil(Stationery):
title = "карандаш"

class Handle(Stationery):
title = "маркер"


A = Pen()
A.draw()

B = Pencil()
B.draw()

C = Handle()
C.draw()