From 197db57fe7e15a72ce3807df0407e1ad9ce5b402 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 5 Jul 2021 13:03:26 +0300 Subject: [PATCH 1/6] Update and rename README.md to hw6.py --- README.md | 1 - hw6.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) delete mode 100644 README.md create mode 100644 hw6.py diff --git a/README.md b/README.md deleted file mode 100644 index fdc793e..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -python diff --git a/hw6.py b/hw6.py new file mode 100644 index 0000000..d3327a2 --- /dev/null +++ b/hw6.py @@ -0,0 +1,49 @@ +# 1. Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) +# и метод running (запуск). Атрибут реализовать как приватный. В рамках метода +# реализовать переключение светофора в режимы: красный, желтый, зеленый. +# Продолжительность первого состояния (красный) составляет 7 секунд, второго (желтый) — 2 секунды, +# третьего (зеленый) — на ваше усмотрение. Переключение между режимами должно осуществляться +# только в указанном порядке (красный, желтый, зеленый). Проверить работу примера, +# создав экземпляр и вызвав описанный метод. + +from time import sleep +class TrafficLight: + __color = ['Красный', 'Желтый', 'Зеленый'] + def running(self): + i = 0 + while i != 3: + print(TrafficLight.__color[i]) + if i == 0: + sleep(7) + elif i == 1: + sleep(2) + elif i == 2: + sleep(5) + i += 1 +t = TrafficLight() +t.running() + +# 2. Реализовать класс Road (дорога), в котором определить атрибуты: +# length (длина), width (ширина). Значения данных атрибутов должны передаваться при создании +# экземпляра класса. Атрибуты сделать защищенными. Определить метод расчета массы асфальта, +# необходимого для покрытия всего дорожного полотна. +# Использовать формулу: длина * ширина * масса асфальта для покрытия одного кв метра +# дороги асфальтом, толщиной в 1 см * число см толщины полотна. +# Проверить работу метода. +# Например: 20м * 5000м * 25кг * 5см = 12500 т + +class Road: + def __init__(self, length, width): + self.weight = 25 + self.height = 5 + self._length = length + self._width = width + + def asphalt_mass(self): + res = self._length * self._width * self.weight * self.height / 1000 + print(f'Для покрытия всей дороги неободимо {round(res)} асфальта') + +r = Road(5000, 20) +r.asphalt_mass() + + From ee35ec0c76dc10937786298f3abebc570eed08bb Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 5 Jul 2021 13:10:05 +0300 Subject: [PATCH 2/6] Update hw6.py --- hw6.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hw6.py b/hw6.py index d3327a2..dfd4656 100644 --- a/hw6.py +++ b/hw6.py @@ -7,9 +7,13 @@ # создав экземпляр и вызвав описанный метод. from time import sleep + + class TrafficLight: __color = ['Красный', 'Желтый', 'Зеленый'] - def running(self): + + @staticmethod + def running(): i = 0 while i != 3: print(TrafficLight.__color[i]) @@ -20,6 +24,8 @@ def running(self): elif i == 2: sleep(5) i += 1 + + t = TrafficLight() t.running() @@ -41,7 +47,8 @@ def __init__(self, length, width): def asphalt_mass(self): res = self._length * self._width * self.weight * self.height / 1000 - print(f'Для покрытия всей дороги неободимо {round(res)} асфальта') + print(f'Для выполнения работ нужно: {round(res)} асфальта') + r = Road(5000, 20) r.asphalt_mass() From 595836e7a32ba3d56e4546502e852b15f254e3f4 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 5 Jul 2021 13:22:31 +0300 Subject: [PATCH 3/6] Update hw6.py --- hw6.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/hw6.py b/hw6.py index dfd4656..8a7df96 100644 --- a/hw6.py +++ b/hw6.py @@ -53,4 +53,35 @@ def asphalt_mass(self): r = Road(5000, 20) r.asphalt_mass() +# 3. Реализовать базовый класс 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, wage, bonus): + self.name = name + self.surname = surname + self.position = position + self._income = {'wage': int(wage), 'bonus': int(bonus)} + + +class Position(Worker): + def __init__(self, name, surname, position, wage, bonus): + Worker.__init__(self, name, surname, position, wage, bonus) + + def get_full_name(self): + return self.name + ' ' + self.surname + + def get_total_income(self): + return self._income['wage'] + self._income['bonus'] + + +p = Position('Myers', 'Glenford', 'Computer scientist', '100000', '10000') +print(p.get_full_name(), p.get_total_income()) From d8c86b8296390d35e6a877d7efbcb6a64aea2750 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 5 Jul 2021 15:34:05 +0300 Subject: [PATCH 4/6] Update hw6.py --- hw6.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/hw6.py b/hw6.py index 8a7df96..c59f7b3 100644 --- a/hw6.py +++ b/hw6.py @@ -85,3 +85,80 @@ def get_total_income(self): p = Position('Myers', 'Glenford', 'Computer scientist', '100000', '10000') print(p.get_full_name(), p.get_total_income()) +# 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) должно выводиться сообщение о превышении скорости. +# Создайте экземпляры классов, передайте значения атрибутов. +# Выполните доступ к атрибутам, выведите результат. Выполните вызов методов и также покажите результат. + +class Car: + + def __init__(self, speed, color, name, is_police=False): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + + def go(self): + return f'{self.name}: go.' + + def stop(self): + return f'\n{self.name}: stopped' + + def turn(self, directions): + return f'\n{self.name} turned: {directions}' + + def speed(self): + return f'speed is: {self.speed}' + + +class TownCar(Car): + def rspeed(self): + if self.speed > 61: + return f'Speed is: {self.speed} - over speed!' + else: + return f'Speed is: {self.name} - ok' + + +class SportCar(Car): + def rspeed(self): + if self.speed > 61: + return f'Speed is: {self.speed} - over speed!' + else: + return f'Speed is: ok' + + +class WorkCar(Car): + @property + def rspeed(self): + if self.speed > 41: + return f'Speed is: {self.speed} - over speed!' + else: + return f'Speed is: ok' + + +class PoliceCar(Car): + def rspeed(self): + if self.speed > 80: + return f'Speed is: {self.speed} - over speed!' + else: + return f'Speed is: ok' + + +TownCar = TownCar(120, 'asphalt', 'KIA', False) +print('\nTownCar:\n' + TownCar.go(), TownCar.rspeed(), TownCar.turn('left'), TownCar.stop()) + +SportCar = SportCar(170, 'white', 'Porsche', False) +print('\nSportCar:\n' + SportCar.go(), SportCar.rspeed(), SportCar.turn('right')) + +WorkCar = WorkCar(40, 'yellow', 'VW', False) +print('\nWorkCar:\n' + WorkCar.go(), WorkCar.rspeed, WorkCar.turn('left'), WorkCar.stop()) + +PoliceCar = PoliceCar(80, 'black', 'Ford', True) +print('\nPoliceCar:\n' + PoliceCar.go(), PoliceCar.rspeed(), PoliceCar.turn('right')) + + From 16faf3d0a19d139c3cc365a67193d3d60c4fd1ad Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 5 Jul 2021 15:57:27 +0300 Subject: [PATCH 5/6] Update hw6.py --- hw6.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/hw6.py b/hw6.py index c59f7b3..60f22ff 100644 --- a/hw6.py +++ b/hw6.py @@ -162,3 +162,41 @@ def rspeed(self): print('\nPoliceCar:\n' + PoliceCar.go(), PoliceCar.rspeed(), PoliceCar.turn('right')) +# 5. Реализовать класс Stationery (канцелярская принадлежность). +# Определить в нем атрибут title (название) и метод draw (отрисовка). +# Метод выводит сообщение “Запуск отрисовки.” Создать три дочерних класса Pen (ручка), +# Pencil (карандаш), Handle (маркер). В каждом из классов реализовать переопределение +# метода draw. +# Для каждого из классов методы должен выводить уникальное сообщение. +# Создать экземпляры классов и проверить, +# что выведет описанный метод для каждого экземпляра. + +class Stationery: + def __init__(self, title): + self.title = title + + def draw(self): + return f'"Запуск отрисовки"' + + +class Pen(Stationery): + def draw(self): + return f'"Запуск отрисовки": {self.title}' + + +class Pencil(Stationery): + def draw(self): + return f'"Запуск отрисовки": {self.title}' + + +class Handle(Stationery): + def draw(self): + return f'"Запуск отрисовки": {self.title}' + + +pen = Pen('Ручкой') +pencil = Pencil('Карандашом') +handle = Handle('Маркером') +print(pen.draw() + '\n' + pencil.draw() + '\n' + handle.draw()) + + From a5b3e22aa0b2d705a8975d7476b135ae81a8f712 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Fri, 9 Jul 2021 20:05:06 +0300 Subject: [PATCH 6/6] Update hw6.py --- hw6.py | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 1 deletion(-) diff --git a/hw6.py b/hw6.py index 60f22ff..354c5c1 100644 --- a/hw6.py +++ b/hw6.py @@ -10,7 +10,7 @@ class TrafficLight: - __color = ['Красный', 'Желтый', 'Зеленый'] + __color = ['RED', 'YELLOW', 'GREEN'] @staticmethod def running(): @@ -29,6 +29,36 @@ def running(): t = TrafficLight() t.running() +#second var: +from time import sleep +class TrafficLight: + __color = ['Красный'] + + def running(self): + print('RED') + sleep(7) + print('YELLOW') + sleep(2) + print('GREEN') + sleep(3) +traf_light = TrafficLight() +traf_light.running() + +#another var: +from time import sleep +class TrafficLight: + __color = ['RED', 'YELLOW', 'GREEN'] + + def running(self): + print('горит ', self.__color[0]) + sleep(7) + print('горит ', self.__color[1]) + sleep(2) + print('горит ', self.__color[2]) + sleep(3) +traf_light = TrafficLight() +traf_light.running() + # 2. Реализовать класс Road (дорога), в котором определить атрибуты: # length (длина), width (ширина). Значения данных атрибутов должны передаваться при создании # экземпляра класса. Атрибуты сделать защищенными. Определить метод расчета массы асфальта, @@ -53,6 +83,22 @@ def asphalt_mass(self): r = Road(5000, 20) r.asphalt_mass() + +# second var: + +class Road: + def __init__(self, length, width): + self._length = length + self._width = width + + def calc(self): + return f'Масса равна: {(self._length * self._width * 25 * 0.05) / 1000} т' + + +road1 = Road(5000, 20) +print(road1.calc()) + + # 3. Реализовать базовый класс Worker (работник), в котором определить атрибуты: # name, surname, position (должность), income (доход). # Последний атрибут должен быть защищенным и ссылаться на словарь, @@ -85,6 +131,24 @@ def get_total_income(self): p = Position('Myers', 'Glenford', 'Computer scientist', '100000', '10000') print(p.get_full_name(), p.get_total_income()) +#second var: +class Worker: + 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 get_full_name(self): + return f'{self.name} {self.surname}' + + @property + def get_total_income(self): + return f'{sum(self._income.values())}' + +worker1 = Position('Myers', 'Glenford', 'Computer scientist', 100000, 10000) +print(worker1.get_full_name(), worker1.get_total_income) + # 4. Реализуйте базовый класс Car. У данного класса должны быть следующие атрибуты: # speed, color, name, is_police (булево). А также методы: go, stop, turn(direction), # которые должны сообщать, что машина поехала, остановилась, повернула (куда). @@ -161,6 +225,64 @@ def rspeed(self): PoliceCar = PoliceCar(80, 'black', 'Ford', True) print('\nPoliceCar:\n' + PoliceCar.go(), PoliceCar.rspeed(), PoliceCar.turn('right')) +# second var: + +class Car: + + def __init__(self, name, color, speed, is_police=False): + self.speed = speed + self.color = color + self.name = name + self.is_police = is_police + print(f'Новая машина: {self.name} цвет: {self.color} полиция? {self.is_police}') + + def go(self): + print(f'Машина {self.name} поехала') + + def stop(self): + print(f'Машина {self.name} остановилась') + + def turn(self, direction): + print(f'Машина {self.name} поевернула {"налево" if direction == 0 else "нааправо"}') + + def speed(self): + print(f'Машина {self.name} скорость {self.speed}') + + +class TownCar(Car): + def speed(self): + print( + f'Машина {self.name} скорость {self.speed} {"Превышение скорости!" if self.speed > 60 else "Скорость нормальная"}') + + +class WorkCar(Car): + def speed(self): + print( + f'Машина {self.name} скорость {self.speed} {"Превышение скорости!" if self.speed > 40 else "Скорость нормальная"}') + + +class SportCar(Car): + pass + + +class PoliceCar(Car): + def __init__(self, name, color, speed, is_police=True): + super().__init__(name, color, speed, is_police) + + +town_car = TownCar('KIA', 'asphalt', 50) +town_car.turn(0) +town_car.speed() + +work_car = WorkCar('Truck', 'blue', 70) +work_car.go() +work_car.speed() + +police_car = PoliceCar('Police', 'white', 120) +police_car.stop() +police_car.speed() +print(police_car.is_police) + # 5. Реализовать класс Stationery (канцелярская принадлежность). # Определить в нем атрибут title (название) и метод draw (отрисовка).