diff --git a/__pycache__/circle.cpython-311.pyc b/__pycache__/circle.cpython-311.pyc new file mode 100644 index 0000000000..28571b0af3 Binary files /dev/null and b/__pycache__/circle.cpython-311.pyc differ diff --git a/__pycache__/rectangle.cpython-311.pyc b/__pycache__/rectangle.cpython-311.pyc new file mode 100644 index 0000000000..785eed0c78 Binary files /dev/null and b/__pycache__/rectangle.cpython-311.pyc differ diff --git a/__pycache__/square.cpython-311.pyc b/__pycache__/square.cpython-311.pyc new file mode 100644 index 0000000000..88a28b5ce7 Binary files /dev/null and b/__pycache__/square.cpython-311.pyc differ diff --git a/__pycache__/test_circle.cpython-311.pyc b/__pycache__/test_circle.cpython-311.pyc new file mode 100644 index 0000000000..714c50bdbf Binary files /dev/null and b/__pycache__/test_circle.cpython-311.pyc differ diff --git a/__pycache__/test_rectangle.cpython-311.pyc b/__pycache__/test_rectangle.cpython-311.pyc new file mode 100644 index 0000000000..d429e4e40f Binary files /dev/null and b/__pycache__/test_rectangle.cpython-311.pyc differ diff --git a/__pycache__/test_square.cpython-311.pyc b/__pycache__/test_square.cpython-311.pyc new file mode 100644 index 0000000000..f59994c0be Binary files /dev/null and b/__pycache__/test_square.cpython-311.pyc differ diff --git a/__pycache__/test_triangle.cpython-311.pyc b/__pycache__/test_triangle.cpython-311.pyc new file mode 100644 index 0000000000..c65968e6e7 Binary files /dev/null and b/__pycache__/test_triangle.cpython-311.pyc differ diff --git a/__pycache__/triangle.cpython-311.pyc b/__pycache__/triangle.cpython-311.pyc new file mode 100644 index 0000000000..699dc51636 Binary files /dev/null and b/__pycache__/triangle.cpython-311.pyc differ diff --git a/circle.py b/circle.py index c3eb8647c9..63a8d1ed7e 100644 --- a/circle.py +++ b/circle.py @@ -2,9 +2,34 @@ def area(r): + """ + На вход поступает число r, возвращает r^2*pi + Пример: + Ввод: + r=2 + Вывод: + area=12.56 + """ + if not isinstance(r, (int, float)): + raise TypeError() + if r < 0 or r > 2147483647 : + raise ValueError() return math.pi * r * r + def perimeter(r): + """ + На вход поступает число r, возвращает r*2*pi + Пример: + Ввод: + r=4 + Вывод: + perimeter=25.132 + """ + if not isinstance(r, (int, float)): + raise TypeError() + if r < 0 or r > 2147483647: + raise ValueError() return 2 * math.pi * r diff --git a/docs/README.md b/docs/README.md index 63f8727939..85ae865da6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,10 +1,164 @@ -# Math formulas -## Area +# **Math formulas** +## **Area** - Circle: S = πR² - Rectangle: S = ab - Square: S = a² +- Triangle: S = ah/2 -## Perimeter +## **Perimeter** - Circle: P = 2πR - Rectangle: P = 2a + 2b -- Square: P = 4a \ No newline at end of file +- Square: P = 4a +- Triangle: P = abc + +## **Area funcion** +- Circle: +``` + На вход поступает число r, возвращает r^2*pi + Пример: + Ввод: + r=2 + Вывод: + area=12.56 +``` +- Rectangle: +``` + На вход поступают числа a и b, возвращает произведение a и b + Пример: + Ввод: + a=2 + b=5 + Вывод: + area=10 +``` +- Square: +``` + На вход поступает число a, возвращает a в квадрате + Пример: + Ввод: + a=7 + Вывод: + area=49 +``` +- Triangle: +``` + На вход поступают числа a и h, возвращает a умноженное на половину h + Пример: + Ввод: + a=5 + h=4 + Вывод: + area=10 +``` + +## **Perimeter** +- Circle: +``` + На вход поступает число r, возвращает r*2*pi + Пример: + Ввод: + r=4 + Вывод: + perimeter=25.132 +``` +- Rectangle: +``` + На вход поступают числа a и b, возвращает удвоенное произведение a и b + Пример: + Ввод: + a=5 + b=7 + Вывод: + perimeter=24 +``` +- Square: +``` + На вход поступает число a, возвращает a умноженное на 4 + Пример: + Ввод: + a=2 + Вывод: + perimeter=8 +``` +- Triangle: +``` + На вход поступают числа a, b и c, возвращает сумму этих чисел + Пример: + Ввод: + a=2 + b=3 + c=4 + Вывод: + perimeter=9 +``` + +## **История изменения проекта с хешами комитов** +- 1 Комиит(8ba9aeb3cea847b63a91ac378a2a6db758682460): *L-03: Circle and square added* +- 2 Комиит(d078c8d9ee6155f3cb0e577d28d337b791de28e2): *L-03: Docs added* +- 3 Комиит(83b1514a0981b87a5ae52c2dbd8ca7cf2197201c): *добавлен файл rectangle* +- 4 Комиит(e691bddd3847f58264673bdeaf60d7930a2727b2): *Ошибка исправлена* +- 5 Коммит(b8d98a82dcb1e6bca25770def8c32bfb5c2284c4): *Добавление комментариев* +- 6 Коммит(351eb9b4246a9342d5d8d15a928570cf6fff986a): *Пробный пуш readme* +- 7 Коммит(72f9576458ba8443c1ab7fa27d98cb21ab480c73): *Прбный пуш readme 2* + +## **Общее решение** +- *Изучил текст лабы 2* +- *Изучил примечание в телеграм* +- *Изучил [Базовый синтаксис записи и форматирования](https://docs.github.com/ru/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax)* +- *Добавил комментарии в файлы проекта* +- *Изменил файл README.md: добавил формулы для треугольника, расписал функции, добавил историю изменений* + +## **Лаба 4** +*Добавлен тест для Triangle.py:* +``` +import unittest +from triangle import area, perimeter # Импортируем функции area и perimeter + +class TriangleTestCase(unittest.TestCase): + #корректные значения + def test_area(self): + self.assertEqual(area(5, 4), 10) # Проверяем, area = 10 + self.assertEqual(area(0, 10), 0) # Проверяем, area = 0 + self.assertEqual(area(10, 0), 0) # Проверяем, area = 0 + self.assertEqual(area(3, 6), 9) # Проверяем, area = 9 + + def test_perimeter(self): + self.assertEqual(perimeter(2, 3, 4), 9) # Проверяем, perimeter = 9 + self.assertEqual(perimeter(1, 1, 1), 3) # Проверяем, perimeter = 3 + self.assertEqual(perimeter(5, 5, 5), 15) # Проверяем, perimeter = 15 + self.assertEqual(perimeter(0, 0, 0), 0) # Проверяем, perimeter = 0 + + # Тестируем некорректные входные данные + def test_invalid_area(self): + with self.assertRaises(TypeError): + area("5", 4) # Проверяем, что строка вызывает ошибку + with self.assertRaises(TypeError): + area(5, "4") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + area(-5, 4) # Проверяем, что отрицательное основание вызывает ошибку + with self.assertRaises(ValueError): + area(5, -4) # Проверяем, что отрицательная высота вызывает ошибку + with self.assertRaises(ValueError): + area(1e308, 1e308) # Проверяем, что слишком большие числа вызывают ошибку + + def test_invalid_perimeter(self): + with self.assertRaises(TypeError): + perimeter("2", 3, 4) # Проверяем, что строка вызывает ошибку + with self.assertRaises(TypeError): + perimeter(2, "3", 4) # Проверяем, что строка вызывает ошибку + with self.assertRaises(TypeError): + perimeter(2, 3, "4") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + perimeter(-2, 3, 4) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(2, -3, 4) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(2, 3, -4) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(1e308, 1e308, 1e308) # Проверяем, что слишком большие числа вызывают ошибку + +if __name__ == '__main__': + unittest.main() + +``` + diff --git a/rectangle.py b/rectangle.py new file mode 100644 index 0000000000..bbbef06683 --- /dev/null +++ b/rectangle.py @@ -0,0 +1,31 @@ +def area(a, b): + """ + На вход поступают числа a и b, возвращает произведение a и b + Пример: + Ввод: + a=2 + b=5 + Вывод: + area=10 + """ + if not isinstance(a, (int, float)) or not isinstance(b, (int, float)): + raise TypeError() + if a < 0 or b < 0 or a > 2147483647 or b > 2147483647: + raise ValueError() + return a * b + +def perimeter(a, b): + """ + На вход поступают числа a и b, возвращает удвоенное произведение a и b + Пример: + Ввод: + a=5 + b=7 + Вывод: + perimeter=24 + """ + if not isinstance(a, (int, float)) or not isinstance(b, (int, float)): + raise TypeError() + if a < 0 or b < 0 or a > 2147483647 or b > 2147483647: + raise ValueError() + return 2*(a + b) diff --git a/square.py b/square.py index 0f98724205..fc10686628 100644 --- a/square.py +++ b/square.py @@ -1,7 +1,31 @@ def area(a): + """ + На вход поступает число a, возвращает a в квадрате + Пример: + Ввод: + a=7 + Вывод: + area=49 + """ + if not isinstance(a, (int, float)): + raise TypeError() + if a < 0 or a > 2147483647: + raise ValueError() return a * a def perimeter(a): + """ + На вход поступает число a, возвращает a умноженное на 4 + Пример: + Ввод: + a=2 + Вывод: + perimeter=8 + """ + if not isinstance(a, (int, float)): + raise TypeError() + if a < 0 or a > 2147483647: + raise ValueError() return 4 * a diff --git a/test_circle.py b/test_circle.py new file mode 100644 index 0000000000..123270941c --- /dev/null +++ b/test_circle.py @@ -0,0 +1,34 @@ +import unittest +import math +from circle import area, perimeter # Импортируем функции area и perimeter + +class TriangleTestCase(unittest.TestCase): + #тестируем корректные значения + def test_area(self): + self.assertEqual(area(4), 16*math.pi) # Проверяем, area + self.assertEqual(area(0), 0) # Проверяем, area = 0 + self.assertEqual(area(1), math.pi) # Проверяем, area = pi + + def test_perimeter(self): + self.assertEqual(perimeter(4), 8*math.pi) # Проверяем, perimeter + self.assertEqual(perimeter(1), 2*math.pi) # Проверяем, perimeter = pi + + # Тестируем некорректные входные данные + def test_invalid_area(self): + with self.assertRaises(TypeError): + area("5") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + area(-5) # Проверяем, что отрицательное основание вызывает ошибку + with self.assertRaises(ValueError): + area(1e308) # Проверяем, что слишком большие числа вызывают ошибку + + def test_invalid_perimeter(self): + with self.assertRaises(TypeError): + perimeter("2") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + perimeter(-2) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(1e308) # Проверяем, что слишком большие числа вызывают ошибку + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/test_rectangle.py b/test_rectangle.py new file mode 100644 index 0000000000..15a9a8c2f2 --- /dev/null +++ b/test_rectangle.py @@ -0,0 +1,43 @@ +import unittest +from rectangle import area, perimeter # Импортируем функции area и perimeter + +class TriangleTestCase(unittest.TestCase): + #тестируем корректные значения + def test_area(self): + self.assertEqual(area(5, 4), 20) # Проверяем, area = 20 + self.assertEqual(area(0, 10), 0) # Проверяем, area = 0 + self.assertEqual(area(10, 0), 0) # Проверяем, area = 0 + self.assertEqual(area(3, 6), 18) # Проверяем, area = 18 + + def test_perimeter(self): + self.assertEqual(perimeter(2, 3), 10) # Проверяем, perimeter = 9 + self.assertEqual(perimeter(1, 0), 2) # Проверяем, perimeter = 0 + self.assertEqual(perimeter(0, 0), 0) # Проверяем, perimeter = 0 + + # Тестируем некорректные входные данные + def test_invalid_area(self): + with self.assertRaises(TypeError): + area("5", 4) # Проверяем, что строка вызывает ошибку + with self.assertRaises(TypeError): + area(5, "4") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + area(-5, 4) # Проверяем, что отрицательное основание вызывает ошибку + with self.assertRaises(ValueError): + area(5, -4) # Проверяем, что отрицательная высота вызывает ошибку + with self.assertRaises(ValueError): + area(1e308, 1e308) # Проверяем, что слишком большие числа вызывают ошибку + + def test_invalid_perimeter(self): + with self.assertRaises(TypeError): + perimeter("2", 3) # Проверяем, что строка вызывает ошибку + with self.assertRaises(TypeError): + perimeter(2, "3") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + perimeter(-2, 3) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(2, -3) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(1e308, 1e308) # Проверяем, что слишком большие числа вызывают ошибку + +if __name__ == '__main__': + unittest.main() diff --git a/test_square.py b/test_square.py new file mode 100644 index 0000000000..0e1a274ce8 --- /dev/null +++ b/test_square.py @@ -0,0 +1,33 @@ +import unittest +from square import area, perimeter # Импортируем функции area и perimeter + +class TriangleTestCase(unittest.TestCase): + #тестируем корректные значения + def test_area(self): + self.assertEqual(area(5), 25) # Проверяем, area = 25 + self.assertEqual(area(0), 0) # Проверяем, area = 0 + + def test_perimeter(self): + self.assertEqual(perimeter(2), 8) # Проверяем, perimeter = 8 + self.assertEqual(perimeter(1), 4) # Проверяем, perimeter = 4 + self.assertEqual(perimeter(0), 0) # Проверяем, perimeter = 0 + + # Тестируем некорректные входные данные + def test_invalid_area(self): + with self.assertRaises(TypeError): + area("5") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + area(-5) # Проверяем, что отрицательное основание вызывает ошибку + with self.assertRaises(ValueError): + area(1e308) # Проверяем, что слишком большие числа вызывают ошибку + + def test_invalid_perimeter(self): + with self.assertRaises(TypeError): + perimeter("2") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + perimeter(-2) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(1e308) # Проверяем, что слишком большие числа вызывают ошибку + +if __name__ == '__main__': + unittest.main() diff --git a/test_triangle.py b/test_triangle.py new file mode 100644 index 0000000000..dbcee66c11 --- /dev/null +++ b/test_triangle.py @@ -0,0 +1,48 @@ +import unittest +from triangle import area, perimeter # Импортируем функции area и perimeter + +class TriangleTestCase(unittest.TestCase): + #тестируем корректные значения + def test_area(self): + self.assertEqual(area(5, 4), 10) # Проверяем, area = 10 + self.assertEqual(area(0, 10), 0) # Проверяем, area = 0 + self.assertEqual(area(10, 0), 0) # Проверяем, area = 0 + self.assertEqual(area(3, 6), 9) # Проверяем, area = 9 + + def test_perimeter(self): + self.assertEqual(perimeter(2, 3, 4), 9) # Проверяем, perimeter = 9 + self.assertEqual(perimeter(1, 1, 1), 3) # Проверяем, perimeter = 3 + self.assertEqual(perimeter(5, 5, 5), 15) # Проверяем, perimeter = 15 + self.assertEqual(perimeter(0, 0, 0), 0) # Проверяем, perimeter = 0 + + # Тестируем некорректные входные данные + def test_invalid_area(self): + with self.assertRaises(TypeError): + area("5", 4) # Проверяем, что строка вызывает ошибку + with self.assertRaises(TypeError): + area(5, "4") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + area(-5, 4) # Проверяем, что отрицательное основание вызывает ошибку + with self.assertRaises(ValueError): + area(5, -4) # Проверяем, что отрицательная высота вызывает ошибку + with self.assertRaises(ValueError): + area(1e308, 1e308) # Проверяем, что слишком большие числа вызывают ошибку + + def test_invalid_perimeter(self): + with self.assertRaises(TypeError): + perimeter("2", 3, 4) # Проверяем, что строка вызывает ошибку + with self.assertRaises(TypeError): + perimeter(2, "3", 4) # Проверяем, что строка вызывает ошибку + with self.assertRaises(TypeError): + perimeter(2, 3, "4") # Проверяем, что строка вызывает ошибку + with self.assertRaises(ValueError): + perimeter(-2, 3, 4) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(2, -3, 4) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(2, 3, -4) # Проверяем, что отрицательная сторона вызывает ошибку + with self.assertRaises(ValueError): + perimeter(1e308, 1e308, 1e308) # Проверяем, что слишком большие числа вызывают ошибку + +if __name__ == '__main__': + unittest.main() diff --git a/triangle.py b/triangle.py new file mode 100644 index 0000000000..90df68e6e7 --- /dev/null +++ b/triangle.py @@ -0,0 +1,35 @@ + +def area(a, h): + """ + На вход поступают числа a и h, возвращает a умноженное на половину h + Пример: + Ввод: + a=5 + h=4 + Вывод: + area=10 + """ + if not isinstance(a, (int, float)) or not isinstance(h, (int, float)): + raise TypeError() + if a < 0 or h < 0 or a > 2147483647 or h > 2147483647: + raise ValueError() + + return a * h / 2 + +def perimeter(a, b, c): + """ + На вход поступают числа a, b и c, возвращает сумму этих чисел + Пример: + Ввод: + a=2 + b=3 + c=4 + Вывод: + perimeter=9 + """ + if not all(isinstance(x, (int, float)) for x in (a, b, c)): + raise TypeError() + if a < 0 or b < 0 or c < 0 or a > 2147483647 or b > 2147483647 or c > 2147483647: + raise ValueError() + + return a + b + c