From 61420faaad2fdbc29a28a1999053f26d54bf6621 Mon Sep 17 00:00:00 2001 From: "sofa.shvaryova" Date: Tue, 19 Jan 2021 20:58:36 +0300 Subject: [PATCH 1/8] added 6 hw --- 6/6_1.py | 42 +++++++++++++++++++++++++++++ 6/6_2.py | 21 +++++++++++++++ 6/6_3.py | 35 +++++++++++++++++++++++++ 6/6_4.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6/6_5.py | 45 +++++++++++++++++++++++++++++++ 5 files changed, 223 insertions(+) create mode 100644 6/6_1.py create mode 100644 6/6_2.py create mode 100644 6/6_3.py create mode 100644 6/6_4.py create mode 100644 6/6_5.py diff --git a/6/6_1.py b/6/6_1.py new file mode 100644 index 0000000..92b65a8 --- /dev/null +++ b/6/6_1.py @@ -0,0 +1,42 @@ +# 1. Создать класс TrafficLight (светофор) и определить у него один атрибут color (цвет) и метод running (запуск). +# Атрибут реализовать как приватный. В рамках метода реализовать переключение светофора в режимы: красный, желтый, +# зеленый. Продолжительность первого состояния (красный) составляет 7 секунд, второго (желтый) — 2 секунды, третьего +# (зеленый) — на ваше усмотрение. Переключение между режимами должно осуществляться только в указанном порядке +# (красный, желтый, зеленый). Проверить работу примера, создав экземпляр и вызвав описанный метод. +# Задачу можно усложнить, реализовав проверку порядка режимов, и при его нарушении выводить соответствующее +# сообщение и завершать скрипт. + +from time import sleep + + +class TrafficLight: + __color = [('красный', 7), ('желтый', 2), ('зеленый', 6)] + + def checkout_data(self): + """ проверка данных и порядка смены цветов""" + colors = ['красный', 'желтый', 'зеленый'] + for element in self.__color: + if element[0] not in colors: + print('Некорректные цвета') + elif self.__color[0][0] != colors[0] or self.__color[1][0] != colors[1] or self.__color[2][0] != colors[2]: + print('Задан неправильный порядок смены цветов') + elif self.__color[0][1] != 7 or self.__color[1][1] != 2: + print('Некорректное время ожидания') + + def changing_colors(self): + for color in self.__color: + print(color[0]) + sleep(color[1]) + + def running(self): + n = 3 + self.checkout_data() + i = 0 + while i < n: + self.changing_colors() + i += 1 + + +if __name__ == '__main__': + t = TrafficLight() + t.running() diff --git a/6/6_2.py b/6/6_2.py new file mode 100644 index 0000000..e620ed2 --- /dev/null +++ b/6/6_2.py @@ -0,0 +1,21 @@ +# 2. Реализовать класс Road (дорога), в котором определить атрибуты: length (длина), width (ширина). Значения данных +# атрибутов должны передаваться при создании экземпляра класса. Атрибуты сделать защищенными. Определить метод расчета +# массы асфальта, необходимого для покрытия всего дорожного полотна. Использовать формулу: +# длина * ширина * масса асфальта для покрытия одного кв метра дороги асфальтом, толщиной в 1 см * число см +# толщины полотна. Проверить работу метода. +# Например: 20м * 5000м * 25кг * 5см = 12500 т + +class Road: + def __init__(self, length, width): + self._length = length + self._width = width + + def mass_calculation(self): + """Расчет массы асфальта, необходимого для покрытия всего дорожного полотна. Формула: + длина * ширина * (масса асфальта для покрытия 1 м2 дороги асфальтом, толщиной в 1 см) * толщина в см""" + print('Масса асфальта в тоннах: ') + return self._length * self._width * 25 * 5 / 1000 + + +r = Road(length=5000, width=20) +print(r.mass_calculation()) diff --git a/6/6_3.py b/6/6_3.py new file mode 100644 index 0000000..2e47232 --- /dev/null +++ b/6/6_3.py @@ -0,0 +1,35 @@ +# 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, income): + self.name = name + self.surname = surname + self.position = position + self._income = income + + +class Position(Worker): + + def __init__(self, name, surname, position, income): + super().__init__(name, surname, position, income) + self._income_value = self._income.get('wage') + self._income.get('bonus') + + def get_full_name(self): + """Метод получения полного имени сотрудника""" + return f'Полное имя: {self.name} {self.surname}' + + def get_total_income(self): + """Метод получения дохода с учетом премии""" + return f'Доход с учетом премии: {self._income_value} руб.' + + +income_ivanov = {'wage': 100000, 'bonus': 20000} +p = Position(name='Иван', surname='Иванов', position='пилот', income=income_ivanov) +print(p.get_full_name()) +print(p.get_total_income()) + diff --git a/6/6_4.py b/6/6_4.py new file mode 100644 index 0000000..2b79f3d --- /dev/null +++ b/6/6_4.py @@ -0,0 +1,80 @@ +# 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, name, speed, color, is_police): + self.name = name + self.speed = speed + self.color = color + self.is_police = is_police + + def show_speed(self): + return f'Текущая скорость автомобиля: {self.speed}' + + def go(self): + print('машина поехала') + + def stop(self): + print('машина остановилась') + + def turn_direction(self): + print('машина повернула') + + +class TownCar(Car): + def __init__(self, name, speed, color, is_police): + super().__init__(name, speed, color, is_police) + + def show_speed(self): + if self.speed <= 60: + return f'Текущая скорость автомобиля: {self.speed}' + else: + return f'Превышение установленной скорости движения транспортного средства, равной 60 км/ч!!!' \ + f'Текущая скорость автомобиля: {self.speed}' + + +class SportCar(Car): + def __init__(self, name, speed, color, is_police): + super().__init__(name, speed, color, is_police) + + +class WorkCar(Car): + def __init__(self, name, speed, color, is_police): + super().__init__(name, speed, color, is_police) + + def show_speed(self): + if self.speed <= 40: + return f'Текущая скорость автомобиля: {self.speed}' + else: + return f'Превышение установленной скорости движения транспортного средства, равной 40 км/ч!!!' \ + f'Текущая скорость автомобиля: {self.speed}' + + +class PoliceCar(Car): + def __init__(self, name, speed, color, is_police): + super().__init__(name, speed, color, is_police) + + +t = TownCar(speed=48, color='green', name='УАЗ-3303', is_police=False) +s = SportCar(speed=180, color='red', name='Ferrari 488', is_police=False) +w = WorkCar(speed=50, color='black', name='ВАЗ-2109', is_police=False) +p = PoliceCar(speed=80, color='white', name='UAZ Patriot', is_police=True) + +print(t.speed) +print(t.show_speed()) + +print(s.color) +s.go() + +print(w.name) +print(w.show_speed()) + +print(p.is_police) +p.turn_direction() +p.stop() diff --git a/6/6_5.py b/6/6_5.py new file mode 100644 index 0000000..d0b9e6f --- /dev/null +++ b/6/6_5.py @@ -0,0 +1,45 @@ +# 5. Реализовать класс Stationery (канцелярская принадлежность). Определить в нем атрибут title (название) и +# метод draw (отрисовка). Метод выводит сообщение “Запуск отрисовки.” Создать три дочерних класса Pen (ручка), +# Pencil (карандаш), Handle (маркер). В каждом из классов реализовать переопределение метода draw. Для каждого из +# классов методы должен выводить уникальное сообщение. Создать экземпляры классов и проверить, что выведет описанный +# метод для каждого экземпляра. + +class Stationery: + def __init__(self, title): + self.title = title + + def draw(self): + print('Запуск отрисовки.') + + +class Pen(Stationery): + def __init__(self, title): + super().__init__(title) + + def draw(self): + print('Запуск отрисовки ручкой.') + + +class Pensil(Stationery): + def __init__(self, title): + super().__init__(title) + + def draw(self): + print('Запуск отрисовки карандашом.') + + +class Handle(Stationery): + def __init__(self, title): + super().__init__(title) + + def draw(self): + print('Запуск отрисовки маркером.') + + +pen = Pen('black') +pensill = Pensil('blue') +handle = Handle('red') + +pen.draw() +pensill.draw() +handle.draw() From 1367d0c3cb4fa430f07e92d451c43e0bf5a1bedd Mon Sep 17 00:00:00 2001 From: "sofa.shvaryova" Date: Wed, 20 Jan 2021 15:01:30 +0300 Subject: [PATCH 2/8] updated --- 6/6_2.py | 12 ++++++++---- 6/6_3.py | 14 +++++++------- 6/6_4.py | 28 +++++++++++++--------------- 6/6_5.py | 4 ++-- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/6/6_2.py b/6/6_2.py index e620ed2..65a121b 100644 --- a/6/6_2.py +++ b/6/6_2.py @@ -6,6 +6,9 @@ # Например: 20м * 5000м * 25кг * 5см = 12500 т class Road: + _mass_for_one_m2 = 25 + _thickness = 5 + def __init__(self, length, width): self._length = length self._width = width @@ -13,9 +16,10 @@ def __init__(self, length, width): def mass_calculation(self): """Расчет массы асфальта, необходимого для покрытия всего дорожного полотна. Формула: длина * ширина * (масса асфальта для покрытия 1 м2 дороги асфальтом, толщиной в 1 см) * толщина в см""" - print('Масса асфальта в тоннах: ') - return self._length * self._width * 25 * 5 / 1000 + full_mass = self._length * self._width * self._mass_for_one_m2 * self._thickness + return f'Масса асфальта в тоннах: {full_mass/1000}' -r = Road(length=5000, width=20) -print(r.mass_calculation()) +if __name__ == '__main__': + r = Road(length=5000, width=20) + print(r.mass_calculation()) diff --git a/6/6_3.py b/6/6_3.py index 2e47232..b441633 100644 --- a/6/6_3.py +++ b/6/6_3.py @@ -17,7 +17,7 @@ class Position(Worker): def __init__(self, name, surname, position, income): super().__init__(name, surname, position, income) - self._income_value = self._income.get('wage') + self._income.get('bonus') + self._full_income_value = self._income.get('wage') + self._income.get('bonus') def get_full_name(self): """Метод получения полного имени сотрудника""" @@ -25,11 +25,11 @@ def get_full_name(self): def get_total_income(self): """Метод получения дохода с учетом премии""" - return f'Доход с учетом премии: {self._income_value} руб.' + return f'Доход с учетом премии: {self._full_income_value} руб.' -income_ivanov = {'wage': 100000, 'bonus': 20000} -p = Position(name='Иван', surname='Иванов', position='пилот', income=income_ivanov) -print(p.get_full_name()) -print(p.get_total_income()) - +if __name__ == '__main__': + income_ivanov = {'wage': 100000, 'bonus': 20000} + p = Position(name='Иван', surname='Иванов', position='пилот', income=income_ivanov) + print(p.get_full_name()) + print(p.get_total_income()) diff --git a/6/6_4.py b/6/6_4.py index 2b79f3d..11e7d3f 100644 --- a/6/6_4.py +++ b/6/6_4.py @@ -15,7 +15,7 @@ def __init__(self, name, speed, color, is_police): self.is_police = is_police def show_speed(self): - return f'Текущая скорость автомобиля: {self.speed}' + print(f'Текущая скорость автомобиля: {self.speed}') def go(self): print('машина поехала') @@ -33,10 +33,10 @@ def __init__(self, name, speed, color, is_police): def show_speed(self): if self.speed <= 60: - return f'Текущая скорость автомобиля: {self.speed}' + print(f'Текущая скорость автомобиля: {self.speed}') else: - return f'Превышение установленной скорости движения транспортного средства, равной 60 км/ч!!!' \ - f'Текущая скорость автомобиля: {self.speed}' + print(f'Превышение установленной скорости движения транспортного средства, равной 60 км/ч!!!' \ + f'Текущая скорость автомобиля: {self.speed}') class SportCar(Car): @@ -50,10 +50,10 @@ def __init__(self, name, speed, color, is_police): def show_speed(self): if self.speed <= 40: - return f'Текущая скорость автомобиля: {self.speed}' + print(f'Текущая скорость автомобиля: {self.speed}') else: - return f'Превышение установленной скорости движения транспортного средства, равной 40 км/ч!!!' \ - f'Текущая скорость автомобиля: {self.speed}' + print(f'Превышение установленной скорости движения транспортного средства, равной 40 км/ч!!!' \ + f'Текущая скорость автомобиля: {self.speed}') class PoliceCar(Car): @@ -66,15 +66,13 @@ def __init__(self, name, speed, color, is_police): w = WorkCar(speed=50, color='black', name='ВАЗ-2109', is_police=False) p = PoliceCar(speed=80, color='white', name='UAZ Patriot', is_police=True) -print(t.speed) -print(t.show_speed()) +print(t.__dict__) +print(s.__dict__) +print(w.__dict__) +print(p.__dict__) -print(s.color) +t.show_speed() s.go() - -print(w.name) -print(w.show_speed()) - -print(p.is_police) +w.show_speed() p.turn_direction() p.stop() diff --git a/6/6_5.py b/6/6_5.py index d0b9e6f..f6b21c2 100644 --- a/6/6_5.py +++ b/6/6_5.py @@ -37,9 +37,9 @@ def draw(self): pen = Pen('black') -pensill = Pensil('blue') +pensil = Pensil('blue') handle = Handle('red') pen.draw() -pensill.draw() +pensil.draw() handle.draw() From 1a608aca69ba94dc3075f64cf15bfb4ed8d065fc Mon Sep 17 00:00:00 2001 From: "sofa.shvaryova" Date: Wed, 20 Jan 2021 15:04:29 +0300 Subject: [PATCH 3/8] updated --- 6/6_4.py | 35 ++++++++++++++++++++--------------- 6/6_5.py | 15 ++++++++------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/6/6_4.py b/6/6_4.py index 11e7d3f..f4e9f44 100644 --- a/6/6_4.py +++ b/6/6_4.py @@ -61,18 +61,23 @@ def __init__(self, name, speed, color, is_police): super().__init__(name, speed, color, is_police) -t = TownCar(speed=48, color='green', name='УАЗ-3303', is_police=False) -s = SportCar(speed=180, color='red', name='Ferrari 488', is_police=False) -w = WorkCar(speed=50, color='black', name='ВАЗ-2109', is_police=False) -p = PoliceCar(speed=80, color='white', name='UAZ Patriot', is_police=True) - -print(t.__dict__) -print(s.__dict__) -print(w.__dict__) -print(p.__dict__) - -t.show_speed() -s.go() -w.show_speed() -p.turn_direction() -p.stop() + + + + +if __name__ == '__main__': + t = TownCar(speed=48, color='green', name='УАЗ-3303', is_police=False) + s = SportCar(speed=180, color='red', name='Ferrari 488', is_police=False) + w = WorkCar(speed=50, color='black', name='ВАЗ-2109', is_police=False) + p = PoliceCar(speed=80, color='white', name='UAZ Patriot', is_police=True) + + print(t.__dict__) + print(s.__dict__) + print(w.__dict__) + print(p.__dict__) + + t.show_speed() + s.go() + w.show_speed() + p.turn_direction() + p.stop() diff --git a/6/6_5.py b/6/6_5.py index f6b21c2..faf295a 100644 --- a/6/6_5.py +++ b/6/6_5.py @@ -36,10 +36,11 @@ def draw(self): print('Запуск отрисовки маркером.') -pen = Pen('black') -pensil = Pensil('blue') -handle = Handle('red') - -pen.draw() -pensil.draw() -handle.draw() +if __name__ == '__main__': + pen = Pen('black') + pensil = Pensil('blue') + handle = Handle('red') + + pen.draw() + pensil.draw() + handle.draw() From 432d782d355af116116e3e7642083665f1851a01 Mon Sep 17 00:00:00 2001 From: "sofa.shvaryova" Date: Wed, 20 Jan 2021 15:05:02 +0300 Subject: [PATCH 4/8] updated --- 6/6_4.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/6/6_4.py b/6/6_4.py index f4e9f44..949acb2 100644 --- a/6/6_4.py +++ b/6/6_4.py @@ -61,10 +61,6 @@ def __init__(self, name, speed, color, is_police): super().__init__(name, speed, color, is_police) - - - - if __name__ == '__main__': t = TownCar(speed=48, color='green', name='УАЗ-3303', is_police=False) s = SportCar(speed=180, color='red', name='Ferrari 488', is_police=False) From 55e0549f5a22729ef4391269a03e6ed6a168e44d Mon Sep 17 00:00:00 2001 From: "sofa.shvaryova" Date: Sat, 23 Jan 2021 01:48:29 +0300 Subject: [PATCH 5/8] 1 --- 7/7_1.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 7/7_1.py diff --git a/7/7_1.py b/7/7_1.py new file mode 100644 index 0000000..a83dafa --- /dev/null +++ b/7/7_1.py @@ -0,0 +1,42 @@ +# 1. Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса (метод __init__()), который должен +# принимать данные (список списков) для формирования матрицы. +# Подсказка: матрица — система некоторых математических величин, расположенных в виде прямоугольной схемы. +# Примеры матриц вы найдете в методичке. +# Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в привычном виде. +# Далее реализовать перегрузку метода __add__() для реализации операции сложения двух объектов класса Matrix +# (двух матриц). Результатом сложения должна быть новая матрица. +# Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой строки первой матрицы складываем +# с первым элементом первой строки второй матрицы и т.д. +from random import randint +class Matrix: + def __init__(self, spisok_spiskov): + self.spisok_spiskov = spisok_spiskov + + def __str__(self): + for i in self.spisok_spiskov: + for j in i: + print(j, end=' ') + print(' ') + print(' ') + + def __add__(self, other): + result_matrix = [] + for i in range(len(self.spisok_spiskov)): + result_line = [] + for j in range(len(self.spisok_spiskov[0])): + result_line.append(int(self.spisok_spiskov[i][j]) + int(other.spisok_spiskov[i][j])) + result_matrix.append(result_line) + return Matrix(result_matrix) + +m = [[randint(-50, 50) for i in range(3)] for j in range(3)] +m2 = [[randint(-50, 50) for i in range(3)] for j in range(3)] +m3 = [[randint(-50, 50) for i in range(3)] for j in range(3)] +test_matrix = Matrix(m) +test_matrix2 = Matrix(m2) +test_matrix3 = Matrix(m3) +# test_matrix.__str__() +# test_matrix2.__str__() +# test_matrix3.__str__() + +print(test_matrix + test_matrix2 + test_matrix3) +c = 1 \ No newline at end of file From e7c3e732e9c0d0eea7374d49a2c1d7b339e0c1e4 Mon Sep 17 00:00:00 2001 From: "sofa.shvaryova" Date: Sat, 23 Jan 2021 02:01:11 +0300 Subject: [PATCH 6/8] 1 upgr --- 7/7_1.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/7/7_1.py b/7/7_1.py index a83dafa..b6ec390 100644 --- a/7/7_1.py +++ b/7/7_1.py @@ -8,16 +8,14 @@ # Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой строки первой матрицы складываем # с первым элементом первой строки второй матрицы и т.д. from random import randint + + class Matrix: def __init__(self, spisok_spiskov): self.spisok_spiskov = spisok_spiskov def __str__(self): - for i in self.spisok_spiskov: - for j in i: - print(j, end=' ') - print(' ') - print(' ') + return str('\n'.join(['\t'.join([str(i) for i in j]) for j in self.spisok_spiskov])) def __add__(self, other): result_matrix = [] @@ -28,15 +26,17 @@ def __add__(self, other): result_matrix.append(result_line) return Matrix(result_matrix) + m = [[randint(-50, 50) for i in range(3)] for j in range(3)] m2 = [[randint(-50, 50) for i in range(3)] for j in range(3)] m3 = [[randint(-50, 50) for i in range(3)] for j in range(3)] test_matrix = Matrix(m) test_matrix2 = Matrix(m2) test_matrix3 = Matrix(m3) -# test_matrix.__str__() -# test_matrix2.__str__() -# test_matrix3.__str__() - +print(test_matrix.__str__()) +print(' ') +print(test_matrix2.__str__()) +print(' ') +print(test_matrix3.__str__()) +print(' ') print(test_matrix + test_matrix2 + test_matrix3) -c = 1 \ No newline at end of file From d44a4786c96bacd1f4a42ea687c40a12d3eb56c4 Mon Sep 17 00:00:00 2001 From: "sofa.shvaryova" Date: Sat, 23 Jan 2021 02:20:08 +0300 Subject: [PATCH 7/8] 2 --- 7/7_2.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 7/7_2.py diff --git a/7/7_2.py b/7/7_2.py new file mode 100644 index 0000000..2fd1e8c --- /dev/null +++ b/7/7_2.py @@ -0,0 +1,46 @@ +# 2. Реализовать проект расчета суммарного расхода ткани на производство одежды. Основная сущность (класс) этого +# проекта — одежда, которая может иметь определенное название. К типам одежды в этом проекте относятся пальто и костюм. +# У этих типов одежды существуют параметры: размер (для пальто) и рост (для костюма). Это могут быть обычные числа: +# V и H, соответственно. +# Для определения расхода ткани по каждому типу одежды использовать формулы: для пальто (V/6.5 + 0.5), для костюма +# (2 * H + 0.3). Проверить работу этих методов на реальных данных. +# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке знания: реализовать +# абстрактные классы для основных классов проекта, проверить на практике работу декоратора @property. + +from abc import abstractmethod, ABC + + +class Clothes(ABC): + def __init__(self, name): + self.name = name + + @property + @abstractmethod + def fabric_consumption_calc(self): + pass + + +class Coat(Clothes): + def __init__(self, name, size): + super(Coat, self).__init__(name) + self.size = size + + + def fabric_consumption_calc(self): + return round(self.size / 6.5 + 0.5, 2) + + +class Suit(Clothes): + def __init__(self, name, height): + super(Suit, self).__init__(name) + self.height = height + + def fabric_consumption_calc(self): + return round(2 * self.height + 0.3, 2) + + +if __name__ == '__main__': + c = Coat('красное пальто', size=42) + s = Suit('чёрный костюм', 170) + print(c.fabric_consumption_calc()) + print(s.fabric_consumption_calc()) From 11726f4eba3004d9ae31f37170763cb188dfddb4 Mon Sep 17 00:00:00 2001 From: "sofa.shvaryova" Date: Sat, 23 Jan 2021 03:53:25 +0300 Subject: [PATCH 8/8] 3 --- 7/7_3.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 7/7_3.py diff --git a/7/7_3.py b/7/7_3.py new file mode 100644 index 0000000..bbebccb --- /dev/null +++ b/7/7_3.py @@ -0,0 +1,70 @@ +# 3. Реализовать программу работы с органическими клетками. Необходимо создать класс Клетка. В его конструкторе +# инициализировать параметр, соответствующий количеству клеток (целое число). В классе должны быть реализованы +# методы перегрузки арифметических операторов: сложение (__add__()), вычитание (__sub__()), умножение (__mul__()), +# деление (__truediv__()).Данные методы должны применяться только к клеткам и выполнять увеличение, уменьшение, +# умножение и обычное (не целочисленное) деление клеток, соответственно. В методе деления должно осуществляться +# округление значения до целого числа. +# Сложение. Объединение двух клеток. При этом число ячеек общей клетки должно равняться сумме ячеек исходных +# двух клеток. +# Вычитание. Участвуют две клетки. Операцию необходимо выполнять только если разность количества ячеек двух клеток +# больше нуля, иначе выводить соответствующее сообщение. +# Умножение. Создается общая клетка из двух. Число ячеек общей клетки определяется как произведение количества ячеек +# этих двух клеток. +# Деление. Создается общая клетка из двух. Число ячеек общей клетки определяется как целочисленное деление количества +# ячеек этих двух клеток. +# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и количество ячеек в ряду. Данный +# метод позволяет организовать ячейки по рядам. +# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n равно переданному +# аргументу. Если ячеек на формирование ряда не хватает, то в последний ряд записываются все оставшиеся. +# Например, количество ячеек клетки равняется 12, количество ячеек в ряду — 5. Тогда метод make_order() вернет +# строку: *****\n*****\n**. +# Или, количество ячеек клетки равняется 15, количество ячеек в ряду — 5. Тогда метод make_order() вернет +# строку: *****\n*****\n*****. + +class Cell: + def __init__(self, quantity): + self.quantity = int(quantity) + + def __add__(self, other): + return Cell(self.quantity + other.quantity) + + def __sub__(self, other): + if int(self.quantity) > int(other.quantity): + return Cell(self.quantity - other.quantity) + else: + print('Разность количества ячеек двух клеток меньше нуля') + + def __mul__(self, other): + return Cell(self.quantity * other.quantity) + + def __truediv__(self, other): + try: + return Cell(round(self.quantity // other.quantity)) + except Exception as err: + print("Ошибка:", err) + + def make_order(self, quantity_in_row): + try: + number_of_rows = int(self.quantity / int(quantity_in_row)) + row = str() + if self.quantity % quantity_in_row == 0: + for i in range(number_of_rows - 1): + row += f"{'*' * quantity_in_row}\\n" + row += f"{'*' * quantity_in_row}" + else: + for i in range(number_of_rows): + row += f"{'*' * quantity_in_row}\\n" + row += f"{'*' * (self.quantity % quantity_in_row)}" + return row + except Exception as err: + print("Ошибка:", err) + + +c1 = Cell(12) +c2 = Cell(15) +print((c1 + c2).quantity) +print((c2 - c1).quantity) +print((c1 * c2).quantity) +print((c2 / c1).quantity) +print(c1.make_order(5)) +print(c2.make_order(5))