Professional Documents
Culture Documents
Гуртовенко Віталіна ПЗ4 ООП
Гуртовенко Віталіна ПЗ4 ООП
Кафедра
Звіт
з практичної роботи №4
з дисципліни «об’єктно-орієнтоване програмування»
Виконала: Перевірив:
ст. гр. КБІКС-21-5 Данилов А.Д.
Гуртовенко В.В.
Харків 2023
ПРАКТИЧНА РОБОТА №4
1. Мета роботи:
Ознайомлення з парадигмою об’єктно-орієнтованого програмування (ООП)
мовою Python. Набуття умінь та навичок розробки та опису програм мовою Python.
Розв'язок.
class MyClass:
int_field = 8
str_field = 'a string'
# Звернення до атрибутів класу
print (MyClass.int_field); print (MyClass.str_field)
# Створення двох екземплярів класу
object1 = MyClass (); object2 = MyClass ()
# Звернення до атрибутів класу через його екземпляри
print (object1.int_field); print (object2.str_field)
# Всі перераховані вище звернення до атрибутів насправді
# відносяться до двох одних і тих самих змінних
# Зміна значення атрибута класу
MyClass.int_field = 10
print (MyClass.int_field); print (object1.int_field); print
(object2.int_field)
# Однак, аналогічно до глобальних і локальних змінних,
# присвоєння значення атрибуту об'єкта не змінює значення
# атрибута класу, а веде до створення атрибута даних
#(нестатичного поля)
object1.str_field = 'another string'
print(MyClass.str_field); print(object1.str_field);
print(object2.str_field)
def __repr__(self):
"""Метод, який повертає подання об'єкта у вигляді рядка """
return 'Rectangle(%.1f, %.1f)' % (self.side_a, self.side_b)
class Circle:
"""Клас, який описує коло"""
def __init__(self, radius):
self.radius = radius
def __repr__(self):
return 'Circle(%.1f)' % self.radius
@classmethod
def from_rectangle(cls, rectangle):
"""Ми використовуємо метод класу в якості фабричного методу,
який створює екземпляр класу Circle з екземпляру
класу Rectangle як коло, що вписане у цей прямокутник.
:param rectangle: Rectangle instance
:return: Circle instance """
radius = min(rectangle.side_a, rectangle.side_b) / 2
return cls(radius)
def main():
rectangle = Rectangle(3, 4)
print(rectangle)
circle1 = Circle(1)
print(circle1)
circle2 = Circle.from_rectangle(rectangle)
print(circle2)
if __name__ == '__main__':
main()
class MyClass:
def __init__(self):
self.password = None
2. Приклад 2:
Створимо клас з одним атрибутом поза методу й одним методом, який виводить
значення цього атрибута на екран із змінами:
class First:
color = "red"
def out(self): print (self.color + "!")
obj1 = First(); obj2 = First()
# Обидва об‘єкта (obj1, obj2) мають два однакових атрибута:
# color - у вигляді властивості й printer (у вигляді методу)
print (obj1.color); print (obj2.color)
obj1.out(); obj2.out()
1.1. Завдання 1:
Варіант 3
Клас Трикутник
Властивості: дві сторони й кут між ними
Операції:
– збільшення/зменшення розміру кута на задану кількість відсотків;
– визначення виду трикутника за кількістю рівних сторін (З різними сторонами,
Рівнобедрений, Рівносторонній);
– визначення відстані між центрами вписаної й описаної окружностей.
– визначення значень кутів.
Лістинг коду:
import math
class Triangle:
def __init__(self, side_a, side_b, angle):
self.side_a = side_a
self.side_b = side_b
self.angle = angle
def change_angle(self, percentage):
self.angle += self.angle * (percentage / 100)
def triangle_type(self):
side_c = math.sqrt(self.side_a ** 2 + self.side_b ** 2 - 2 * self.side_a *
self.side_b * math.cos(math.radians(self.angle)))
if self.side_a == self.side_b == side_c:
return "Рівносторонній"
elif self.side_a == self.side_b or self.side_a == side_c or self.side_b ==
side_c:
return "Рівнобедрений"
else:
return "З різними сторонами"
def incenter_circumcenter_distance(self):
side_c = math.sqrt(self.side_a ** 2 + self.side_b ** 2 - 2 * self.side_a *
self.side_b * math.cos(math.radians(self.angle)))
p = (self.side_a + self.side_b + side_c) / 2
area = math.sqrt(p * (p - self.side_a) * (p - self.side_b) * (p - side_c))
inradius = area / p
circumradius = (self.side_a * self.side_b * side_c) / (4 * area)
return math.sqrt(circumradius ** 2 - inradius ** 2)
def angles(self):
angle_a = math.degrees(math.acos((self.side_b ** 2 + self.side_a ** 2 -
self.side_b ** 2) / (2 * self.side_a * self.side_b)))
angle_b = math.degrees(math.acos((self.side_a ** 2 + self.side_b ** 2 -
self.side_b ** 2) / (2 * self.side_a * self.side_b)))
angle_c = 180 - angle_a - angle_b
return angle_a, angle_b, angle_c
def main():
side_a = float(input("Введіть сторону a: "))
side_b = float(input("Введіть сторону b: "))
angle = float(input("Введіть кут між сторонами a та b: "))
triangle = Triangle(side_a, side_b, angle)
percentage = float(input("Введіть відсоток зміни кута: "))
triangle.change_angle(percentage)
print("Новий кут між сторонами a та b: ", triangle.angle)
print("Тип трикутника: ", triangle.triangle_type())
print("Відстань між центрами вписаної та описаної окружностей: ",
triangle.incenter_circumcenter_distance())
print("Кути трикутника: ", triangle.angles())
if __name__ == "__main__":
main()
init(self, side_a, side_b, angle): це конструктор класу, який приймає три аргументи:
side_a (довжина сторони а), side_b (довжина сторони б) і angle (кут між сторонами
а і б). він ініціалізує об'єкт п'ятикутника з заданими значеннями сторін і кута.
У цьому прикладі клас MyClass має два атрибути attribute1 і attribute2, які
ініціалізуються при створенні об'єкту класу. Також в класі є метод my_method, який
виводить рядок на екран.