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

PYTHON
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 ⭐)

PYTHON
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
▶ Experimente

2. statistics — Análise Estatística

PYTHON
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 ⭐⭐)

PYTHON
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}")
▶ Experimente

3. decimal — Aritmética Decimal Precisa

PYTHON
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
💡 Sempre use 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

PYTHON
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


❓ Perguntas Frequentes

P: Qual a diferença entre o módulo math e as funções embutidas abs(), round(), sum()? R: Funções embutidas lidam com operações básicas (valor absoluto, arredondamento, soma). math fornece 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 usar Fraction vs Decimal? R: Use Fraction quando precisar de aritmética racional exata (como exercícios de frações em software educacional). Use Decimal para 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


📝 Atividades

  1. Básico (Dificuldade ⭐): Use o módulo math para calcular a área e a circunferência de um círculo com raio 7.

  2. Intermediário (Dificuldade ⭐⭐): Dado data = [23, 45, 67, 12, 34, 56, 78, 90, 11, 43], use statistics para calcular média, mediana e desvio padrão. Depois use math para determinar quais valores estão dentro de "média ± desvio padrão."

  3. 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 usar Decimal.

100%