diff --git a/task-1.py b/task-1.py new file mode 100644 index 0000000..c60d20d --- /dev/null +++ b/task-1.py @@ -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() \ No newline at end of file diff --git a/task-2.py b/task-2.py new file mode 100644 index 0000000..9a41027 --- /dev/null +++ b/task-2.py @@ -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())) \ No newline at end of file diff --git a/task-3.py b/task-3.py new file mode 100644 index 0000000..dbb0c8e --- /dev/null +++ b/task-3.py @@ -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()) diff --git a/task-4.py b/task-4.py new file mode 100644 index 0000000..e6186f4 --- /dev/null +++ b/task-4.py @@ -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() \ No newline at end of file diff --git a/task-5.py b/task-5.py new file mode 100644 index 0000000..ecc247c --- /dev/null +++ b/task-5.py @@ -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() \ No newline at end of file