Fundamentos da Biblioteca Padrão (Parte 1)

Uma das maiores características do Python é "Batteries Included" — um conjunto completo de bibliotecas padrão vem com cada instalação do Python. Esta lição cobre quatro dos módulos mais comumente usados: random, time, sys e os. Mesmo aprendendo apenas as funções mais populares de cada um, você resolverá muitos problemas do mundo real.


1. random — Números Aleatórios

PYTHON
import random

# Float aleatório [0, 1)
print(random.random())              # 0.3745...

# Inteiro aleatório [a, b] (inclusive)
print(random.randint(1, 10))        # Inteiro aleatório entre 1 e 10

# Escolha aleatória
fruits = ["maçã", "banana", "laranja", "uva"]
print(random.choice(fruits))        # Escolhe um aleatoriamente

# Amostra aleatória (sem reposição)
print(random.sample(fruits, 2))     # Escolhe 2 aleatoriamente

# Embaralhar ordem
cards = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
random.shuffle(cards)
print(cards)                        # Ordem é embaralhada

Exemplo: Programa de Sorteio (Dificuldade ⭐)

PYTHON
import random

# Lista de participantes
participants = ["Alice", "Bob", "Charlie", "Diana", "Eve",
                "Frank", "Grace", "Henry"]

# 1º prêmio — 1 vencedor
first = random.choice(participants)
print(f"🎉 1º Prêmio: {first}")

# 2º prêmio — 2 vencedores (excluindo 1º)
remaining = [p for p in participants if p != first]
second = random.sample(remaining, 2)
print(f"🎊 2º Prêmio: {' & '.join(second)}")

# 3º prêmio — 3 vencedores
remaining = [p for p in remaining if p not in second]
third = random.sample(remaining, 3)
print(f"🎁 3º Prêmio: {' & '.join(third)}")
▶ Experimente

2. time — Manipulação de Tempo

PYTHON
import time

# Timestamp atual (segundos desde 1970-01-01)
print(time.time())                  # 1758588800.123

# Pausar execução (segundos)
print("Início")
time.sleep(1)                       # Pausa por 1 segundo
print("1 segundo depois")

# Formatar hora atual
print(time.strftime("%Y-%m-%d %H:%M:%S"))       # 2026-06-23 16:00:00

Exemplo: Temporizador (Dificuldade ⭐)

PYTHON
import time

def contagem_regressiva(segundos):
    """Temporizador de contagem regressiva"""
    while segundos > 0:
        print(f"\r⏱ {segundos} segundos restantes", end="")
        time.sleep(1)
        segundos -= 1
    print("\r⏰ Tempo esgotado!")

# Medir tempo de execução de código
start = time.time()
total = sum(range(1000000))
end = time.time()
print(f"Tempo de execução: {end - start:.4f} segundos")
▶ Experimente

3. sys — Interação com o Sistema

PYTHON
import sys

# Versão do Python
print(sys.version)                  # 3.13.0 ...

# Argumentos da linha de comando (ao executar python script.py a b c)
print(sys.argv)                     # ['script.py', 'a', 'b', 'c']

# Sair do programa
# sys.exit(0)                       # Saída normal

# Entrada padrão
# line = sys.stdin.readline()       # Lê uma linha de entrada

Exemplo: Calculadora de Linha de Comando (Dificuldade ⭐⭐)

PYTHON
import sys

def main():
    # Uso: python calculator.py 3 + 5
    if len(sys.argv) != 4:
        print("Uso: python calculator.py num1 operador num2")
        print("Exemplo: python calculator.py 3 + 5")
        return

    a = float(sys.argv[1])
    op = sys.argv[2]
    b = float(sys.argv[3])

    if op == "+":
        result = a + b
    elif op == "-":
        result = a - b
    elif op == "*":
        result = a * b
    elif op == "/":
        if b == 0:
            print("Erro: não é possível dividir por zero")
            return
        result = a / b
    else:
        print(f"Operador não suportado: {op}")
        return

    print(f"{a} {op} {b} = {result}")

if __name__ == "__main__":
    main()
▶ Experimente

4. os — Sistema Operacional

PYTHON
import os

# Diretório de trabalho atual
print(os.getcwd())                  # D:\projeto

# Mudar diretório
# os.chdir("/tmp")

# Listar conteúdo do diretório
for item in os.listdir("."):
    print(item)

# Criar diretório
# os.mkdir("nova_pasta")

# Verificar caminhos
print(os.path.exists("teste.txt"))   # True
print(os.path.isfile("teste.txt"))   # True
print(os.path.isdir("data"))        # True

# Juntar caminhos
path = os.path.join("data", "files", "teste.txt")
print(path)                         # data/files/teste.txt

Exemplo: Renomeação em Lote de Arquivos (Dificuldade ⭐⭐)

PYTHON
import os

def batch_rename(directory, prefix):
    """Renomeia em lote todos os arquivos .txt em um diretório"""
    files = [f for f in os.listdir(directory) if f.endswith(".txt")]
    
    for i, filename in enumerate(files, 1):
        old_path = os.path.join(directory, filename)
        new_name = f"{prefix}_{i:03d}.txt"
        new_path = os.path.join(directory, new_name)
        os.rename(old_path, new_path)
        print(f"  {filename} → {new_name}")

print("Exemplo de renomeação em lote (apenas exibição, não executado):")
print("Iterar todos os arquivos .txt, renomear para formato prefixo_001.txt")
▶ Experimente

Casos de Uso Comuns


❓ Perguntas Frequentes

P: random é adequado para números aleatórios criptográficos? R: Não. random usa um PRNG (Gerador de Números Pseudo-Aleatórios), que é previsível. Para números aleatórios criptograficamente seguros (ex.: gerar senhas, tokens), use o módulo secrets. P: time.sleep() bloqueia o programa inteiro. Como faço um atraso não bloqueante? R: sleep() de fato bloqueia a thread atual. Para atrasos não bloqueantes, use multi-threading ou frameworks assíncronos como asyncio. Para cenários simples, sleep() é suficiente. P: Devo usar os ou pathlib? R: Python 3.4+ recomenda pathlib (mais orientado a objetos, mais intuitivo), mas os é de nível mais baixo e mais abrangente. Use pathlib para novos projetos; use os para chamadas de sistema de baixo nível.


📖 Resumo


📝 Atividades

  1. Básico (Dificuldade ⭐): Escreva um programa que gere 10 números inteiros aleatórios entre 1 e 100, exiba-os e sua média.

  2. Intermediário (Dificuldade ⭐⭐): Escreva uma função geradora de senha generate_password(length=8) que cria senhas aleatórias contendo maiúsculas, minúsculas e dígitos. Dica: Use string.ascii_letters + string.digits como pool de caracteres; use random.choice() para escolher caracteres.

  3. Desafio (Dificuldade ⭐⭐⭐): Escreva uma "ferramenta de estatísticas de pasta." Dado um caminho de diretório (passado via sys.argv), conte o número de arquivos e o tamanho total para cada tipo de arquivo (extensão). Dica: Use os.listdir() para iterar, os.path.splitext() para extensão, os.path.getsize() para tamanho do arquivo.

100%