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
90 changes: 69 additions & 21 deletions calculate.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,81 @@
import circle
import square
import triangle # Импорт модуля треугольника

# Список доступных фигур
figs = ['circle', 'square', 'triangle']

figs = ['circle', 'square']
# Список доступных функций для расчета
funcs = ['perimeter', 'area']
sizes = {}

def calc(fig, func, size):
assert fig in figs
assert func in funcs
# Словарь для хранения размеров фигур
sizes = {
'circle': 1,
'square': 1,
'triangle': 3
}

# Mapping figure names to their respective modules
fig_modules = {
'circle': circle,
'square': square,
'triangle': triangle
}


def calc(fig: str, func: str, size: list) -> float:
"""
Вычисляет и выводит результат для заданной фигуры и функции.

Параметры:
fig (str): название фигуры ().
func (str): название функции для расчета ().
size (list): список параметров фигуры ().

Возвращаемое значение:
float: результат расчета.

Пример вызова:
calc('circle', 'area', [5])
"""
if fig not in figs:
raise ValueError("Некорректная фигура")
if func not in funcs:
raise ValueError("Некорректная функция")

module = fig_modules[fig]
func_to_call = getattr(module, func)
result = func_to_call(*size)
print(f'{func} of {fig} is {result}')
return result

result = eval(f'{fig}.{func}(*{size})')
print(f'{func} of {fig} is {result}')

if __name__ == "__main__":
func = ''
fig = ''
size = list()

while fig not in figs:
fig = input(f"Enter figure name, avaliable are {figs}:\n")

while func not in funcs:
func = input(f"Enter function name, avaliable are {funcs}:\n")

while len(size) != sizes.get(f"{func}-{fig}", 1):
size = list(map(int, input("Input figure sizes separated by space, 1 for circle and square\n").split(' ')))

calc(fig, func, size)
func = ''
fig = ''
size = []

# Запрос имени фигуры у пользователя
while fig not in figs:
fig = input(f"Enter figure name, available are {figs}:\n")

# Запрос имени функции у пользователя
while func not in funcs:
func = input(f"Enter function name, available are {funcs}:\n")

# Запрос параметров фигуры у пользователя
while len(size) != sizes.get(fig, 1):
try:
size = list(
map(
int,
input(
"Input figure sizes separated by space\n"
).split()
)
)
except ValueError:
print("Please enter valid integer values.")

# Вызов функции для расчета и вывода результата
calc(fig, func, size)
27 changes: 24 additions & 3 deletions circle.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,31 @@
import math


def area(r):
return math.pi * r * 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
90 changes: 71 additions & 19 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,73 @@
# Общее описание решения

# How to use calculator:
1. Run `python calculate.py`
2. Enter the figure name. Available are Circle, Square.
3. Enter the function: Area or Perimeter.
4. Enter figure sizes. Radius for circle, one side for square.
5. Get the answer!

# Math formulas
## Area
- Circle: `S = πR²`
- Rectangle: `S = ab`
- Square: `S = a²`
- Triangle: `S = sqrt(p * (p-a) * (p-b) * (p-c))` where p is semiperimeter

## Perimeter
- Circle: `P = 2πR`
- Rectangle: `P = 2a + 2b`
- Square: `P = 4a`
- Triangle: `P = a + b + c`
Проект представляет собой библиотеку для выполнения основных геометрических расчетов, таких как вычисление площади и периметра различных фигур, включая круг, квадрат и треугольник. Эти функции могут быть использованы в различных приложениях для математического анализа, расчета строительных параметров или в образовательных целях.

# Как использовать калькулятор
1. Запустите `python calculate.py`
2. Введите название фигуры. Доступные фигуры: Круг, Квадрат.
3. Введите название функции: Площадь или Периметр.
4. Введите размеры фигуры. Радиус для круга, одна сторона для квадрата.
5. Получите результат!

# Математические формулы

## Площадь
- Круг: `S = πR²`
- Прямоугольник: `S = ab`
- Квадрат: `S = a²`
- Треугольник: `S = sqrt(p * (p-a) * (p-b) * (p-c))`, где `p` — полупериметр

## Периметр
- Круг: `P = 2πR`
- Прямоугольник: `P = 2a + 2b`
- Квадрат: `P = 4a`
- Треугольник: `P = a + b + c`

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

## area(a, b, c)

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

**Параметры**:
- `a (float)`: длина первой стороны треугольника.
- `b (float)`: длина второй стороны треугольника.
- `c (float)`: длина третьей стороны треугольника.

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

**Пример вызова**:
```python
area(3, 4, 5) # Возвращает: 6.0
```

## perimeter(a, b, c)

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

**Параметры**:
- `a (float)`: длина первой стороны треугольника.
- `b (float)`: длина второй стороны треугольника.
- `c (float)`: длина третьей стороны треугольника.

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

**Пример вызова**:
```python
perimeter(3, 4, 5) # Возвращает: 12
```

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

Update docs for calculate.py

commit d76db2ac7f69cc920ae2e6f669fb0671a7fa7d71

Add calculate.py

commit 51c40ebfd0e0b65f52fe5e54740cbb038e492db3
Doc updated for triangle

commit d080c7888b81955bad2ed78d58ad910526b5132a
26 changes: 24 additions & 2 deletions square.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,29 @@

def area(a):
return a * a
"""
Вычисляет площадь квадрата по заданной стороне.

Параметры:
a (float): длина стороны квадрата.

Возвращаемое значение:
float: площадь квадрата.

Пример вызова:
area(4) -> 16
"""
return a * a

def perimeter(a):
"""
Вычисляет периметр квадрата по заданной стороне.

Параметры:
a (float): длина стороны квадрата.

Возвращаемое значение:
float: периметр квадрата.

Пример вызова:
perimeter(4) -> 16
"""
return 4 * a
29 changes: 28 additions & 1 deletion triangle.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,33 @@
def area(a, b, c):
return (a + b + c) / 2
"""
Вычисляет полупериметр треугольника по заданным сторонам.

Параметры:
a (float): длина первой стороны треугольника.
b (float): длина второй стороны треугольника.
c (float): длина третьей стороны треугольника.

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

Пример вызова:
area(3, 4, 5) -> 6.0
"""
return (a + b + c) / 2

def perimeter(a, b, c):
"""
Вычисляет периметр треугольника по заданным сторонам.

Параметры:
a (float): длина первой стороны треугольника.
b (float): длина второй стороны треугольника.
c (float): длина третьей стороны треугольника.

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

Пример вызова:
perimeter(3, 4, 5) -> 12
"""
return a + b + c