S03 – Atividade de Aprendizagem (2 de 2): Depurando Funções
O que você deveria fazer quando seu programa não está funcionando? Se o seu programa for pequeno, você pode examinar cada linha do programa. Entretanto, se o seu programa for grande ou contiver várias funções, há maneiras melhores de descobrir e corrigir os problemas, inclusive escrever e executar funções de teste, exibir valores e usar um depurador.
Conceitos
Aqui estão os conceitos e assuntos de programação em Python que você deve aprender durante esta aula.
Tipos de Erros
Em geral, há dois tipos de erros que um programador pode cometer: erros de sintaxe e erros de lógica. Ao cometer um erro de sintaxe, o programador escreve um código que viola as regras da linguagem, como esquecer um parêntese, os dois pontos no final de uma instrução if ou escrever incorretamente uma palavra-chave. Esse tipo de erro impede o programa de rodar e gera mensagens de erro. Já os erros de lógica não interrompem a execução, mas fazem o programa produzir resultados errados, sem exibir mensagens de erro.
Mensagens de Erro
Independentemente do tipo de erro (sintaxe ou lógica), se o computador exibir uma mensagem de erro durante a execução de um programa, a primeira coisa que um programador deve fazer é ler e entender a mensagem de erro. O Exemplo 1 mostra um programa Python simples que contém um erro de sintaxe. A mensagem que o computador exibiu devido ao erro de sintaxe é mostrada abaixo, no exemplo 1.
# Exemplo 1
def main():
print("Você está surpreso, Renato?)
# Inicia este programa
# chamando a função main.
if __name__ == "__main__":
main()
> python surpresa.py
File "C:\Users\cse111\surpresa.py", line 3
print("Você está surpreso, Renato?)
^
SyntaxError: unterminated string literal (detected at line 3)
A mensagem de erro informa que o exemplo 1 contém um erro de sintaxe e que ele está na linha 3 do programa, onde há algo errado com a string. Ao examinar essa linha, percebemos que o programador esqueceu de digitar as aspas duplas de fechamento no final da string.
Se o computador exibir uma mensagem de erro que você não entende, você pode pesquisar o significado na internet. Basta copiar e colar a mensagem de erro na barra de pesquisa do seu navegador. Você pode encontrar informações sobre outros erros nesse endereço.
Instruções Print
Se o programa não mostrar mensagens de erro, mas produzir resultados incorretos, adicione instruções print em pontos estratégicos para verificar os valores das variáveis e localizar o problema. O Exemplo 2 mostra um cálculo de saldo de empréstimo com instruções print usadas para depuração no início das funções e durante os cálculos.
# Exemplo 2
def main():
print("Este programa calcula e exibe o saldo restante")
print("de um empréstimo com uma porcentagem anual fixa")
print("e um número fixo de parcelas por ano.")
print()
print("Por favor, insira os cinco valores a seguir.")
principal = float(input("Valor principal do empréstimo: "))
taxa_anual = float(input("Taxa de juros anual (%): "))
anos = int(input("Número de anos de duração do empréstimo: "))
pagamentos_por_ano = int(input("Número de pagamentos por ano: "))
parcelas_pagas = int(input("Número de parcelas pagas: "))
saldo = calcular_saldo(principal, taxa_anual, anos,
pagamentos_por_ano, parcelas_pagas)
print()
print(f"Saldo restante: {saldo}")
def calcular_saldo(princ, ta, anos, ppa, pp):
"""Calcula e retorna o saldo restante de um empréstimo."""
pagamento = calcular_pagamento(princ, ta, anos, ppa)
# Exibe os valores de variáveis para depuração
print()
print(f"calcular_saldo({princ}, {ta}, {anos}, {ppa}, {pp})")
taxa = ta / ppa
potencia = (1 + taxa) ** pp
# Exibe os valores de variáveis para depuração
print(f" pagamento: {pagamento} taxa: {taxa} potência: {potencia}")
saldo = princ * potencia - pagamento * (potencia - 1) / taxa
# Exibe os valores de variáveis para depuração
print(f" saldo: {saldo:.2f}")
return round(saldo, 2)
def calcular_pagamento(princ, ta, anos, ppa):
"""Calcula e retorna o pagamento por período de um empréstimo."""
# Exibe os valores de variáveis para depuração
print()
print(f"calcular_pagamento({princ}, {ta}, {anos}, {ppa})")
taxa = ta / ppa
n = anos * ppa
# Exibe os valores de variáveis para depuração
print(f" taxa: {taxa} n: {n}")
pagamento = princ * taxa / (1 - (1 + taxa) ** -n)
# Exibe os valores de variáveis para depuração
print(f" pagamento: {pagamento:.2f}")
return round(pagamento, 2)
# Inicia este programa
# chamando a função main.
if __name__ == "__main__":
main()
> python balance.py
Este programa calcula e exibe o saldo restante
de um empréstimo com uma porcentagem anual fixa
e um número fixo de parcelas por ano.
Por favor, insira os cinco valores a seguir.
Valor principal do empréstimo: 80000
Taxa de juros anual (%): 0.06
Número de anos de duração do empréstimo: 15
Número de pagamentos por ano: 12
Número de parcelas pagas: 45
calcular_pagamento(80000.0, 0.06, 15, 12)
taxa: 0.005 n: 180
pagamento: 675.09
calcular_saldo(80000.0, 0.06, 15, 12, 45)
pagamento: 675.09 taxa: 0.005: potência: 1.2516208207696773
saldo: 66156.33
Saldo restante: 66156.33
As instruções print são fáceis de usar e costumam ajudar, mas nem sempre são o método mais eficaz para localizar erros de lógica.
Funções de Teste
Muitos programadores não percebem o quanto funções de teste podem ajudar a encontrar erros de lógica. Com frequência, escrevem o programa completo e só depois tentam testá-lo seguindo etapas como as mostradas abaixo.
-
Executam o programa e digitam a entrada como um usuário faria.
-
Examinam a saída do programa e descobrem que ela está incorreta.
-
Analisam todo o código do programa, fazem algumas pequenas alterações e adicionam instruções
print. -
Repetem os passos 1 a 3 várias vezes, despendendo bastante tempo tentando encontrar e corrigir os erros.
Esse método de correção é demorado, pois o programador tenta testar o programa inteiro de uma só vez. O ideal é testar cada função separadamente, escrevendo e executando funções de teste, como explicado na aula anterior.
Usando um Depurador
Um depurador é uma ferramenta de desenvolvimento que permite ao programador acompanhar a execução do programa passo a passo e observar os valores das variáveis. É um recurso muito eficaz para encontrar erros, e quase todas as linguagens e ambientes de programação incluem um. Desenvolvedores profissionais usam depuradores com frequência, e a maioria das empresas exige que a linguagem de programação possua essa ferramenta.
O Python inclui um depurador que pode ser usado diretamente no VS Code. É muito mais fácil aprender vendo alguém utilizá-lo do que apenas lendo sobre o assunto. Assista ao vídeo a seguir, que mostra um professor da BYU-Idaho usando o depurador no VS Code para encontrar erros em um programa.
Assista ao vídeo da Atividade de Aprendizagem: Depurando Funções para aprender a usar o depurador Python no VS Code.
O depurador também é uma ótima ferramenta de aprendizado. Ao percorrer o programa passo a passo e observar os valores das variáveis após cada instrução, você vê exatamente como o Python funciona. Experimente: se ainda não domina if-elif-else, laços while e for, a passagem de parâmetros ou o retorno de um valor de uma função, coloque um ou mais pontos de interrupção em um programa que contenha esses elementos, execute-o no depurador e avance linha a linha, prevendo como a próxima instrução mudará as variáveis.
Resumo
Nesta aula, você aprendeu a diferença entre erros de sintaxe e de lógica. Os erros de sintaxe violam as regras da linguagem e impedem o programa de rodar; já os erros de lógica permitem a execução, mas geram resultados incorretos. Para encontrá-los e corrigi-los, você pode usar funções de teste, instruções print e o depurador.
Atividade
Finalidade
Pratique o uso do depurador Python no VS Code.
Tarefa
Faça o seguinte:
-
Baixe e salve o arquivo
exemplo-2.py. -
Abra o
exemplo-2.pyno VS Code. -
Assista ao vídeo da Atividade de Aprendizagem: Depurando Funções para aprender a usar o depurador Python no VS Code.
Ponderar
Ao usar o depurador para percorrer o programa exemplo-2.py, você aprendeu algo novo sobre o Python e como as funções funcionam? Você acha que o depurador pode ajudar a encontrar erros no seu código?
Envio
Quando terminar, retorne ao Canvas e reporte seu progresso no Questionário S03: Testando e Corrigindo Funções.
Links Úteis:
- Voltar para: Visão Geral da Semana | Página Inicial