Pular para o conteúdo principal

Aula 06: Funções, Bibliotecas e Depuração

Objetivos de Aprendizagem

Ao final desta aula, você deve ser capaz de:

  1. Definir funções com parâmetros com valor padrão.
  2. Compreender o escopo de variáveis (local vs. global).
  3. Importar e usar módulos da biblioteca padrão do Python (math, random).
  4. Aplicar técnicas básicas de depuração com print.
  5. Usar o debugger do VS Code para inspecionar a execução do programa.

Conteúdo

1) Parâmetros com valor padrão

Funções podem ter parâmetros com valor padrão, usados quando o argumento não é passado.

def saudacao(nome, periodo="dia"):
print(f"Bom {periodo}, {nome}!")

saudacao("Ana") # Bom dia, Ana!
saudacao("Carlos", "tarde") # Boa tarde, Carlos!

Parâmetros com valor padrão devem sempre vir depois dos obrigatórios.

2) Escopo de variáveis

O escopo define onde uma variável pode ser acessada.

total = 0 # variável global

def adicionar(valor):
resultado = total + valor # resultado é local
return resultado

print(adicionar(5)) # 5
# print(resultado) # NameError: resultado não existe aqui

Evite modificar variáveis globais dentro de funções. Prefira usar parâmetros e retorno.

# Ruim
contador = 0
def incrementar():
global contador
contador += 1

# Melhor
def incrementar(contador):
return contador + 1

contador = 0
contador = incrementar(contador)

3) Biblioteca padrão: módulo math

O módulo math oferece funções e constantes matemáticas.

import math

print(math.pi) # 3.141592653589793
print(math.sqrt(16)) # 4.0
print(math.ceil(2.3)) # 3 (arredonda para cima)
print(math.floor(2.9)) # 2 (arredonda para baixo)
print(math.pow(2, 10)) # 1024.0

Exemplo: área do círculo

import math

def area_circulo(raio):
return math.pi * math.pow(raio, 2)

print(f"Área: {area_circulo(5):.2f}")

Saída esperada: Área: 78.54

4) Biblioteca padrão: módulo random

O módulo random gera valores aleatórios.

import random

print(random.randint(1, 6)) # número inteiro entre 1 e 6
print(random.random()) # número float entre 0.0 e 1.0

nomes = ["Alice", "Bob", "Carol"]
print(random.choice(nomes)) # escolhe um elemento da lista

Exemplo: simulação de dado

import random

def rolar_dado(lados=6):
return random.randint(1, lados)

print(f"Você tirou: {rolar_dado()}")
print(f"Dado de 12 lados: {rolar_dado(12)}")

5) Principais módulos da biblioteca padrão

Python inclui uma vasta biblioteca padrão — módulos prontos para uso que não exigem instalação de pacotes externos. A tabela abaixo lista os mais úteis para o dia a dia:

Módulo (import)Principais funções/recursosDocumentação
mathFunções matemáticas para uso geral. sqrt(x) — raiz quadrada; pow(x, y) — potência; ceil(x) / floor(x) — arredondamento; log(x) — logaritmo; sin(x) / cos(x) — trigonometria; constantes pi e e.docs.python.org
randomGeração de valores aleatórios. randint(a, b) — inteiro entre a e b; random() — float entre 0 e 1; choice(seq) — escolhe um elemento; shuffle(seq) — embaralha in-place; sample(seq, k) — amostra sem repetição.docs.python.org
statisticsEstatística descritiva simples. mean(data) — média; median(data) — mediana; mode(data) — valor mais frequente; stdev(data) — desvio padrão; variance(data) — variância.docs.python.org
datetimeManipulação de datas e horas. datetime.now() — data/hora atual; date.today() — data de hoje; timedelta(days=n) — diferença entre datas; formatação com strftime() e parsing com strptime().docs.python.org
timeControle de tempo e medição de desempenho. sleep(s) — pausa a execução por s segundos; time() — timestamp Unix; perf_counter() — cronômetro de alta precisão para medir tempo de execução.docs.python.org
osInteração com o sistema operacional. getcwd() — diretório atual; listdir(path) — lista arquivos; mkdir(path) — cria diretório; path.join() — concatena caminhos; path.exists() — verifica se existe.docs.python.org
pathlibManipulação moderna de caminhos de arquivo. Path(p) — cria objeto de caminho; .read_text() / .write_text() — lê/grava arquivos; .exists() — verifica existência; .glob(pattern) — busca arquivos por padrão.docs.python.org
sysAcesso a parâmetros e funções do interpretador Python. argv — lista de argumentos da linha de comando; exit(code) — encerra o programa; version — versão do Python; stdin / stdout — streams padrão.docs.python.org
jsonSerialização e desserialização de dados no formato JSON. dumps(obj) — converte objeto Python para string JSON; loads(s) — converte string JSON para Python; dump() / load() — equivalentes para arquivos.docs.python.org
csvLeitura e escrita de arquivos CSV. reader(f) — itera linhas como listas; writer(f) — grava linhas; DictReader(f) — lê cada linha como dicionário; DictWriter(f) — grava dicionários.docs.python.org
reExpressões regulares para busca e manipulação de texto. search(pattern, s) — encontra primeira ocorrência; findall() — lista todas; sub(pattern, repl, s) — substitui; compile() — pré-compila padrão para reuso.docs.python.org
stringConstantes e utilitários para texto. ascii_letters — todas as letras; digits"0123456789"; punctuation — sinais de pontuação; whitespace — espaços em branco; Template — interpolação segura de strings.docs.python.org
collectionsEstruturas de dados especializadas. Counter(iterable) — conta ocorrências; deque — fila de duas pontas eficiente; defaultdict — dicionário com valor padrão; namedtuple — tupla com campos nomeados.docs.python.org
itertoolsIteradores de alta performance para laços. chain() — concatena iteráveis; product() — produto cartesiano; combinations() / permutations() — combinatória; cycle() — repete infinitamente; islice() — fatia iterador.docs.python.org
functoolsFerramentas para programação funcional. reduce(func, iterable) — aplica função acumulativamente; partial() — fixa argumentos de uma função; lru_cache() — memoização automática; wraps() — preserva metadados de decoradores.docs.python.org

Para explorar todos os módulos disponíveis, consulte o índice da biblioteca padrão.

6) Depuração com print

A forma mais simples de depurar é usar print para inspecionar valores intermediários.

def calcular_desconto(preco, percentual):
print(f"[DEBUG] preco={preco}, percentual={percentual}")
desconto = preco * (percentual / 100)
print(f"[DEBUG] desconto calculado={desconto}")
return preco - desconto

resultado = calcular_desconto(200, 15)
print(f"Preço final: {resultado}")

Boas práticas:

  • Use um prefixo como [DEBUG] para identificar prints de depuração.
  • Remova os prints de depuração antes de entregar o código final.

7) Depuração com o debugger do VS Code

O VS Code possui um debugger integrado que permite pausar a execução e inspecionar variáveis.

Passos básicos:

  1. Clique na margem esquerda da linha de código para definir um breakpoint (ponto vermelho).
  2. Pressione F5 para iniciar a depuração.
  3. Use os controles para navegar:
    • Step Over (F10): executa a linha atual e vai para a próxima.
    • Step Into (F11): entra dentro da função sendo chamada.
    • Continue (F5): retoma até o próximo breakpoint.
  4. Observe os valores das variáveis no painel Variables.

O debugger é mais eficiente que print quando o problema está dentro de funções encadeadas ou laços.

Exercícios (checkpoints)

  1. Crie uma função potencia(base, expoente=2) que retorna base elevado a expoente.
    • Critério de verificação: potencia(3) deve retornar 9; potencia(2, 10) deve retornar 1024.
  2. Crie uma função hipotenusa(a, b) usando math.sqrt que retorna a hipotenusa de um triângulo retângulo.
    • Critério de verificação: hipotenusa(3, 4) deve retornar 5.0.
  3. Escreva um programa que simula 5 lançamentos de um dado de 6 lados usando random.randint.
    • Critério de verificação: todos os valores devem estar entre 1 e 6.
  4. Adicione prints de depuração a uma função existente, execute e depois os remova.
    • Critério de verificação: a função deve ter o comportamento correto sem prints de debug ao final.
  5. Use random.choice para selecionar aleatoriamente um item de uma lista de 4 frutas.
    • Critério de verificação: o item impresso deve pertencer à lista original.
  6. Crie uma função arredondar_cima(valor) usando math.ceil e use o debugger para verificar o valor recebido.
    • Critério de verificação: arredondar_cima(4.1) deve retornar 5.

Referências

Principais

Aprofundamento