Módulo 13 - Funções

Organizando programas com funções

9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Dividir um programa em funções pequenas, cada uma com uma tarefa.
  • Escolher nomes de função que dispensam comentário.
  • Montar o programa principal como uma sequência de chamadas legível.
  • Reconhecer esse formato como a base do projeto final do curso.

Do bloco único às peças com nome

Até o módulo passado, os seus programas eram um bloco único: 30 ou 40 linhas corridas, de cima a baixo. Nesse tamanho, ainda dá para segurar tudo na cabeça. Mas o gerenciador de tarefas do módulo 16 passa das 80 linhas, e programas reais passam de milhares. Ninguém lê um texto sem parágrafos, e ninguém mantém um programa sem divisões. A técnica para dividir tem nome, decomposição, e a ferramenta é a que você acabou de dominar: a função. A pergunta-guia é simples: quais tarefas este programa executa? Cada resposta vira uma função.

nome = input("Qual é o seu nome? ")
nota1 = float(input("Primeira nota: "))
nota2 = float(input("Segunda nota: "))
media = (nota1 + nota2) / 2
if media >= 7:
    situacao = "Aprovado"
else:
    situacao = "Em recuperação"
print(f"{nome}: média {media:.1f} - {situacao}")

O bloco único: funciona, mas as tarefas ficam coladas umas nas outras, sem fronteira.

Esse programa tem três tarefas escondidas nele: pedir os dados, calcular a média e decidir a situação. No bloco único, elas se misturam, e mudar uma exige cuidado para não pisar nas outras. A versão organizada dá um nome e uma casa para cada tarefa, e deixa a costura entre elas para o final do arquivo.

A versão organizada, lado a lado

def pedir_nota(rotulo):
    return float(input(f"{rotulo}: "))

def calcular_media(nota1, nota2):
    return (nota1 + nota2) / 2

def definir_situacao(media):
    if media >= 7:
        return "Aprovado"
    return "Em recuperação"

# Programa principal
nome = input("Qual é o seu nome? ")
nota1 = pedir_nota("Primeira nota")
nota2 = pedir_nota("Segunda nota")
media = calcular_media(nota1, nota2)
situacao = definir_situacao(media)
print(f"{nome}: média {media:.1f} - {situacao}")

Mesmo comportamento, outra arquitetura: peças nomeadas em cima, roteiro embaixo.

Leia só o programa principal, da linha do comentário para baixo, e repare no efeito: ele virou um roteiro. Pede o nome, pede duas notas, calcula a média, define a situação, mostra o resultado. Dá para entender o programa inteiro sem abrir nenhuma função, do mesmo jeito que dá para entender um sumário sem ler os capítulos. E cada função segue as regras das aulas anteriores: calcular_media e definir_situacao são cálculo puro com return, sem print; a exibição ficou no principal, no final. A regra da aula 5 aplicada na prática.

Tem um bônus escondido na função pedir_nota: ela eliminou uma repetição. No bloco único, a linha do float com input aparecia duas vezes; agora existe uma vez, com o rótulo como parâmetro. Se amanhã você quiser validar a nota digitada, blindagem que o módulo 14 ensina, mexe num lugar só. Decomposição e reaproveitamento andam juntos: quando as tarefas ganham casa própria, as duplicatas ficam visíveis e caem.

CritérioBloco únicoCom funções
LeituraPrecisa ler tudo para entenderO programa principal resume a história
CorreçãoMudança em um ponto pode afetar o restoCada função é consertada isolada
ReaproveitamentoCopiar e colar trechosChamar a mesma função de novo
TesteSó rodando o programa inteiroDá para testar cada função sozinha
CrescimentoVira um novelo com o tempoNovas tarefas viram novas funções

O mesmo programa, duas arquiteturas. A diferença aparece quando o código cresce.

As regras de ouro e o caminho para o projeto final

Três regras resumem a aula. Primeira: uma função, uma tarefa. Se você precisa da palavra e para descrever o que a função faz, tipo calcula a média E imprime o relatório, são duas funções disfarçadas de uma. Segunda: o nome carrega a explicação. Um bom nome, como definir_situacao, dispensa comentário; um nome vago, como processar, obriga o leitor a abrir o corpo. Terceira: o programa principal coordena, as funções executam. O principal não faz conta nem toma decisão de negócio; ele chama, conecta e exibe.

  1. Liste as tarefas do programa em português, uma frase por tarefa.
  2. Transforme cada tarefa em uma função com nome de verbo: pedir_nota, calcular_media.
  3. Escreva as funções no topo do arquivo, com return nas que produzem valor.
  4. Monte o programa principal no final, conectando as chamadas na ordem.
  5. Releia só o principal: se ele conta a história sozinho, a organização está boa.

Guarde esse ritual de cinco passos: ele é literalmente o roteiro do projeto final. O gerenciador de tarefas do módulo 16 nasce como uma lista de tarefas em português (adicionar, listar, concluir, remover, salvar) e cada item vira uma função. Antes disso, a próxima aula é o seu ensaio geral: um programa de notas escolares com três funções e um principal, construído do zero, peça por peça.

Teste rápido

Num programa bem organizado com funções, qual é o papel do programa principal?

Perguntas frequentes

Qual é o tamanho ideal de uma função?
Não existe número mágico, mas a referência prática é: a função inteira visível na tela sem rolar, algo entre 5 e 20 linhas. Mais importante que contar linhas é o teste da tarefa única: se a descrição da função precisa de um e, divida em duas.
Devo transformar TODO o código em funções?
Não. O programa principal existe justamente para ser a parte solta do arquivo, a sequência que coordena. Além disso, um script de cinco linhas não precisa de decomposição nenhuma. Funções entram quando há repetição ou quando o programa cresce a ponto de pedir capítulos.
Onde coloco as funções no arquivo: em cima ou embaixo?
Em cima, agrupadas, com o programa principal no final. Isso garante a regra da aula 2, definir antes de chamar, e cria um padrão visual: quem abre o arquivo acha as peças primeiro e o roteiro por último. É a convenção que praticamente todo código Python segue.
Em código profissional existe algo além disso, tipo uma função main?
Existe: muitos projetos embrulham o programa principal numa função chamada main e a chamam protegida por um if especial (if __name__ == '__main__':), que controla o comportamento quando o arquivo é importado por outro. É refinamento de etapa futura da trilha; o formato desta aula é a base dele e basta para o curso inteiro.
Como escolho entre uma função grande ou várias pequenas?
Prefira as pequenas, com uma ressalva: pequenas e com nome claro. Dez funções chamadas etapa1 a etapa10 são piores que três chamadas pedir_dados, calcular e exibir. A decomposição boa segue as tarefas naturais do problema, não uma meta de quantidade.
Funções me ajudam a achar erros mais rápido?
Ajudam de duas formas. Primeiro, o erro aponta a linha, e a linha mora numa função com nome, o que já diz em qual tarefa o problema está. Segundo, dá para testar cada função isolada no Playground, com valores inventados, até achar a que se comporta mal. Caçar defeito num bloco único de 100 linhas é bem menos divertido.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.