Skip to content
Open
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
58 changes: 56 additions & 2 deletions circle.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,64 @@
import math


def area(r):
"""
Вычисляет площадь круга по заданному радиусу.

Параметры:
r (float): Радиус круга.

Возвращаемое значение:
float: Площадь круга.

Исключения:
ValueError: Если радиус не является числом (int или float) или радиус отрицательный.

Пример:
>>> area(10)
314.1592653589793
>>> area(7.5)
176.71458676442586
>>> area("10")
ValueError: Ожидаются числовые значения для радиуса.
>>> area(-10)
ValueError: Радиус не может быть отрицательным.
"""

if not isinstance(r, (int, float)):
raise ValueError("Ожидаются числовые значения для радиуса.")
if r < 0:
raise ValueError("Радиус не может быть отрицательным.")

return math.pi * r * r


def perimeter(r):
return 2 * math.pi * r
"""
Вычисляет периметр (длину окружности) круга по заданному радиусу.

Параметры:
r (float): Радиус круга.

Возвращаемое значение:
float: Периметр круга.

Исключения:
ValueError: Если радиус не является числом (int или float) или радиус отрицательный.

Пример:
>>> perimeter(10)
62.83185307179586
>>> perimeter(7.5)
47.12388980384689
>>> perimeter("10")
ValueError: Ожидаются числовые значения для радиуса.
>>> perimeter(-10)
ValueError: Радиус не может быть отрицательным.
"""

if not isinstance(r, (int, float)):
raise ValueError("Ожидаются числовые значения для радиуса.")
if r < 0:
raise ValueError("Радиус не может быть отрицательным.")

return 2 * math.pi * r
289 changes: 283 additions & 6 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,287 @@
# Math formulas
## Area
- Circle: S = πR²
- Rectangle: S = ab
- Square: S = a²
+ [Circle](#модуль-circlepy): S = πR²
+ [Rectangle](#модуль-rectanglepy): S = ab
+ [Square](#модуль-squarepy): S = a²
+ [Triangle](#модуль-trianglepy): S = (a*h)/2

## Perimeter
- Circle: P = 2πR
- Rectangle: P = 2a + 2b
- Square: P = 4a
- [Circle](#модуль-circlepy): P = 2πR
- [Rectangle](#модуль-rectanglepy): P = 2a + 2b
- [Square](#модуль-squarepy): P = 4a
- [Triangle](#модуль-trianglepy): P = a + b + c

## Общее описание решения

Этот проект предоставляет функции для вычисления площади и периметра различных геометрических фигур: круга, квадрата, прямоугольника и треугольника. Каждая функция снабжена подробной документацией и примерами использования.

## Описание функций с примерами вызова

### Модуль `circle.py`

#### Функция `area(r)`

Вычисляет площадь круга по заданному радиусу.

**Параметры:**
- `r` (float): Радиус круга.

**Возвращает:**
- `float`: Площадь круга.

**Пример использования:**

```python
from circle import area

result = area(5)
print(result)

```

##### Вывод: 78.53981633974483


#### Функция `perimeter(r)`

Вычисляет периметр (длину окружности) круга по заданному радиусу.

**Параметры:**
- `r` (float): Радиус круга.

**Возвращает:**
- `float`: Периметр круга.

**Пример использования:**

```python
from circle import perimeter

result = perimeter(5)
print(result)
```

##### Вывод: 31.41592653589793


### Модуль `square.py`

#### Функция `area(a)`

Вычисляет площадь квадрата по заданной стороне.

**Параметры:**
- `a` (float): сторона квадрата.

**Возвращает:**
- `float`: Площадь квадрата.

**Пример использования:**

```python
from square import area

result = area(5)
print(result)
```
##### Вывод: 25

#### Функция `perimeter(a)`

Вычисляет периметр квадрата по заданной стороне.

**Параметры:**
- `a` (float): Сторона квадрата.

**Возвращает:**
- `float`: Периметр квадрата.

```python
from square import perimeter

result = perimeter(5)
print(result)
```
##### Вывод: 20


### Модуль `rectangle.py`

#### Функция `area(a, b)`

Вычисляет площадь прямоугольника по его длине и ширине.

**Параметры:**
- `a` (float): Длина прямоугольника.
- `b` (float): Ширина прямоугольника.

**Возвращает:**
- `float`: Площадь прямоугльника.

```python
from rectangle import area

result = area(5, 6)
print(result)
```
##### Вывод: 30

#### Функция `perimeter(r)`

Вычисляет периметр прямоугольника по его длине и ширине.

**Параметры:**
- `a` (float): Длина прямоугольника.
- `b` (float): Ширина прямоугольника.

**Возвращает:**
- `float`: Периметр прямоугольника.

**Пример использования:**

```python
from rectangle import perimeter

result = perimeter(5, 6)
print(result)
```
##### Вывод: 22


### Модуль `triangle.py`

#### Функция `area(a, h)`

Вычисляет площадь треугольника по основанию и высоте.

**Параметры:**
- `a` (float): Основание треугольника.
- `h` (float): Высота треугольника.

**Возвращает:**
- `float`: Площадь треугольника.

**Пример использования:**

```python
from triangle import area

result = area(5, 2)
print(result)
```
##### Вывод: 5

#### Функция `perimeter(r)`

Вычисляет периметр площадь треугольника по 3 сторонам.

**Параметры:**
- `a` (float): Первая сторона треугольника.
- `b` (float): Вторая сторона треугольника.
- `с` (float): Третья сторона треугольника.

**Возвращает:**
- `float`: Периметр треугольника.

**Пример использования:**

```python
from triangle import perimeter

result = perimeter(5, 4, 3)
print(result)
```
##### Вывод: 12

## Тестирование

В проекте добавлены автоматизированные тесты для проверки функциональности основных вычислений площади и периметра фигур, включая треугольник. Тесты используют фреймворк **unittest** и покрывают следующие аспекты:

- Правильность вычислений площади и периметра.
- Проверка обработки некорректных данных (строки, отрицательные числа, нули).
- Проверка граничных значений.

### Запуск тестов

Для запуска тестов используйте следующую команду:
```bash
python -m unittest discover tests
```

### Реализация автоматического теста на примере triangle.py

Тесты покрывают различные сценарии работы с треугольниками:

#### 1. Корректные данные:
- Проверка вычисления площади с положительными значениями основания и высоты.
- Проверка вычисления периметра с корректными длинами сторон.

#### 2. Некорректные данные:
- Проверка на строки вместо чисел.
- Проверка на отрицательные значения и нули.

#### 3. Граничные значения:
- Проверка невалидных длин сторон для периметра (например, длина одной стороны больше суммы двух других).

#### Пример тестов для треугольника

```python
import unittest
from geometric_lib.triangle import area, perimeter

class TestTriangle(unittest.TestCase):

# Тестируем правильность вычисления площади треугольника
def test_area_valid(self):
self.assertEqual(area(10, 5), 25) # Площадь = 10 * 5 / 2 = 25
self.assertEqual(area(7.5, 3.2), 12.0) # Площадь = 7.5 * 3.2 / 2 = 12.0

# Тестируем корректность периметра
def test_perimeter_valid(self):
self.assertEqual(perimeter(3, 4, 5), 12) # Периметр = 3 + 4 + 5 = 12
self.assertEqual(perimeter(10.5, 7.5, 6), 24.0) # Периметр = 10.5 + 7.5 + 6 = 24.0

# Тестируем, когда передаются некорректные данные для площади
def test_area_invalid(self):
with self.assertRaises(ValueError):
area("10", 5) # Ожидается ошибка, строка вместо числа
with self.assertRaises(ValueError):
area(10, "5") # Ожидается ошибка, строка вместо числа
with self.assertRaises(ValueError):
area("10", "5") # Ожидается ошибка, строки вместо чисел

# Тестируем, когда передаются некорректные данные для периметра
def test_perimeter_invalid(self):
with self.assertRaises(ValueError):
perimeter("3", 4, 5) # Ожидается ошибка, строка вместо числа
with self.assertRaises(ValueError):
perimeter(3, "4", 5) # Ожидается ошибка, строка вместо числа
with self.assertRaises(ValueError):
perimeter(3, 4, "5") # Ожидается ошибка, строка вместо числа
with self.assertRaises(ValueError):
perimeter(-3, 4, 5) # Ожидается ошибка, отрицательная длина стороны

# Тестируем, когда одна из сторон треугольника не удовлетворяет неравенству треугольника
def test_perimeter_invalid_triangle(self):
with self.assertRaises(ValueError):
perimeter(1, 2, 10) # Сумма двух сторон 1 + 2 должна быть больше 10
with self.assertRaises(ValueError):
perimeter(5, 3, 1) # Сумма двух сторон 5 + 3 должна быть больше 1
```
#### Ввод невалидных данных

```python
from triangle import perimeter

result = perimeter("5", 4, 3)
print(result)
```
Вывод : ValueError: Ожидаются числовые значения для сторон треугольника.

# История изменений

- `ba7d4fd` - Исправлено вычисление периметра в rectangle.py
- `b52d087` - Добавлены вычисления для треугольника
- `730dc10` - Добавлены вычисления для прямоугольника
- `d078c8d` - Добавлена документация в проект
- `8ba9aeb` - Добавлены функции для вычисления площади и периметра квадрата и круга.
Empty file added docs/cd
Empty file.
Loading