Matemática e Estatística
Computação numérica é uma habilidade fundamental de programação. A biblioteca padrão do Python fornece um conjunto completo de ferramentas — desde funções matemáticas básicas até análise estatística, desde aritmética decimal precisa até operações com frações. Esta lição ensina você a usar o módulo certo para o cenário certo.
1. math — Funções Matemáticas
import math
# Constantes comuns
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
# Arredondamento
print(math.ceil(3.14)) # 4 (teto)
print(math.floor(3.14)) # 3 (piso)
# Potências e logaritmos
print(math.pow(2, 10)) # 1024.0 (2 elevado a 10)
print(math.sqrt(16)) # 4.0 (raiz quadrada)
print(math.log(100, 10)) # 2.0 (log base 10)
# Trigonometria
print(math.sin(math.pi / 2)) # 1.0
print(math.cos(0)) # 1.0
print(math.radians(180)) # 3.14159... (graus para radianos)
Exemplo: Cálculo de Distância (Dificuldade ⭐)
import math
def distancia(x1, y1, x2, y2):
"""Calcula a distância entre dois pontos"""
return math.sqrt((x2 - x1) 2 + (y2 - y1) 2)
def area_circulo(raio):
"""Calcula a área de um círculo"""
return math.pi * raio ** 2
print(f"Distância: {distancia(0, 0, 3, 4):.2f}") # 5.00
print(f"Área do círculo: {area_circulo(5):.2f}") # 78.54
2. statistics — Análise Estatística
import statistics
data = [12, 15, 18, 20, 22, 25, 30, 35, 40]
# Tendência central
print(statistics.mean(data)) # 24.11 (média)
print(statistics.median(data)) # 22 (mediana)
# print(statistics.mode(data)) # moda (erro se não houver moda única)
# Dispersão
print(statistics.stdev(data)) # 9.32 (desvio padrão amostral)
print(statistics.variance(data)) # 86.86 (variância amostral)
Exemplo: Análise de Notas (Dificuldade ⭐⭐)
import statistics
scores = [85, 92, 78, 90, 88, 76, 95, 82, 89, 73]
print("=== Análise de Notas ===")
print(f"Média: {statistics.mean(scores):.1f}")
print(f"Mediana: {statistics.median(scores)}")
print(f"Máximo: {max(scores)}")
print(f"Mínimo: {min(scores)}")
print(f"Desvio Padrão: {statistics.stdev(scores):.2f}")
mean = statistics.mean(scores)
std = statistics.stdev(scores)
print("\n=== Distribuição de Notas ===")
for score in sorted(scores, reverse=True):
if score > mean + std:
level = "Excelente ⭐"
elif score > mean:
level = "Bom 👍"
elif score > mean - std:
level = "Médio"
else:
level = "Precisa Melhorar 💪"
print(f" {score:3d} — {level}")
3. decimal — Aritmética Decimal Precisa
from decimal import Decimal, getcontext
# Problema de precisão float
print(0.1 + 0.2) # 0.30000000000000004 ❌
# Cálculo preciso com Decimal
print(Decimal("0.1") + Decimal("0.2")) # 0.3 ✅
# Definir precisão
getcontext().prec = 4 # Precisão global de 4 dígitos
print(Decimal(1) / Decimal(3)) # 0.3333 (4 dígitos)
# Cálculos financeiros devem usar Decimal
price = Decimal("19.99")
quantity = Decimal("3")
tax_rate = Decimal("0.08")
total = price * quantity
tax = total * tax_rate
print(f"Total: {total:.2f}") # 59.97
print(f"Imposto: {tax:.2f}") # 4.80
print(f"Valor a pagar: {total + tax:.2f}") # 64.77
Decimal para cálculos financeiros, nunca float. O problema de precisão de 0.1 + 0.2 é fatal em finanças. Decimal sacrifica algum desempenho por aritmética decimal precisa.
4. fractions — Aritmética de Frações
from fractions import Fraction
# Criar frações
f1 = Fraction(1, 3) # 1/3
f2 = Fraction(2, 6) # Auto-reduz para 1/3
print(f1) # 1/3
print(f2) # 1/3
print(f1 == f2) # True
# Operações com frações
a = Fraction(1, 2)
b = Fraction(1, 3)
print(a + b) # 5/6
print(a * b) # 1/6
print(a / b) # 3/2
# Conversão entre frações e floats
print(float(Fraction(1, 3))) # 0.3333333333
print(Fraction(0.25).limit_denominator()) # 1/4
Casos de Uso Comuns
- math: Geometria (área/volume), trigonometria, operações logarítmicas.
- statistics: Análise de notas de exames, relatórios de dados, dados de experimentos científicos.
- decimal: Cálculo de preços em e-commerce, demonstrações financeiras, cálculo de impostos.
- fractions: Proporções de receitas, proporções de engenharia, aplicações educacionais.
❓ Perguntas Frequentes
P: Qual a diferença entre o módulo
mathe as funções embutidasabs(),round(),sum()? R: Funções embutidas lidam com operações básicas (valor absoluto, arredondamento, soma).mathfornece funções mais especializadas (trigonometria, logaritmos, fatorial). Use funções embutidas quando elas forem suficientes. P:statistics.mean()é melhor que calcular a média manualmente? R:mean()é otimizado internamente (uma passagem para soma e contagem), tem melhor desempenho para grandes conjuntos de dados e lida com casos extremos como listas vazias. P: Quando devo usarFractionvsDecimal? R: UseFractionquando precisar de aritmética racional exata (como exercícios de frações em software educacional). UseDecimalpara cálculos decimais com precisão controlada (como finanças). Para casos simples,floaté suficiente — 99% da programação diária não precisará de nenhum destes.
📖 Resumo
math:ceil()/floor()arredondamento,sqrt()raiz quadrada, constantespi/e, funções trigonométricasstatistics:mean()média,median()mediana,stdev()desvio padrãoDecimal: Aritmética decimal precisa, adequada para finanças; crie a partir de strings (Decimal("0.1"))Fraction: Aritmética exata de frações, redução automática
📝 Atividades
-
Básico (Dificuldade ⭐): Use o módulo
mathpara calcular a área e a circunferência de um círculo com raio 7. -
Intermediário (Dificuldade ⭐⭐): Dado
data = [23, 45, 67, 12, 34, 56, 78, 90, 11, 43], usestatisticspara calcular média, mediana e desvio padrão. Depois usemathpara determinar quais valores estão dentro de "média ± desvio padrão." -
Desafio (Dificuldade ⭐⭐⭐): Escreva um programa de "finalização de carrinho de compras." Produtos têm nomes, preços unitários (
Decimal) e quantidades. Após adicionar itens, calcule o total, imposto (8%) e desconto (subtraia 10 para cada 100), depois exiba o valor final. Requisito: Todos os cálculos monetários devem usarDecimal.



