Skip to content
Open

Test #322

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
11 changes: 9 additions & 2 deletions circle.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,16 @@


def area(r):
if not isinstance(r, (int, float)):
raise TypeError("Value must be number")
if r < 0:
raise ValueError("Value must be positive")
return math.pi * r * r


def perimeter(r):
return 2 * math.pi * r

if not isinstance(r, (int, float)):
raise TypeError("Value must be number")
if r < 0:
raise ValueError("Value must be positive")
return 2 * math.pi * r
196 changes: 186 additions & 10 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,186 @@
# Math formulas
## Area
- Circle: S = πR²
- Rectangle: S = ab
- Square: S = a²

## Perimeter
- Circle: P = 2πR
- Rectangle: P = 2a + 2b
- Square: P = 4a
# Библиотека для работы с различными фигурами

## Общее описание

Библиотека предназначена для работы с основными геометрическими фигурами. Она включает в себя **четыре основных файла**: circle.py, rectangle.py, square.py, triangle.py, в каждом из которых реализованы две функции: вычисление площади и периметра фигуры.

## Основные файлы библиотеки, их функции с примерами вызовов

### circle.py

**ссылка на circle.py**

[circle.py](../circle.py)

#### Площадь окружности
Функция **принимает вещественное число** (*радиус окружности*) в качестве аргумента и **возвращает площадь окружности**, которая вычисляется по формуле:
```
S = πR²
```

**Пример вызова:**
```python
area(3.0)
```

**Вывод:**
```
28.27433
```

#### Периметр окружности
Функция **принимает вещественное число** (*радиус окружности*) в качестве аргумента и **возвращает периметр окружности**, который вычисляется по формуле:
```
P = 2πR
```

**Пример вызова:**
```python
perimeter(3.0)
```

**Вывод:**
```
18.84955
```

### rectangle.py

**ссылка на rectangle.py**


[rectangle.py](../rectangle.py)



#### Площадь прямоугольника
Функция **принимает вещественные числа** (*стороны прямоугольника*) в качестве аргументов и **возвращает площадь прямоугольника**, которая вычисляется по формуле:
```
S = ab
```

**Пример вызова:**
```python
area(3.0, 5.0)
```

**Вывод:**
```
15.0
```

#### Периметр прямоугольника
Функция **принимает вещественные числа** (*стороны прямоугольника*) в качестве аргументов и **возвращает периметр прямоугольника**, который вычисляется по формуле:
```
P = 2a + 2b
```

**Пример вызова:**
```python
perimeter(3.0, 5.0)
```

**Вывод:**
```
16.0
```

### square.py

**ссылка на square.py**

[square.py](../square.py)

#### Площадь квадрата
Функция **принимает вещественное число** (*сторона квадрата*) в качестве аргумента и **возвращает площадь квадрата**, которая вычисляется по формуле:
```
S = a²
```

**Пример вызова:**
```python
area(5.0)
```

**Вывод:**
```
25.0
```

#### Периметр квадрата
Функция **принимает вещественное число** (*сторона квадрата*) в качестве аргумента и **возвращает периметр квадрата**, который вычисляется по формуле:
```
P = 4a
```

**Пример вызова:**
```python
perimeter(5.0)
```

**Вывод:**
```
20.0
```

### triangle.py

**ссылка на triangle.py**

[triangle.py](../triangle.py)

#### Площадь треугольника
Функция **принимает вещественные числа** (*сторона треугольника и высота, падающая на эту сторону*) в качестве аргументов и **возвращает площадь треугольника**, которая вычисляется по формуле:
```
S = ah/2
```

**Пример вызова:**
```python
area(4.0, 6.0)
```

**Вывод:**
```
12.0
```

#### Периметр треугольника
Функция **принимает вещественные числа** (*стороны треугольника*) в качестве аргументов, проверяет треугольник на существование:
```
a + b > c
a + c > b
b + c > a
```

и **возвращает периметр треугольника**, который вычисляется по формуле:
```
P = a + b + c
```

**Примеры вызова:**
```python
perimeter(3.0, 4.0, 5.0)
```

```python
perimeter(100.0, 3.0, 5.0)
```

**Выводы:**
```
12.0
```

```
-1.0
```
# История изменения проекта с хешами комитов

**commit 0d23ced79ed9ef7dd923df4978d65985e877509e**

Добавлена документация

**commit 8ba9aeb3cea847b63a91ac378a2a6db758682460**

Внесены финальные изменения в документации
Empty file added docs/geometric_lib/rectangle.py
Empty file.
15 changes: 15 additions & 0 deletions rectangle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@

def area(a, b):
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
raise TypeError("Values must be numbers")
if a < 0 or b < 0:
raise ValueError("Values must be positive")
return a * b


def perimeter(a, b):
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
raise TypeError("Values must be numbers")
if a < 0 or b < 0:
raise ValueError("Values must be positive")
return 2 * a + 2 * b
11 changes: 9 additions & 2 deletions square.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@

def area(a):
if not isinstance(a, (int, float)):
raise TypeError("Value must be number")
if a < 0:
raise ValueError("Value must be positive")
return a * a


def perimeter(a):
return 4 * a
if not isinstance(a, (int, float)):
raise TypeError("Value must be number")
if a < 0:
raise ValueError("Value must be positive")
return 4 * a
44 changes: 44 additions & 0 deletions test_circle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import circle
import unittest


class CircleTestCase(unittest.TestCase):
def test_area_zero(self):
res = circle.area(0)
self.assertEqual(res, 0)

def test_area_negative(self):
with self.assertRaises(ValueError):
circle.area(-10)

def test_area_str_input(self):
with self.assertRaises(TypeError):
circle.area("a")

def test_area_none_value(self):
with self.assertRaises(TypeError):
circle.area(None)

def test_area_big_value(self):
res = circle.area(10**10)
self.assertEqual(res, 0)

def test_area_small_velue(self):
res = circle.area(10 ** - 10)
self.assertEqual(res, 0)

def test_perimeter_zero(self):
res = circle.perimeter(0)
self.assertEqual(res, 0)

def test_perimeter_negative(self):
with self.assertRaises(ValueError):
circle.perimeter(-10)

def test_perimeter_str_input(self):
with self.assertRaises(TypeError):
circle.perimeter("a")

def test_perimeter_none_value(self):
with self.assertRaises(TypeError):
circle.perimeter(None)
56 changes: 56 additions & 0 deletions test_rectangle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import rectangle
import unittest


class RectangleTestCase(unittest.TestCase):
def test_area_zero(self):
res = rectangle.area(10, 0)
self.assertEqual(res, 0)

def test_area_square(self):
res = rectangle.area(10, 10)
self.assertEqual(res, 100)

def test_area_negative(self):
with self.assertRaises(ValueError):
rectangle.area(-10, 0)

def test_area_str_input(self):
with self.assertRaises(TypeError):
rectangle.area("a", 10)

def test_area_none_value(self):
with self.assertRaises(TypeError):
rectangle.area(None, 10)
with self.assertRaises(TypeError):
rectangle.area(10, None)

def test_area_big_value(self):
res = rectangle.area(10**10, 10**5)
self.assertEqual(res, 0)

def test_area_small_velue(self):
res = rectangle.area(10 ** - 10, 10 ** 5)
self.assertEqual(res, 0)

def test_perimeter_zero(self):
res = rectangle.perimeter(10, 0)
self.assertEqual(res, 20)

def test_perimeter_square(self):
res = rectangle.perimeter(10, 10)
self.assertEqual(res, 40)

def test_perimeter_negative(self):
with self.assertRaises(ValueError):
rectangle.perimeter(-10, 0)

def test_perimeter_str_input(self):
with self.assertRaises(TypeError):
rectangle.perimeter("a", 0)

def test_perimeter_none_value(self):
with self.assertRaises(TypeError):
rectangle.perimeter(None, 10)
with self.assertRaises(TypeError):
rectangle.perimeter(10, None)
Loading