From 6c58709dc1bb85547689e79c5d8959350ff8811e Mon Sep 17 00:00:00 2001 From: revotuning Date: Sun, 17 Nov 2024 01:43:25 +0300 Subject: [PATCH] added files for 2 lession --- 2lession/Display.py | 39 +++++++++++++++++++++++++++ 2lession/Point.py | 64 +++++++++++++++++++++++++++++++++++++++++++++ 2lession/Rect.py | 34 ++++++++++++++++++++++++ 2lession/Square.py | 16 ++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 2lession/Display.py create mode 100644 2lession/Point.py create mode 100644 2lession/Rect.py create mode 100644 2lession/Square.py diff --git a/2lession/Display.py b/2lession/Display.py new file mode 100644 index 0000000..a453fcb --- /dev/null +++ b/2lession/Display.py @@ -0,0 +1,39 @@ +from math import sqrt +from Rect import Rect + + +class Display(Rect): + def __init__(self, diagonal, height: int, width: int): + super().__init__(height, width) + self.diagonal = diagonal + self.dpi = round((sqrt(pow(self.height, 2) + pow(self.width, 2))) / self.diagonal, 2) + + def get_dpi(self): + return self.dpi + + def get_pixel_num(self): + return super().area() + + def area(self): + return round((self.height / self.get_dpi()) * (self.width / self.get_dpi()), 1) + + def get_resolution_px(self): + return self.height, self.width + + + +def main(): + samsung_mon = Display(19, 1920, 1080) # 19", 1920x1080 пикселей + print(samsung_mon.area()) # площадь в кв. дюймах, либо в кв. м + print(samsung_mon.perimeter()) + samsung_mon.rotate() + samsung_mon.rotate() + + print(samsung_mon.get_dpi()) # количество точек на дюйм + + print(samsung_mon.get_pixel_num()) # сколько мегапикселей у экрана + print(samsung_mon.get_resolution_px()) # разрешение в пикселях в виде кортежа: (1920, 1080) + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/2lession/Point.py b/2lession/Point.py new file mode 100644 index 0000000..42352a6 --- /dev/null +++ b/2lession/Point.py @@ -0,0 +1,64 @@ +from math import sqrt + + +class PointXY: + def __init__(self, x: int, y: int): + self.x = x + self.y = y + + def distance_from_zero(self): + return sqrt(pow(self.x, 2) + pow(self.y, 2)) + + def distance_to(self, p): + return sqrt(pow((self.x - p.x), 2) + pow((self.y - p.y), 2)) + + def __repr__(self): + return "Точка с координатами (" + str(self.x) + ", " + str(self.y) + ")" + + def __eq__(self, point): + if self.distance_to(point) == 0: + result = True + else: + result = False + return result + + def __ne__(self, point): + if self.distance_to(point) != 0: + result = True + else: + result = False + return result + + def __add__(self, point): + return PointXY(self.x + point.x, self.y + point.y) + + def __mul__(self, multiplier): + return PointXY(self.x * multiplier, self.y * multiplier) + + def __neg__(self): + return PointXY(-self.x, -self.y) + + def __invert__(self): + return PointXY(-self.x, -self.y) + + def __abs__(self): + return sqrt(pow(self.x, 2) + pow(self.y, 2)) + + +def main(): + p1 = PointXY(4, 3) + p2 = PointXY(9, 6) + p3 = PointXY(5, 3) + print(p1.distance_from_zero()) + print(p2.distance_to(p3)) + print(p1 == p2) + print(p1 != p2) + + p4 = p1 + p2 + p5 = p1 * 0.5 + p1 = -p2 + p1 = ~p2 + print(abs(p1)) + +if __name__ == '__main__': + main() diff --git a/2lession/Rect.py b/2lession/Rect.py new file mode 100644 index 0000000..e45401d --- /dev/null +++ b/2lession/Rect.py @@ -0,0 +1,34 @@ +class Rect: + def __init__(self, height: int, width: int): + if height < 0 or width < 0: + raise ValueError('Длины сторон не могут быть отрицательными') + self.height = height + self.width = width + + def area(self): + return self.height * self.width + + def perimeter(self): + return 2 * (self.height + self.width) + + def scale(self, multiplier): + self.height *= multiplier + self.width *= multiplier + + def rotate(self): + tmp = self.height + self.height = self.width + self.width = tmp + + +def main(): + r1 = Rect(10, 56) + print(r1.area()) + print(r1.perimeter()) + r1.scale(10) + r1.scale(0.1) + r1.rotate() + + +if __name__ == '__main__': + main() diff --git a/2lession/Square.py b/2lession/Square.py new file mode 100644 index 0000000..18eefbe --- /dev/null +++ b/2lession/Square.py @@ -0,0 +1,16 @@ +from Rect import Rect + + +class Square(Rect): + def __init__(self, size): + super().__init__(height=size, width=size) + + +def main(): + sq = Square(5) + print(sq.area()) + print(sq.perimeter()) + + +if __name__ == '__main__': + main() \ No newline at end of file