Este projeto implementa uma série de calculadoras desenvolvidas com boas práticas de design de código e clean code. Criado utilizando Python e Flask, ele também faz uso das poderosas bibliotecas NumPy para cálculos avançados e Pytest para garantir a qualidade através de testes automatizados. O objetivo é proporcionar uma solução robusta e eficiente, seguindo princípios de desenvolvimento limpo e organizado.
- 🐍 Python: Linguagem de programação principal.
- 🌐 Flask: Framework web utilizado para expor as rotas das calculadoras.
- 🔢 Numpy: Biblioteca para cálculos matemáticos complexos.
- 🧪 Pytest: Ferramenta para testes automatizados.
- Um número é dividido em 3 partes iguais.
- A primeira parte é dividida por 4, somada a 7, elevada ao quadrado e multiplicada por 0.257.
- A segunda parte é elevada à potência de 2.121, dividida por 5 e somada a 1.
- A terceira parte permanece inalterada.
- O resultado final é a soma desses três valores.
- N números são enviados como entrada.
- Cada número é multiplicado por 11 e elevado à potência de 0.95.
- O desvio padrão dos resultados é calculado e retornado como o inverso (1 / resultado).
- N números são fornecidos como entrada.
- Se a variância dos números for menor que a multiplicação entre eles:
- Uma mensagem de sucesso é retornada.
- Caso contrário:
- Uma mensagem de falha é exibida.
- N números são fornecidos como entrada.
- A média dos números é calculada e retornada.
O projeto utiliza dois padrões de design principais, aplicados para melhorar a organização e a escalabilidade do código.
A aplicação do Padrão Facade simplifica o uso das bibliotecas externas, como o NumPy
, oferecendo uma interface simplificada para a lógica principal das calculadoras. Isso ajuda a reduzir a complexidade no código que interage diretamente com essas bibliotecas.
O Padrão Factory é utilizado para separar a responsabilidade de criação das instâncias das calculadoras. Dentro da pasta factories
, há um arquivo específico para cada calculadora, que é responsável por criar a instância correspondente. Isso mantém o arquivo de rotas mais limpo e focado na interação com o usuário.
-
Clone o repositório:
git clone https://github.com/joschonarth/crazy-calculators cd crazy-calculators
-
Crie um ambiente virtual (opcional):
python -m venv .venv
2.1. Ative o ambiente virtual:
source .venv/bin/activate # Linux/Mac .venv\Scripts\activate # Windows
-
Instale as dependências:
pip install -r requirements.txt
-
Inicie o servidor Flask:
python run.py
-
Acesse o projeto em
http://localhost:5000
.
Request:
{
"number": 3
}
Response:
{
"data": {
"calculator": 1,
"result": 15.71
}
}
Request:
{
"numbers": [2.12, 4.62, 1.32]
}
Response:
{
"data": {
"calculator": 2,
"result": 0.08
}
}
Request:
{
"numbers": [1, 2, 3, 4, 5]
}
Response:
{
"data": {
"calculator": 3,
"success": true,
"value": 2.0
}
}
Request:
{
"numbers": [1, 1, 1, 1, 1000]
}
Response:
{
"errors": [
{
"detail": "Process failure: variance greater than multiplication",
"title": "BadRequest"
}
]
}
Request:
{
"numbers": [1, 2, 3, 4, 5]
}
Response:
{
"data": {
"calculator": 4,
"success": true,
"value": 3.0
}
}
Os testes podem ser executados com o Pytest
. Para rodar todos os testes, use o seguinte comando:
pytest
- 🐍 Python Documentation: Documentação oficial do Python.
- 📖 Flask Documentation: Documentação oficial do Flask.
- 📘 NumPy Documentation: Documentação oficial do NumPy.
- 🧪 Pytest Documentation: Documentação oficial do Pytest.
- 🏠 Facade Pattern: Padrão de Design Facade.
- 🏭 Factory Pattern: Padrão de Design Factory.
Contribuições são bem-vindas! Sinta-se à vontade para abrir um issue ou enviar um pull request.