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
26 changes: 26 additions & 0 deletions 6th hometask/1th task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import time


# Определение класса Светофор
class TrafficLight:
# Приватный словарь для хранения соответствий цвета сигнала и времени оторажения сигнала
# 'Цвет сигнала': время отображения
__dict_colors = {'red': 7, 'yellow': 2, 'green': 5}

# Метод Запуск светофора
def running(self):
# Защищённая переменная для отображения текущего сигнала светофора
self._color = None

# Для всех ключей в словаре
for self._color in TrafficLight.__dict_colors.keys():
# отобразить текущий сигнал и время отображения
print(f'{self._color}\t\t - wait {TrafficLight.__dict_colors.get(self._color)} second(s)')
# ждать кол-во секунд равное значению ключа в словаре
time.sleep(TrafficLight.__dict_colors.get(self._color))


# Создание объекта класса Светофор
new_trafficlight = TrafficLight()
# Запуск метода Запуск светофора
new_trafficlight.running()
27 changes: 27 additions & 0 deletions 6th hometask/2th task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Определение класса Дорога
class Road:
# Вызор конструктора для получения атрибутов объекта
# Два обяательных аргумента:
# length - длина дороги
# width - ширина дороги
def __init__(self, length, width):
# Запись значений агументов в атрибуты объекта
self._length, self._width = length, width

# Метод Получить стоимость асфальтирования дороги
# Два необязательных аргумента:
# square_cost - затраты на единицу площади
# layers - кол-во слоёв асфальтирования
def get_cover_costs(self, square_cost=1.0, layers=1):
# Вернуть вычисленную стоимость асфальтирования дороги
return f'Asphalt weight: {self._length * self._width * square_cost * layers}'


# Создание объекта класса Дорога
new_road = Road(1000, 10)
# Вывод результата работы метода
print(new_road.get_cover_costs(2.5))

# Тоже самое
yet_another_road = Road(5000, 20)
print(yet_another_road.get_cover_costs(25, 5))
40 changes: 40 additions & 0 deletions 6th hometask/3th task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Определение класса Работник
class Worker:
# Словарь для хранения соответствия должности и зарплаты, премии
# 'Должность': спиок(зарплата, премия)
__dict_worker_wage = {
'Junior': (30000, 15000),
'Middle': (50000, 25000),
'Senior': (75000, 50000)
}

# Получение атрибутов при инициализации объекта, вычисление дохода в соотвествии с должностью
def __init__(self, name, surname, position='Junior'):
# Получение атрибутов из аргументов
self.name, self.surname, self.position = name, surname, position
# Вычисление дохода при помощи обращения к словарю
self._wage = self.__dict_worker_wage.get(self.position)[0] + self.__dict_worker_wage.get(self.position)[1]


# Дочерний класс Должность
class Position(Worker):
# Метод получения полного имени сотрудника
def get_full_name(self):
return f'{self.name} {self.surname}'

# Метод получения дохода сотрудника
def get_total_income(self):
return self._wage


# Создание объектов класса Должность
position_01 = Position('Ivan', 'Ivanov')
position_02 = Position('Petr', 'Petrov', 'Middle')

# Отображение полных имён объектов
print(position_01.get_full_name())
print(position_02.get_full_name())

# Отображение доходов объектов
print(position_01.get_total_income())
print(position_02.get_total_income())
99 changes: 99 additions & 0 deletions 6th hometask/4th task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Определение класса Машина
class Car:
# Получение атрибутов из аргументов:
# name - имя машины, обязательный аргумент
# color - цвет машины, необязательный аргумент, по умолчанию чёрный
# speed - скорость машины, необязательный аргумент, по умолчанию 0 км/ч
# is_police - принадлежность к полиции, необязательный аргумент, по умолчанию Нет
def __init__(self, name, color='Black', speed=0, is_police=False):
self.name, self.color, self.speed, self.is_police = name, color, speed, is_police
self.direction = None

# Метод Поехать
# может принимать аргумент скорость
# если аргумент не указан, то используется текущее значение скорости
def go(self, speed=None):
if speed is not None:
self.speed = speed
print(f'{self.name} is driving {self.speed} kmph')

# Метод Остановиться
def stop(self):
self.speed = 0
print(f'{self.name} has stopped, 0 kmph')

# Метод Повернуть
# обязательный аргумент направление
def turn(self, direction):
self.direction = direction
print(f'{self.name} has turned to {self.direction}')

# Метод Показать скорость
def show_speed(self):
print(f'{self.name}s speed is {self.speed} kmph')


# Определение класса Городская машина
class TownCar(Car):
# Приватная переменная для хранения разрешённой скорости
_allowed_speed = 60

# Переопределение метода Показать скорость
def show_speed(self):
# Если скорость меньше максимальной разрешённой скорости
if self.speed <= self._allowed_speed:
# то отобразить скорость
print(f'{self.name}s speed is {self.speed} kmph')
# иначе
else:
# отобразить скорость и предупреждение
print(f'{self.name}s speed is {self.speed} kmph. '
f'Exceeded legal amount on {self.speed - self._allowed_speed} kmph!')


# Определение класса Спортивная машина
class SportCar(Car):
pass


# Определение класса Рабочая машина
class WorkCar(TownCar):
# Приватная переменная для хранения разрешённой скорости
_allowed_speed = 40

def aaa(self):
print(self._allowed_speed)


# Определение класса Полицейская машина
class PoliceCar(Car):
# Переопределение конструктора
# теперь значение аргумента is_police по умолчание True
def __init__(self, name, color, speed=0, is_police=True):
# обращение к конструктору родительского класса для сохранения атрибутов
super(PoliceCar, self).__init__(name, color, speed, is_police)


print(f'\n', f'_'*30)
# Создание объекта класса Машина и вызов метода Повернуть
new_car = Car('New_car', 'Red', 40)
new_car.turn('Park')

print(f'\n', f'_'*30)
# Создание объекта класса Полицейская машина и вызов метода Остановиться
new_police_car = PoliceCar('New_police_car', 'Blue')
new_police_car.stop()

print(f'\n', f'_'*30)
# Создание объекта класса Рабочая машина и вызов методов Поехать и Показать скорость
new_work_car = WorkCar('New_work_car')
new_work_car.go(50)
new_work_car.show_speed()
new_work_car.aaa()

print(f'\n', f'_'*30)
# Создание объекта класса Городская машина и вызов методов Остановиться и Показать скорость
new_town_car = TownCar('New town car', 'Green', 70, True)
new_town_car.show_speed()
new_town_car.stop()
new_town_car.show_speed()
47 changes: 47 additions & 0 deletions 6th hometask/5th task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Определение родительского класса Канцелярская принаджность
class Stationary:
# Получение атрибута Название из обязательного аргумента при помощи конструктора
def __init__(self, title):
self.title = title

# Метод Отрисовка
def draw(self):
# Отобразить сообщение
print(f'{self.title}:\tЗапуск отрисовки.')


# Определение дочернего класса Ручка
class Pen(Stationary):
# Переопределение метода Отрисовка
def draw(self):
# Отобразить уникальное сообщение
print(f'{self.title}:\tРучка не стирается ластиком.')


# Определение дочернего класса Карандаш
class Pencil(Stationary):
# Переопределение метода Отрисовка
def draw(self):
# Отобразить другое уникальное сообщение
print(f'{self.title}:\tКарандаш стирается ластиком.')


# Определение дочернего класса Маркер
class Handle(Stationary):
# Переопределение метода Отрисовка
def draw(self):
# Уникально ничего не делать
pass


new_stationary = Stationary('Something')
new_stationary.draw()

new_pen = Pen('New_pen')
new_pen.draw()

new_pencil = Pencil('New pencil')
new_pencil.draw()

new_handle = Handle('New handle')
new_handle.draw()