Módulo 13 - Funções
Prática: funções de notas, média e aprovação
11 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Construir somar(a, b) e testá-la antes de seguir.
- Criar calcular_media(notas) recebendo uma lista, com sum e len.
- Escrever verificar_aprovacao(media) com múltiplos returns.
- Montar o programa principal que conecta as três funções.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Prática: funções de notas, média e aprovação.
Os objetivos desta aula. Construir somar(a, b) e testá-la antes de seguir. Criar calcular_media(notas) recebendo uma lista, com sum e len. Escrever verificar_aprovacao(media) com múltiplos returns. Montar o programa principal que conecta as três funções.
Veja o essencial, parte por parte.
A missão e a primeira peça: somar. Missão: três funções (somar, calcular_media, verificar_aprovacao) + um programa principal que usa as três.
As peças centrais: calcular_media e verificar_aprovacao. A segunda função é a estrela da prática: calcular_media recebe uma lista de notas, do jeito que você aprendeu no módulo 10, e devolve a média.
O programa completo e os desafios extras. Crie maior_nota(notas) devolvendo a maior nota da lista (a função embutida max resolve em uma linha).
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
A missão e a primeira peça: somar
Hora de juntar as seis aulas do módulo num programa de verdade. A missão: um avaliador de notas escolares com três funções, cada uma com sua tarefa, e um programa principal que as conecta. Você vai construir no método profissional: uma peça por vez, testando cada uma antes de encaixar a próxima. Abra o Playground e digite junto; ler prática sem digitar é assistir academia pela janela.
def somar(a, b):
return a + b
print(somar(2, 3))
print(somar(10, -4))
print(somar(0.5, 0.5))
# 5
# 6
# 1.0A primeira peça, com três testes de mesa: valores fáceis de conferir de cabeça.
A somar é de propósito a função mais simples possível: dois parâmetros, um return, nada de print. Ela existe nesta prática como aquecimento e como demonstração do teste de mesa: chamamos com valores cujo resultado sabemos de antemão e conferimos a saída. Bateu? Peça aprovada, siga em frente. Não bateu? O defeito está nesta função, e em nenhum outro lugar, porque ainda não existe outro lugar. Esse isolamento é o superpoder de construir por partes.
As peças centrais: calcular_media e verificar_aprovacao
A segunda função é a estrela da prática: calcular_media recebe uma lista de notas, do jeito que você aprendeu no módulo 10, e devolve a média. Repare que o parâmetro aceita a lista inteira como um valor só. Dentro do corpo, duas funções embutidas fazem o trabalho pesado: sum soma todos os itens e len conta quantos são. A média é a divisão de uma pela outra, e funciona para qualquer quantidade de notas, duas ou vinte, sem mudar uma linha.
def calcular_media(notas):
return sum(notas) / len(notas)
print(calcular_media([10, 8]))
print(calcular_media([7, 7, 7]))
print(calcular_media([10, 5, 8, 9]))
# 9.0
# 7.0
# 8.0Uma linha de corpo, graças a sum e len. Os testes cobrem 2, 3 e 4 notas.
A terceira função decide a situação do aluno, e é o retrato da aula 4: múltiplos returns, um por caso. A regra de negócio é a das escolas brasileiras: média 7 ou mais aprova, de 5 a menos de 7 vai para recuperação, abaixo de 5 reprova. A ordem das condições importa: testamos do maior corte para o menor, e cada return que dispara encerra a função, então quem chega ao segundo if já tem média menor que 7, sem precisar dizer isso de novo.
def verificar_aprovacao(media):
if media >= 7:
return "Aprovado"
if media >= 5:
return "Recuperação"
return "Reprovado"
print(verificar_aprovacao(8.5))
print(verificar_aprovacao(6.0))
print(verificar_aprovacao(4.9))
print(verificar_aprovacao(7.0))
# Aprovado
# Recuperação
# Reprovado
# AprovadoTrês saídas, três returns. O teste com 7.0 confere a fronteira exata do >=.
Repare no quarto teste, com a média exatamente 7.0: testar as fronteiras é hábito de programador experiente, porque é nelas que os erros de >= trocado por > se escondem. E note o que as três funções têm em comum: nenhuma usa print, nenhuma usa input. São cálculo puro com return, prontas para qualquer programa que precise delas. A conversa com o usuário é trabalho da próxima seção.
O programa completo e os desafios extras
Agora a montagem final: as três funções no topo e o programa principal embaixo, conectando tudo. O principal pede o nome do aluno, monta a lista de notas, calcula a média com uma função, decide a situação com a outra e mostra o boletim com print, formatando a média com uma casa decimal via f-string do módulo 12. Este é o código completo da prática, do primeiro def ao último print.
def somar(a, b):
return a + b
def calcular_media(notas):
return sum(notas) / len(notas)
def verificar_aprovacao(media):
if media >= 7:
return "Aprovado"
if media >= 5:
return "Recuperação"
return "Reprovado"
# Programa principal
nome = input("Nome do aluno: ")
nota1 = float(input("Primeira nota: "))
nota2 = float(input("Segunda nota: "))
notas = [nota1, nota2]
media = calcular_media(notas)
situacao = verificar_aprovacao(media)
pontos = somar(nota1, nota2)
print(f"\n===== BOLETIM =====")
print(f"Aluno: {nome}")
print(f"Total de pontos: {pontos}")
print(f"Média: {media:.1f}")
print(f"Situação: {situacao}")O programa completo. Rode com notas 8.5 e 7.0 e confira: média 7.8, situação Aprovado.
Execute algumas vezes variando as notas: um caso de aprovação, um de recuperação, um de reprovação. Depois releia o programa principal e perceba o que este módulo construiu: seis linhas de coordenação contam a história inteira, e cada regra mora numa função com nome. Se a escola mudar o corte de aprovação para 6, você altera um número dentro de verificar_aprovacao e pronto. Era exatamente essa a promessa da aula 1.
Se você completar ao menos os dois primeiros desafios, está pronto para a mini-prova do módulo. E leve daqui a sensação mais importante da prática: programa grande é só um monte de funções pequenas bem nomeadas. O módulo 14 blinda esse programa contra usuário que digita texto onde era número, e o projeto final monta o gerenciador de tarefas com esta mesma arquitetura.
Teste rápido
Por que calcular_media(notas) funciona para 2, 3 ou 10 notas sem mudar nenhuma linha?
Perguntas frequentes
- Meu programa deu ZeroDivisionError na média. O que aconteceu?
- A lista de notas chegou vazia em calcular_media: sum devolve 0, len devolve 0, e dividir por zero interrompe o programa. Nesta prática isso não ocorre, porque o principal sempre monta a lista com duas notas, mas no desafio do while vale conferir se a lista tem itens antes de calcular. O módulo 14 mostra o tratamento elegante para esses casos.
- Por que a média 7.8 aparece como 7.8 e não 7.75?
- Por causa do :.1f dentro da f-string, que formata o número com uma casa decimal e arredonda: 7.75 vira 7.8 na exibição. O valor guardado na variável continua 7.75; só a apresentação muda. Troque para :.2f e veja as duas casas aparecerem.
- Posso testar verificar_aprovacao sem digitar notas toda vez?
- Pode e deve: chame a função direto com valores fixos, como verificar_aprovacao(6.0), sem passar pelo input. É a vantagem de separar cálculo de conversa com o usuário: cada função de cálculo se testa sozinha, em segundos, no Playground.
- E se o usuário digitar um texto em vez de nota?
- O float não consegue converter e o programa para com ValueError, o velho conhecido do módulo 5. Nesta prática deixamos assim de propósito: o módulo 14 é inteiro sobre blindar programas com try e except, e este avaliador de notas volta lá como paciente.
- Por que a ordem dos ifs em verificar_aprovacao importa?
- Porque os returns cortam a execução em cascata: testamos do corte mais alto para o mais baixo. Se o primeiro teste fosse media >= 5, uma média 9 dispararia Recuperação, porque 9 também é maior que 5, e o teste do 7 nunca seria alcançado. Do maior para o menor, cada faixa pega só o que é dela.
- Nota com vírgula, tipo 7,5, funciona no input?
- Não: o float do Python espera ponto, padrão internacional, então 7,5 gera ValueError. Digite 7.5. Dá para aceitar vírgula trocando-a por ponto antes de converter, com o replace do módulo 12: float(texto.replace(',', '.')). Fica como desafio bônus.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.