summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python-classes/main.py180
-rw-r--r--python-classes/task.txt3
2 files changed, 183 insertions, 0 deletions
diff --git a/python-classes/main.py b/python-classes/main.py
new file mode 100644
index 0000000..06cc970
--- /dev/null
+++ b/python-classes/main.py
@@ -0,0 +1,180 @@
+import math
+import time
+
+from pygame.locals import *
+import pygame
+
+
+class Colors:
+ BLACK = Color("black")
+ RED = Color("red")
+ GREEN = Color("green")
+ BLUE = Color("blue")
+ YELLOW = Color("yellow")
+ CYAN = Color("cyan")
+
+
+class Shape:
+ def perimeter(self):
+ raise NotImplementedError()
+
+ def area(self):
+ raise NotImplementedError()
+
+
+class Showable:
+ def draw(self, surface):
+ raise NotImplementedError()
+
+ def show(self):
+ pygame.init()
+ self.w, self.h = size = 200, 200
+ screen = pygame.display.set_mode(size)
+
+ running = True
+ while running:
+ screen.fill(Colors.BLACK)
+
+ self.draw(screen)
+
+ pygame.display.flip()
+
+ for event in pygame.event.get():
+ if event.type == QUIT:
+ pygame.quit()
+ running = False
+ elif event.type == KEYDOWN:
+ if event.key in [K_ESCAPE, K_q]:
+ pygame.quit()
+ running = False
+
+
+class Point(Shape, Showable):
+ def perimeter(self):
+ return 0
+
+ def area(self):
+ return 0
+
+ def draw(self, surface):
+ center = (self.w // 2, self.h // 2)
+ pygame.draw.circle(surface, Colors.GREEN, center, radius=2)
+
+
+class Circle(Shape, Showable):
+ def __init__(self, radius):
+ self.r = radius
+
+ def perimeter(self):
+ return 2 * math.pi * self.r
+
+ def area(self):
+ return math.pi * self.r * self.r
+
+ def draw(self, surface):
+ center = (self.w // 2, self.h // 2)
+ pygame.draw.circle(surface, Colors.RED, center, radius=self.r)
+
+
+class Square(Shape, Showable):
+ def __init__(self, side):
+ self.side = side
+
+ def perimeter(self):
+ return self.side * 4
+
+ def area(self):
+ return self.side * self.side
+
+ def draw(self, surface):
+ center_x = self.w // 2
+ center_y = self.h // 2
+ left_top = (center_x - self.side // 2, center_y - self.side // 2)
+ size = (self.side, self.side)
+ pygame.draw.rect(surface, Colors.BLUE, Rect(left_top, size))
+
+
+class Rectangle(Shape, Showable):
+ def __init__(self, a, b):
+ self.a = a
+ self.b = b
+
+ def perimeter(self):
+ return (self.a + self.b) * 2
+
+ def area(self):
+ return self.a * self.b
+
+ def draw(self, surface):
+ center_x = self.w // 2
+ center_y = self.h // 2
+ left_top = (center_x - self.a // 2, center_y - self.b // 2)
+ size = (self.a, self.b)
+ pygame.draw.rect(surface, Colors.CYAN, Rect(left_top, size))
+
+
+class EquilateralPolygon(Shape, Showable):
+ def __init__(self, sides, radius):
+ self.n = sides
+ self.r = radius
+
+ def perimeter(self):
+ a = 2 * self.r * math.sin(math.pi / self.n)
+ return a * self.n
+
+ def area(self):
+ return self.n / 2 * self.r * self.r * math.sin(2 * math.pi / self.n)
+
+ def draw(self, surface):
+ points = []
+ xc = self.w // 2
+ yc = self.h // 2
+ for i in range(self.n):
+ points.append((
+ xc + self.r * math.cos(2 * math.pi * i / self.n),
+ yc + self.r * math.sin(2 * math.pi * i / self.n)
+ ))
+
+ pygame.draw.polygon(surface, Colors.YELLOW, points)
+
+
+def main():
+ print("===== Point =====")
+
+ p = Point()
+ print(p.perimeter())
+ print(p.area())
+ p.show()
+
+ print("===== Circle =====")
+
+ c = Circle(40)
+ print(c.perimeter())
+ print(c.area())
+ c.show()
+
+ print("===== Square =====")
+
+ sq = Square(120)
+ print(sq.perimeter())
+ print(sq.area())
+ sq.show()
+
+ print("===== Rectangle =====")
+
+ r = Rectangle(120, 60)
+ print(r.perimeter())
+ print(r.area())
+ r.show()
+
+ print("===== EquilateralPolygon =====")
+
+ poly = EquilateralPolygon(10, 60)
+ print(poly.perimeter())
+ print(poly.area())
+ poly.show()
+
+
+if __name__ == "__main__":
+ main()
+
diff --git a/python-classes/task.txt b/python-classes/task.txt
new file mode 100644
index 0000000..b1a8b8f
--- /dev/null
+++ b/python-classes/task.txt
@@ -0,0 +1,3 @@
+Создать базовый класс «Фигура» и несколько производных от него классов:
+«Точка», «Квадрат», «Круг» и т.д. Ввести функции подсчета площади и периметра
+геометрических фигур. Нарисовать соответствующие фигуры.