Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
e8ef051
new file
kondratevakk Sep 27, 2024
adeadfd
error fixed
kondratevakk Sep 27, 2024
c9b53b4
Update README.md
kondratevakk Oct 15, 2024
ef52d57
Update circle.py
kondratevakk Oct 15, 2024
0766f59
Update rectangle.py
kondratevakk Oct 15, 2024
993d58d
Update square.py
kondratevakk Oct 15, 2024
4be26ff
Update triangle.py
kondratevakk Oct 15, 2024
3b1187a
Update README.md
kondratevakk Oct 15, 2024
8be00cb
Update README.md
kondratevakk Oct 15, 2024
de6b1f7
Update README.md
kondratevakk Oct 15, 2024
0d0fe55
Update README.md
kondratevakk Oct 15, 2024
0247f30
Update README.md
kondratevakk Oct 15, 2024
ed984b3
Update README.md
kondratevakk Oct 15, 2024
174eaa0
Update README.md
kondratevakk Oct 15, 2024
44e2de6
Update README.md
kondratevakk Oct 15, 2024
304135c
Update README.md
kondratevakk Oct 15, 2024
b0a593d
Update README.md
kondratevakk Oct 15, 2024
a1d4c92
Update README.md
kondratevakk Oct 15, 2024
16664cd
Update README.md
kondratevakk Oct 15, 2024
e09dfed
Update README.md
kondratevakk Oct 15, 2024
14d2653
Update README.md
kondratevakk Oct 15, 2024
5bec65e
Update README.md
kondratevakk Oct 15, 2024
1e8cdc1
Update README.md
kondratevakk Oct 15, 2024
84ab6c0
Update README.md
kondratevakk Oct 16, 2024
c1526a2
Update README.md
kondratevakk Oct 16, 2024
66d3fe1
Update README.md
kondratevakk Oct 16, 2024
b520022
Create circle_test.py
kondratevakk Nov 21, 2024
7cc8c0a
Create rectangle_test.py
kondratevakk Nov 21, 2024
8e627f9
Create square_test.py
kondratevakk Nov 21, 2024
142af3e
Create triangle_test .py
kondratevakk Nov 21, 2024
eb4cb90
Create requirements.txt
kondratevakk Nov 21, 2024
ddd4e45
Create main.yml
kondratevakk Nov 26, 2024
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
59 changes: 59 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
linux-build:
# The type of runner that the job will run on
runs-on: ubuntu-latest

# Steps represent a sequence of tasks that will be executed as part of the job
steps:

# Runs a set of commands using the runners shell
- name: checkout
uses: actions/checkout@v3
- name: python_install
uses: actions/setup-python@v3
with:
python-version: 3.9
- name: run_unittests
run: |
python -m unittest "square_test.py"
python -m unittest "rectangle_test.py"
python -m unittest "circle_test.py"
python -m unittest "triangle_test.py"

windows-build:
# The type of runner that the job will run on
runs-on: windows-latest

# Steps represent a sequence of tasks that will be executed as part of the job
steps:

# Runs a set of commands using the runners shell
- name: checkout
uses: actions/checkout@v3
- name: python_install
uses: actions/setup-python@v3
with:
python-version: 3.9
- name: Run our tests
run: |
python.exe -m unittest "square_test.py"
python.exe -m unittest "rectangle_test.py"
python.exe -m unittest "circle_test.py"
python.exe -m unittest "triangle_test.py"
28 changes: 26 additions & 2 deletions circle.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,34 @@
import math


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

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

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

Пример вызова:
>>> area(5)
78.53981633974483
"""
return math.pi * r * r


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

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

Возвращает:
float: Длина окружности.

Пример вызова:
>>> perimeter(5)
31.41592653589793
"""
return 2 * math.pi * r
197 changes: 187 additions & 10 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,187 @@
# Math formulas
## Area
- Circle: S = πR²
- Rectangle: S = ab
- Square: S = a²

## Perimeter
- Circle: P = 2πR
- Rectangle: P = 2a + 2b
- Square: P = 4a
# **Geometric Lib Documentation**
## **Общее описание решения**
Данный проект включает в себя функции для вычисления площади и периметра различных геометрических фигур: круга, прямоугольника, квадрата и треугольника. Каждая функция принимает параметры, соответствующие размерам фигуры, и возвращает рассчитанное значение площади или периметра. Для выполнения вычислений используются базовые математические операции, а также константа `pi` из библиотеки `math`.

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

## Функции для работы с окружностью
circle.py

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

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

**Параметры:**

`r (float)`: Радиус круга.

**Возвращает:**

`float`: Длина окружности.

#### Пример вызова функции `perimeter(r)`
```python
- Вызов функции: `perimeter(5)`
- Результат: `31.41592653589793`
```


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

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

**Параметры:**

`r (float)`: Радиус круга.

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

#### Пример вызова функции `perimeter(r)`
```python
- Вызов функции: `area(5)`
- Результат: `78.53981633974483`
```

## Функции для работы с прямоугольником
**rectangle.py**

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

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

**Параметры:**

`a (float)`: Ширина прямоугольника.

`b (float)`: Высота прямоугольника.

**Возвращает:**

`float`: Площадь прямоугольника.

### Пример вызова функции `area(a, b)`
```python
- Вызов функции: `area(4, 5)`
- Результат: `20`
```

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

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

**Параметры:**

`a (float)`: Ширина прямоугольника.

`b (float)`: Высота прямоугольника.

**Возвращает:**

`float`: Периметр прямоугольника.

### Пример вызова функции `perimeter(a, b)`
```python
- Вызов функции: `perimeter(4, 5)`
- Результат: `18`
```

## **Функции для работы с квадратом**

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

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

**Параметры:**

`a (float)`: Длина стороны квадрата.

**Возвращает:**

`float`: Площадь квадрата.

### Пример вызова функции `perimeter(a, b)`
```python
- Вызов функции: `area(4)`
- Результат: `16`
```

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

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

**Параметры:**

`a (float)`: Длина стороны квадрата.

**Возвращает:**

`float`: Периметр квадрата.

### Пример вызова функции `perimeter(a)`
```python
- Вызов функции: `perimeter(4)`
- Результат: `16`
```

## **Функции для работы с треугольником**

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

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

**Параметры:**

`a (float)`: Основание треугольника.

`h (float)`: Высота треугольника.

**Возвращает:**

`float`: Площадь треугольника.

### Пример вызова функции `perimeter(a)`
```python
- Вызов функции: `area(5, 10)`
- Результат: `25.0`
```

## Функция perimeter(a, b, c)

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

**Параметры:**

`a (float)`: Длина первой стороны.

`b (float)`: Длина второй стороны.

`c (float)`: Длина третьей стороны.

**Возвращает:**

`float`: Периметр треугольника.

### Пример вызова функции `perimeter(a, b, c)`
```python
- Вызов функции: `perimeter(3, 4, 5)`
- Результат: `12`
```

## История изменения проекта

**Коммит:** `8ba9aeb3cea847b63a91ac378a2a6db758682460`

Описание: Добавлены модули c `circle.py` и `square.py` с функциями для круга и квадрата.

**Коммит:** `d078c8d9ee6155f3cb0e577d28d337b791de28e2`

Описание: Добавлен новый модуль rectangle.py, содержащий функции `area(a, b)` и `perimeter(a,b)` для вычисления площади и периметра прямоугольника.

**Коммит:** [`4be26fff814f09748e99e0b3bd4e8d8d22c6bf8b`](https://github.com/kondratevakk/geometric_lib/commit/4be26fff814f09748e99e0b3bd4e8d8d22c6bf8b)

**Описание:** Добавлен новый модуль `triangle.py`, включающий функции `area(a, h)` для вычисления площади треугольника и `perimeter(a, b, c)` для расчета его периметра.

**Коммит:** [`0766f59b3ea85db664c6673421c5122d75b3323b`](https://github.com/kondratevakk/geometric_lib/commit/0766f59b3ea85db664c6673421c5122d75b3323b)

**Описание:** В модуле `rectangle.py` исправлена формула вычисления периметра в функции `perimeter(a, b)`. Ранее периметр рассчитывался как `a + b`, теперь исправлено на `2 * (a + b)`.
72 changes: 72 additions & 0 deletions docs/circle_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import unittest
import math
from circle import area, perimeter

'''
Test for Circle
'''


class CircleTestCase(unittest.TestCase):
def test_zero_side(self):
res_area = area(0)
res_perimeter = perimeter(0)
self.assertEqual(res_area, 0)
self.assertEqual(res_perimeter, 0)

def test_valid_side(self):
res_area = area(3)
res_perimeter = perimeter(3)
self.assertEqual(res_area, 9 * math.pi)
self.assertEqual(res_perimeter, 6 * math.pi)

def test_valid_side2(self):
res_area = area(5)
res_perimeter = perimeter(5)
self.assertEqual(res_area, 25 * math.pi)
self.assertEqual(res_perimeter, 10 * math.pi)

def test_invalid_side_area(self):
res_area = area("tr")
res_perimeter = perimeter(2)
self.assertEqual(res_area, 0)
self.assertEqual(res_perimeter, 4 * math.pi)

def test_invalid_side_perimeter(self):
res_area = area(6)
res_perimeter = perimeter("y")
self.assertEqual(res_area, 36 * math.pi)
self.assertEqual(res_perimeter, 0)

def test_invalid_side_both(self):
res_area = area("r")
res_perimeter = perimeter("r")
self.assertEqual(res_area, 0)
self.assertEqual(res_perimeter, 0)

def test_negative_side_area(self):
res_area = area(-2)
res_perimeter = perimeter(3)
self.assertEqual(res_area, 0)
self.assertEqual(res_perimeter, 6 * math.pi)

def test_int_string_side_area(self):
res_area = area("3")
res_perimeter = perimeter(3)
self.assertEqual(res_area, 9 * math.pi)
self.assertEqual(res_perimeter, 6 * math.pi)

def test_negative_side_perimeter(self):
res_area = area(2)
res_perimeter = perimeter(-6)
self.assertEqual(res_area, 4 * math.pi)
self.assertEqual(res_perimeter, 0)

def test_int_string_side_perimeter(self):
res_area = area(3)
res_perimeter = perimeter("4")
self.assertEqual(res_area, 9 * math.pi)
self.assertEqual(res_perimeter, 8 * math.pi)

# if __name__ == '__main__':
# unittest.main()
Loading