From 1fe26997305296b483b9edd0ceec8e67419e7e04 Mon Sep 17 00:00:00 2001 From: EmiliyaV Date: Tue, 8 Oct 2024 17:37:00 +0300 Subject: [PATCH 1/4] added rectangle.py --- rectangle.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 rectangle.py diff --git a/rectangle.py b/rectangle.py new file mode 100644 index 0000000000..eb68866750 --- /dev/null +++ b/rectangle.py @@ -0,0 +1,5 @@ +def area(a, b): + return a * b + +def perimeter(a, b): + return a + b From 6872a5ce02b9d13a7d0c7358b5107fe90ac91eea Mon Sep 17 00:00:00 2001 From: EmiliyaV Date: Tue, 8 Oct 2024 17:46:10 +0300 Subject: [PATCH 2/4] fixed mistake in rectangle.py and added triangle.py --- triangle.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 triangle.py diff --git a/triangle.py b/triangle.py new file mode 100644 index 0000000000..38f970105d --- /dev/null +++ b/triangle.py @@ -0,0 +1,6 @@ +def area(a, h): + return a * h / 2 + +def perimeter(a, b, c): + return a + b + c + From 2db1a7bf53812cabf67dda6d0001a41cb71d020f Mon Sep 17 00:00:00 2001 From: EmiliyaV Date: Wed, 18 Dec 2024 03:36:48 +0300 Subject: [PATCH 3/4] added documentation --- circle.py | 28 +++++- docs/README.md | 236 ++++++++++++++++++++++++++++++++++++++++++++++--- rectangle.py | 31 ++++++- square.py | 27 +++++- triangle.py | 31 ++++++- 5 files changed, 338 insertions(+), 15 deletions(-) diff --git a/circle.py b/circle.py index c3eb8647c9..0a12de420f 100644 --- a/circle.py +++ b/circle.py @@ -1,10 +1,34 @@ import math - def area(r): + """ + Вычисляет площадь окружности. + + Параметры: + r (float): Радиус окружности. + + Возвращает: + float: Площадь окружности. + + Пример вызова: + >>> area(1) + 3.141592653589793 + """ return math.pi * r * r def perimeter(r): - return 2 * math.pi * r + """ + Вычисляет длину окружности. + + Параметры: + r (float): Радиус окружности. + Возвращает: + float: Длина окружности. + + Пример вызова: + >>> perimeter(1) + 6.283185307179586 + """ + return 2 * math.pi * r diff --git a/docs/README.md b/docs/README.md index 63f8727939..2e1b028109 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,10 +1,226 @@ -# Math formulas -## Area -- Circle: S = πR² -- Rectangle: S = ab -- Square: S = a² - -## Perimeter -- Circle: P = 2πR -- Rectangle: P = 2a + 2b -- Square: P = 4a \ No newline at end of file +# Математические формулы +## Площадь +- Окружность: S = πR² +- Прямоугольник: S = ab +- Квадрат: S = a² + +## Периметр +- Окружность: P = 2πR +- Прямоугольник: P = 2a + 2b +- Квадрат: P = 4a + + +# Документация к библиотеке Geometric_lib +## Модуль [circle.py](../circle.py) +- def area(r): + ``` + Принимает число r(float), возвращает площадь окружности с радиусом r + ``` + return math.pi * r * r + ``` + Примеры вызова + ``` + area(1) #3.1415926536 + +- def perimeter(r): + ``` + Принимает число r(float), возвращает длину окружности с радиусом r + ``` + return 2 * math.pi * r + ``` + Примеры вызова: + ``` + area(1) #6.2831853072 + +## Модуль [rectangle.py](../rectangle.py) +- def area(a, b): + ``` + Возвращает площадь прямоугольника + + Параметры: + a(float): длина первой стороны прямоугольника + b(float): длина воторой стороны прямоугольника + Возвращает значение: + a * b(float): площадь прямоугольника со сторонами a и b + ``` + return a * b + ``` + Примеры вызова + ``` + area(1, 2) #2 + +- def perimeter(a, b): + ``` + Возвращает периметр прямоугольника + + Параметры: + a(float): длина первой стороны прямоугольника + b(float): длина воторой стороны прямоугольника + Возвращает значение: + a * b(float): периметр прямоугольника со сторонами a и b + ``` + return 2 * a + 2 * b + ``` + Примеры вызова + ``` + area(1, 2) #6 + +## Модуль [square.py](../square.py) + +- def area(a): + ``` + Принимает число a(float), возвращает площадь квадрата со сторонами a + ``` + return a * a + ``` + Примеры вызова + ``` + area(1) #1 + + +- def perimeter(a): + ``` + Принимает число a(float), возвращает периметр квадрата со сторонами a + ``` + return 4 * a + ``` + Примеры вызова + ``` + area(1) #4 + +## Модуль [triangle.py](../triangle.py) +- def area(a, h): + ``` + Возвращает площадь треугольника + + Параметры: + a(float): длина стороны треугольника к которой проведена высота + h(float): длина высоты треугольника которая проведена к сотроне + Возвращает значение: + a * h(float): площадь треугольника со стороной a и высотой h + ``` + return a * h / 2 + ``` + Примеры вызова + ``` + area(2, 1) #1 + +- def perimeter(a, b, c): + ``` + Возвращает периметр треугольника + + Параметры: + a(float): длина первой стороны треугольника + b(float): длина воторой стороны треугольника + c(float): длина третьей стороны треугольника + Возвращает значение: + a + b + с(float): периметр треугольника со сторонами a, b и c + ``` + return a + b + c + ``` + Примеры вызова + ``` + area(2, 3, 4) #9 + +## История изменения проекта с хешами комитов +```bash +commit 6872a5ce02b9d13a7d0c7358b5107fe90ac91eea (HEAD -> new_features_465453, origin/new_features_465453) +Author: EmiliyaV +Date: Tue Oct 8 17:46:10 2024 +0300 + + fixed mistake in rectangle.py and added triangle.py +``` +```diff +--git a/triangle.py b/triangle.py +new file mode 100644 +index 0000000..38f9701 +--- /dev/null ++++ b/triangle.py +@@ -0,0 +1,6 @@ ++def area(a, h): ++ return a * h / 2 ++ ++def perimeter(a, b, c): ++ return a + b + c ++ +``` +```bash +commit 1fe26997305296b483b9edd0ceec8e67419e7e04 +Author: EmiliyaV +Date: Tue Oct 8 17:37:00 2024 +0300 +: +commit 6872a5ce02b9d13a7d0c7358b5107fe90ac91eea (HEAD -> new_features_465453, origin/new_features_465453) +Author: EmiliyaV +Date: Tue Oct 8 17:46:10 2024 +0300 + + fixed mistake in rectangle.py and added triangle.py +``` +```diff +--git a/triangle.py b/triangle.py +new file mode 100644 +index 0000000..38f9701 +--- /dev/null ++++ b/triangle.py +@@ -0,0 +1,6 @@ ++def area(a, h): ++ return a * h / 2 ++ ++def perimeter(a, b, c): ++ return a + b + c ++ +``` +```bash +commit 1fe26997305296b483b9edd0ceec8e67419e7e04 +Author: EmiliyaV +Date: Tue Oct 8 17:37:00 2024 +0300 +: +commit 6872a5ce02b9d13a7d0c7358b5107fe90ac91eea (HEAD -> new_features_465453, origin/new_features_465453) +Author: EmiliyaV +Date: Tue Oct 8 17:46:10 2024 +0300 + + fixed mistake in rectangle.py and added triangle.py +``` +```diff +--git a/triangle.py b/triangle.py +new file mode 100644 +index 0000000..38f9701 +--- /dev/null ++++ b/triangle.py +@@ -0,0 +1,6 @@ ++def area(a, h): ++ return a * h / 2 ++ ++def perimeter(a, b, c): ++ return a + b + c ++ +``` +```bash +commit 1fe26997305296b483b9edd0ceec8e67419e7e04 +Author: EmiliyaV +Date: Tue Oct 8 17:37:00 2024 +0300 +: +commit 6872a5ce02b9d13a7d0c7358b5107fe90ac91eea (HEAD -> new_features_465453, origin/new_features_465453) +Author: EmiliyaV +Date: Tue Oct 8 17:46:10 2024 +0300 + + fixed mistake in rectangle.py and added triangle.py +``` +```diff +--git a/triangle.py b/triangle.py +new file mode 100644 +index 0000000..38f9701 +--- /dev/null ++++ b/triangle.py +@@ -0,0 +1,6 @@ ++def area(a, h): ++ return a * h / 2 ++ ++def perimeter(a, b, c): ++ return a + b + c ++ +``` +```bash +commit 1fe26997305296b483b9edd0ceec8e67419e7e04 +Author: EmiliyaV +Date: Tue Oct 8 17:37:00 2024 +0300 +``` diff --git a/rectangle.py b/rectangle.py index eb68866750..78a023dbab 100644 --- a/rectangle.py +++ b/rectangle.py @@ -1,5 +1,34 @@ def area(a, b): + """ + Вычисляет площадь прямоугольника. + + Параметры: + a (float): Длина первой стороны прямоугольника. + b (float): Длина второй стороны прямоугольника. + + Возвращает: + float: Площадь прямоугольника. + + Пример вызова: + >>> area(2, 3) + 6 + """ return a * b + def perimeter(a, b): - return a + b + """ + Вычисляет периметр прямоугольника. + + Параметры: + a (float): Длина первой стороны прямоугольника. + b (float): Длина второй стороны прямоугольника. + + Возвращает: + float: Периметр прямоугольника. + + Пример вызова: + >>> perimeter(2, 3) + 10 + """ + return 2 * a + 2 * b diff --git a/square.py b/square.py index 0f98724205..ed9992f199 100644 --- a/square.py +++ b/square.py @@ -1,7 +1,32 @@ - def area(a): + """ + Вычисляет площадь квадрата. + + Параметры: + a (float): Длина стороны квадрата. + + Возвращает: + float: Площадь квадрата. + + Пример вызова: + >>> area(2) + 4 + """ return a * a def perimeter(a): + """ + Вычисляет периметр квадрата. + + Параметры: + a (float): Длина стороны квадрата. + + Возвращает: + float: Периметр квадрата. + + Пример вызова: + >>> perimeter(2) + 8 + """ return 4 * a diff --git a/triangle.py b/triangle.py index 38f970105d..c8de722fa8 100644 --- a/triangle.py +++ b/triangle.py @@ -1,6 +1,35 @@ def area(a, h): + """ + Вычисляет площадь треугольника. + + Параметры: + a (float): Длина основания треугольника. + h (float): Высота треугольника, проведенная к основанию. + + Возвращает: + float: Площадь треугольника. + + Пример вызова: + >>> area(3, 4) + 6.0 + """ return a * h / 2 + def perimeter(a, b, c): - return a + b + c + """ + Вычисляет периметр треугольника. + + Параметры: + a (float): Длина первой стороны треугольника. + b (float): Длина второй стороны треугольника. + c (float): Длина третьей стороны треугольника. + + Возвращает: + float: Периметр треугольника. + Пример вызова: + >>> perimeter(3, 4, 5) + 12 + """ + return a + b + c From cb824f844658f5c4fc11c9652470eba1fdff79f3 Mon Sep 17 00:00:00 2001 From: EmiliyaV Date: Wed, 25 Dec 2024 20:45:48 +0300 Subject: [PATCH 4/4] added unit tests --- test_geometric_lib.py | 114 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 test_geometric_lib.py diff --git a/test_geometric_lib.py b/test_geometric_lib.py new file mode 100644 index 0000000000..cb9389b196 --- /dev/null +++ b/test_geometric_lib.py @@ -0,0 +1,114 @@ +import unittest +from rectangle import area as rectangle_area, perimeter as rectangle_perimeter +from square import area as square_area, perimeter as square_perimeter +from triangle import area as triangle_area, perimeter as triangle_perimeter +from circle import area as circle_area, perimeter as circle_perimeter + + +class RectangleTestCase(unittest.TestCase): + def test_area(self): + self.assertEqual(rectangle_area(2, 3), 6) + self.assertEqual(rectangle_area(0, 8), 0) + self.assertEqual(rectangle_area(5, -10), 0) + + def test_perimeter(self): + self.assertEqual(rectangle_perimeter(2, 3), 12) + self.assertEqual(rectangle_perimeter(0, 10), 0) + + def test_area_with_string(self): + with self.assertRaises(TypeError): + rectangle_area("2", 3) + + def test_perimeter_with_string(self): + with self.assertRaises(TypeError): + rectangle_perimeter("2", 3) + + def test_area_with_negative(self): + self.assertNotEqual(rectangle_area(-2, 3), 0) + + def test_perimeter_with_negative(self): + self.assertNotEqual(rectangle_perimeter(-2, 3), 0) + + + + +class SquareTestCase(unittest.TestCase): + def test_area(self): + self.assertEqual(square_area(4), 16) + self.assertEqual(square_area(0), 0) + + def test_perimeter(self): + self.assertEqual(square_perimeter(10), 40) + self.assertEqual(square_perimeter(0), 0) + + def test_area_with_string(self): + with self.assertRaises(TypeError): + square_area("4") + + def test_perimeter_with_string(self): + with self.assertRaises(TypeError): + square_perimeter("4") + + def test_area_with_negative(self): + self.assertNotEqual(square_area(-4), 0) + + def test_perimeter_with_negative(self): + self.assertNotEqual(square_perimeter(-4), 0) + + + +class TriangleTestCase(unittest.TestCase): + def test_area(self): + self.assertEqual(triangle_area(10, 10), 50) + self.assertEqual(triangle_area(0, 4), 0) + self.assertEqual(triangle_area(-3 ,-4), 0) + + def test_perimeter(self): + self.assertEqual(triangle_perimeter(3, 4, 2), 9) + self.assertEqual(triangle_perimeter(0, 4), 0) + self.assertEqual(triangle_perimeter(-3, 4), 0) + + def test_area_with_string(self): + with self.assertRaises(TypeError): + triangle_area("10", "10") + + def test_perimeter_with_string(self): + with self.assertRaises(TypeError): + triangle_perimeter("3", "4") + + def test_area_with_negative(self): + self.assertNotEqual(triangle_area(-3, 4), 0) + + def test_perimeter_with_negative(self): + self.assertNotEqual(triangle_perimeter(-3, 4), 0) + + + +class CircleTestCase(unittest.TestCase): + def test_area(self): + self.assertAlmostEqual(circle_area(5), 78.54, places=2) + self.assertEqual(circle_area(0), 0) + self.assertEqual(circle_area(-5), 0) + + def test_perimeter(self): + self.assertAlmostEqual(circle_perimeter(5), 31.42, places=2) + self.assertEqual(circle_perimeter(0), 0) + self.assertEqual(circle_perimeter(-5), 0) + + def test_area_with_string(self): + with self.assertRaises(TypeError): + circle_area("a") + + def test_perimeter_with_string(self): + with self.assertRaises(TypeError): + circle_perimeter("5") + + def test_area_with_negative(self): + self.assertNotEqual(circle_area(-5), 0) + + def test_perimeter_with_negative(self): + self.assertNotEqual(circle_perimeter(-5), 0) + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file