diff --git a/lesson06/home_work/hw06_easy.py b/lesson06/home_work/hw06_easy.py index fe5dc2b11..c27d540e8 100644 --- a/lesson06/home_work/hw06_easy.py +++ b/lesson06/home_work/hw06_easy.py @@ -1,9 +1,128 @@ # Задача-1: Написать класс для фигуры-треугольника, заданного координатами трех точек. # Определить методы, позволяющие вычислить: площадь, высоту и периметр фигуры. +import math + + +class Triangle: + + def __init__(self, x1, y1, x2, y2, x3, y3): + self.x1 = x1 + self.y1 = y1 + self.x2 = x2 + self.y2 = y2 + self.x3 = x3 + self.y3 = y3 + + @property + def __a(self): + return round(math.sqrt((self.x1 - self.x2) ** 2 + (self.y1 - self.y2) ** 2), 2) + + @property + def __b(self): + return round(math.sqrt((self.x3 - self.x2) ** 2 + (self.y3 - self.y2) ** 2), 2) + + @property + def __c(self): + return round(math.sqrt((self.x3 - self.x1) ** 2 + (self.y3 - self.y1) ** 2), 2) + + def perimeter(self): + self.__p = round(self.__a + self.__b + self.__c, 2) + return self.__p + + def area(self): + self.__s = round(math.sqrt((self.__p / 2) * ((self.__p / 2) - self.__a) * ((self.__p / 2) - self.__b) * ((self.__p / 2) - self.__c)), 2) + return self.__s + + @property + def __height_a(self): + return round((2 * self.__s) / self.__a, 2) + + @property + def __height_b(self): + return round((2 * self.__s) / self.__b, 2) + + @property + def __height_c(self): + return round((2 * self.__s) / self.__c, 2) + + def heights(self): + answer = input('Высоту перпендикулярную какой строне считать? (a/b/c)\n').lower() + if answer == 'a': + return self.__height_a + elif answer == 'b': + return self.__height_b + elif answer == 'c': + return self.__height_c + + +sample = Triangle(1, 1, 4, 4, 6, 2) + +print(f'Периметр треугольника: {sample.perimeter()}') +print(f'Площадь треугольника: {sample.area()}') +print(f'Высота треугольника: {sample.heights()}') + + # Задача-2: Написать Класс "Равнобочная трапеция", заданной координатами 4-х точек. # Предусмотреть в классе методы: # проверка, является ли фигура равнобочной трапецией; # вычисления: длины сторон, периметр, площадь. +class IsoscelesTrapezium: + + def __init__(self, x1, y1, x2, y2, x3, y3, x4, y4): + self.x1 = x1 + self.y1 = y1 + self.x2 = x2 + self.y2 = y2 + self.x3 = x3 + self.y3 = y3 + self.x4 = x4 + self.y4 = y4 + + def trapezium_check(self): + self.__ac = round(math.sqrt((self.x1 - self.x3) ** 2 + (self.y1 - self.y3) ** 2), 2) + self.__bd = round(math.sqrt((self.x2 - self.x4) ** 2 + (self.y2 - self.y4) ** 2), 2) + if self.__ac == self.__bd: + print('Фигура является равнобедренной трапецией') + else: + print('Фигура не является равнобедренной трапецией') + + @property + def __check(self): + if self.__ac == self.__bd: + return True + else: + return False + + def sides(self): + if self.__check: + self.__a = round(math.sqrt((self.x1 - self.x2) ** 2 + (self.y1 - self.y2) ** 2), 2) + self.__b = round(math.sqrt((self.x2 - self.x3) ** 2 + (self.y2 - self.y3) ** 2), 2) + self.__c = round(math.sqrt((self.x3 - self.x4) ** 2 + (self.y3 - self.y4) ** 2), 2) + self.__d = round(math.sqrt((self.x4 - self.x1) ** 2 + (self.y4 - self.y1) ** 2), 2) + return self.__a, self.__b, self.__c, self.__d + else: + return 'Расчет производится только для равнобедренной трапеции' + + def perimeter(self): + if self.__check: + self.__p = self.__a + self.__b + self.__c + self.__d + return self.__p + else: + return 'Расчет производится только для равнобедренной трапеции' + + def area(self): + if self.__check: + self.__s = ((self.__a + self.__c) / 4) * math.sqrt(4 * (self.__b ** 2) - (self.__a - self.__c) ** 2) + return self.__s + else: + return 'Расчет производится только для равнобедренной трапеции' + +sample = IsoscelesTrapezium(1, 1, 3, 5, 5, 5, 7, 1) + +sample.trapezium_check() +print(sample.sides()) +print(sample.perimeter()) +print(sample.area()) diff --git a/lesson06/home_work/hw06_normal.py b/lesson06/home_work/hw06_normal.py index 01c3982f4..f312c5802 100644 --- a/lesson06/home_work/hw06_normal.py +++ b/lesson06/home_work/hw06_normal.py @@ -15,3 +15,102 @@ # (Ученик --> Класс --> Учителя --> Предметы) # 4. Узнать ФИО родителей указанного ученика # 5. Получить список всех Учителей, преподающих в указанном классе + + +class Human: + def __init__(self, name, surname, patronymic): + self.name = name + self.surname = surname + self.patronymic = patronymic + + def get_full_name(self): + return self.surname + ' ' + self.name + ' ' + self.patronymic + + +class Pupil(Human): + def __init__(self, name, surname, patronymic, father, mother, school_classes): + Human.__init__(self, name, surname, patronymic) + self.father = father + self.mother = mother + self.school_classes = school_classes + + def get_full_name(self): + return self.surname + ' ' + self.name[0] + '.' + self.patronymic[0] + '.' + + +class Parent(Human): + def __init__(self, name, surname, patronymic, par_type): + Human.__init__(self, name, surname, patronymic) + self.par_type = par_type + + +class Teacher(Human): + def __init__(self, name, surname, patronymic, subject, school_classes): + Human.__init__(self, name, surname, patronymic) + self.subject = subject + self.school_classes = school_classes + + +class_rooms = ['10 А', '10 Б', '10 В'] + +parents = [Parent('Максим', 'Иванов', 'Иванович', 'Отец'), + Parent('Елена', 'Иванова', 'Ивановна', 'Мать'), + Parent('Евгений', 'Петров', 'Петрович', 'Отец'), + Parent('Евгения', 'Петрова', 'Петровна', 'Мать'), + Parent('Владимир', 'Сидоров', 'Михайлович', 'Отец'), + Parent('Людмила', 'Сидорова', 'Михайловна', 'Мать'), + Parent('Дмитрий', 'Козлов', 'Дмитриевич', 'Отец'), + Parent('Оксана', 'Козлова', 'Дмитриевна', 'Мать'), + Parent('Василий', 'Бобров', 'Васильевич', 'Отец'), + Parent('Василиса', 'Боброва', 'Васильевна', 'Мать'), + Parent('Александр', 'Снегирев', 'Александрович', 'Отец'), + Parent('Александра', 'Снегирева', 'Александровна', 'Мать'), + ] + +students = [Pupil('Леонид', 'Иванов', 'Максимович', parents[0], parents[1], class_rooms[0]), + Pupil('Геркулес', 'Петров', 'Евгеньевич', parents[2], parents[3], class_rooms[0]), + Pupil('Партокл', 'Сидоров', 'Владимирович', parents[4], parents[5], class_rooms[1]), + Pupil('Платон', 'Козлов', 'Дмитриевич', parents[6], parents[7], class_rooms[1]), + Pupil('Герон', 'Бобров', 'Васильевич', parents[8], parents[9], class_rooms[2]), + Pupil('Аид', 'Снегирев', 'Александрович', parents[10], parents[11], class_rooms[2]), + ] + +teachers = [Teacher('Апогей', 'Карасев', 'Ненастьевич', 'Математика', class_rooms), + Teacher('Людовиг', 'Австрийский', 'Демиургович', 'История', [class_rooms[0], class_rooms[2]]), + Teacher('Мерлин', 'Звездочетов', 'Игоревич', 'Алхимия', [class_rooms[1], class_rooms[2]]), + ] + + +print('Список всех классов школы:') +for elem in class_rooms: + print(elem) + +print('Список всех учеников в классе') +answer_class = input('Введите номер класса из списка всех классов школы:\n').upper() +if answer_class in class_rooms: + for elem in students: + if elem.school_classes == answer_class: + print(elem.get_full_name()) +else: + print('Вы ввели неправильный номер класса') + +print('Список всех предметов указанного ученика') +answer_pup = input('Введите фамилию и иницалы ученика:\n').title() +for pup in students: + if answer_pup == pup.get_full_name(): + for teach in teachers: + if pup.school_classes in teach.school_classes: + print(teach.subject) + +print('ФИО родителей указанного ученика') +answer_pup = input('Введите фамилию и иницалы ученика:\n').title() +for pup in students: + if answer_pup == pup.get_full_name(): + print(f'{pup.father.par_type}: {pup.father.get_full_name()}') + print(f'{pup.mother.par_type}: {pup.mother.get_full_name()}') + +print('Список всех учителей класса') +answer_class = input('Введите номер класса из списка всех классов школы:\n').upper() +for teach in teachers: + if answer_class in teach.school_classes: + print(teach.get_full_name()) \ No newline at end of file