Introdução à Programação / Programação I

Documentos relacionados
Introdução à Programação Aula 17 Deteção e correção de erros

Programação I Aula 17 Correção de programas Pedro Vasconcelos DCC/FCUP

1 Detecção e correcção de erros Erros sintáticos Erros de execução Erros semânticos Erros semânticos...

Computação 2. Aula 11 Teórica professor: Leonardo Carvalho

Listas, conjuntos e dicionários

1/ 26. Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função

1 Definição de funções 1. 2 Valores boleanos e condicionais 5. Podemos depois usar as novas funções tal qual as pré-definidas

Computação I - Python Aula 1 - Prática: Primeiros Passos- Função

1/ 23. Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função

Introdução à Programação / Programação I

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores

Python: Exceções, Iteradores e Geradores. Claudio Esperança

Nesta aula... Diagramas da stack. Recursão. 1 Funções. 2 Valores booleanos e condicionais. 3 Execução condicional e recursão

Python 3.x Estrutura de Repetição for Estrutura de Decisão if then else

Algoritmos e estrutura de dados

Introdução à Programação Aula 13 Manipulação de ficheiros

Os elementos da programação

Programação I Aula 10 Processamento de listas

Programação I Aula 8 Cadeias de carateres

Programação de Computadores

Programação I Aula 13 Manipulação de ficheiros

Informática Aplicada à Engenharia Florestal

Computação I - Python Aula 1 - Teórica: Manipulação de Strings, Tuplas e Listas

Laboratório de Programação 1 Aula 04

Nesta aula... Iteração indefinida. 1 Decisões em Python. 2 Funções lógicas. 3 Recursão. 4 Iteração. 5 Ciclo for ou while?

Entrada e saída. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá

Computação 1 - Python Aula 4 - Teórica Variáveis e Atribuição, Strings. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 30

Programação I Aula 10 Processamento de listas

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

Introdução à Programação / Programação I

Fundamentos de Lógica e Algoritmos. Aula 3.2 IDLE, Variáveis e Tipos. Prof. Dr. Bruno Moreno

Computação I - Python Aula 4 - Teórica: Variáveis e Atribuição, Strings

Introdução à Programação / Programação I

Introdução à Programação

Computação I - Python

Fundamentos de Programação em Python

Programação I Aula 3 Primeiros programas

Computação 1 - Python Aula 2 - Teórica. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 39

PROGRAMAÇÃO E PYTHON. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

Python 3.x Estrutura de Repetição while

Introdução à Programação Aula 3 Primeiros programas

Introdução à Programação em C

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Processamento da Informação

MCG114 Programação de Computadores I. Strings. Strings. Strings. Strings. Strings 3/26/18. Profa. Janaína Gomide

Fundamentos da Programação

FUNDAMENTOS DA PROGRAMAÇÃO 1º Teste, 19 de abril de 2013, 1h30m

Computação 1 - Python 1/ 41

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

Curso básico de Python para estudantes de Física

Aula de hoje. Expressões. Expressões. Expressões. Exemplos. Programa em Python. SCC Introdução à Programação para Engenharias

AMBIENTE DE PROGRAMAÇÃO PYTHON II

Introdução à Programação Aula 10 Processamento de listas

Fundamentos da Programação

Programação de Computadores

Computação 1. Aula 11 Teórica professor: Leonardo Carvalho

Sequências - Tuplas. Sequências - Tuplas

Computação 2. Aula 8 Teórica professor: Leonardo Carvalho

Introdução à Programação / Programação I

Computação 1 - Python Aula 8 - Teórica: Estrutura de Repetição : for 1/ 10

Nesta aula... Parâmetros opcionais Atribuição abreviada Instruções break e continue Interrupção da execução. 1 Estudo desta disciplina.

Computação 1 - Python Aula 6 - Teórica: Listas 1/ 28

ICE-B. 7 - Condições. Ludwig Krippahl

Introdução à Programação em C (I)

TCC 00308: Programação de Computadores I Organização de programas em Python

Listas e Tuplas. Vanessa Braganholo

Fundamentos da Programação

Introdução à Programação / Programação I

Processamento da Informação Teoria. Desvio Condicional

Processamento da Informação Teoria Funções

Processamento da Informação Teoria. Strings

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Projeto de funções e instruções condicionais

Programação I Aula 11 Mais sobre ciclos e iteração

Nas aulas anteriores Strings. Ciclos

Aula passada. Aula passada... Sequências Funções puras e modificadores. Listas Tuplos

Programação I Aula 4 Definição de procedimentos e funções

Vetores. Vanessa Braganholo

Introdução à Programação / Programação I

Computadores e Programação o semestre. Aula Helmut Wolters, Jorge Landeck, Miguel Oliveira

Processamento da Informação Teoria. Exercícios sobre strings

Minicurso de Linguagem de Programação Python.

Funções. Prof. Alberto Costa Neto Programação em Python

MC-102 Aula 02 Shell Interativa, Programa Básico, Variáveis, Atribuições, Tipos Simples. Instituto de Computação Unicamp

Python: Listas. Claudio Esperança

Python: Comandos Básicos. Claudio Esperança

Introdução à Programação / Programação I

Introdução à Programação Aula 4 Definição de funções

Fundamentos da Programação

SCC0124 Introdução à Programação para Engenharias

Introdução à Programação Aula 5 Ciclos e condicionais

Linguagem Python. Processamento Estatístico da Linguagem Natural. Barra invertida em strings. Strings. Aspas triplas. Operações com Strings

Organização de programas em Python. Vanessa Braganholo

MCG126 Programação de Computadores II

Programação de Computadores

Introdução à Ciência da Computação Disciplina:

Transcrição:

Introdução à Programação / Programação I Aula 14: Deteção e correção de erros Rita P. Ribeiro 2017/2018 Departamento de Ciência de Computadores

Nesta aula 1. Erros sintáticos 2. Erros de execução 3. Erros semânticos INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 1

Erros Diferentes tipos de erros: o programa é rejeitado pelo interpretador; o programa dá uma mensagem de erro durante a execução; não dá mensagens de erro, mas não faz o que eu quero São responsabilidade do programador: o computador tem sempre razão! Todos os programadores devem aprender a detetar e corrigir erros. É importante aprender a corrigir erros de forma construtiva. Não devem tentar modificações ao acaso! INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 2

Tipos de erros Sintático: o programa é rejeitado pelo interpretador Python Execução: a execução aborta com uma mensagem de erro (exceção) Semântico: o programa não dá o resultado que eu pretendia INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 3

Erros sintáticos

Erros sintáticos SyntaxError File "exemplo.py", line 15... SyntaxError: invalid syntax Indica a linha onde o erro é detetado Mas: a causa do erro pode estar nas linhas anteriores Alguns erros sintáticos comuns: esquecer de fechar parêntesis ou aspas usar uma palavra reservada como variável esquecer dois-pontos (:) no início de um bloco usar = em vez de == usar indentação inconsistente INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 4

Corrigir erros sintáticos Observar atentamente a linha onde o erro é detetado Procurar parêntesis ou aspas abertos nas linhas anterioes Verificar a estrutura dos blocos if-elif-else, while e for Nos editores IDLE ou Pyzo: cores diferentes indicam palavras chave, cadeias de caracteres, etc. INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 5

Erros de execução

Erros de execução Exceções: a execução aborta com uma mensagem de erro Ciclo infinito: a execução não termina! INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 6

Erros de execução mais comuns NameError import math def funcao(x): return math.sqrt(y) >>> funcao(4) Traceback (most recent call last): File "<console>", line 1, in <module> File "/exemplo.py", line 3, in funcao return math.sqrt(y) NameError: name y is not defined INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 7

Erros de execução mais comuns (cont.) TypeError import math def funcao(x): return math.sqrt(x) >>> funcao("ola") Traceback (most recent call last): File "<console>", line 1, in <module> File "/exemplo.py", line 3, in funcao return math.sqrt(x) TypeError: a float is required INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 8

Erros de execução mais comuns (cont.) ValueError import math def funcao(x): return math.sqrt(x) >>> funcao(-1) Traceback (most recent call last): File "<console>", line 1, in <module> File "/exemplo.py", line 3, in funcao return math.sqrt(x) ValueError: math domain error INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 9

Erros de execução mais comuns (cont.) IndexError import math def funcao(x): return x[0] + math.sqrt(x[1]) >>> funcao([10]]) Traceback (most recent call last): File "<console>", line 1, in <module> File "/exemplo.py", line 3, in funcao return x[0] + math.sqrt(x[1]) IndexError: list index out of range INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 10

Exemplo: verificar palíndromos def palindromo(str): "Verifica se uma cadeia é igual ao seu reverso." i = 0 j = len(str) while i<j: if str[i]!=str[j]: return False i = i+1 j = j-1 return True INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 11

Erros de execução >>> palindromo("olamundo") Traceback (most recent call last): File "<stdin>", line 1, in? File "/tmp/python-18422-ah.py", line 6, in palindromo IndexError: string index out of range IndexError uso de índice inválido (de lista ou cadeia) Traceback indica a instrução que causou a exceção INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 12

Corrigir erros de execução def palindromo(str):... print("i=", i, "j=", j, "len=", len(str)) if str[i]!=str[j]: # linha 6... 1. Identificar o ponto onde erro foi detetado INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 13

Corrigir erros de execução def palindromo(str):... print("i=", i, "j=", j, "len=", len(str)) if str[i]!=str[j]: # linha 6... 1. Identificar o ponto onde erro foi detetado 2. Acrescentar código para verificar valores de variáveis INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 13

Corrigir erros de execução (2) Executando novamente: >>> palindromo("olamundo") i= 0 j= 8 len= 8 Traceback (most recent call last):... IndexError: string index out of range Índices válidos: Temos: 0 i, j len 1 i = 0, j = 8, len = 8 Logo: o valor de j está errado! INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 14

Corrigir erros de execução (3) def palindromo(str): "Verifica se uma cadeia é igual ao seu reverso." i = 0 j = len(str) # erro: j>len(str)-1 while i<j: if str[i]!=str[j]: return False i = i+1 j = j-1 return True INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 15

Corrigir erros de execução (4) def palindromo(str): "Verifica se uma cadeia é igual ao seu reverso." i = 0 j = len(str)-1 # erro: j>len(str)-1 corrigido! while i<j: if str[i]!=str[j]: return False i = i+1 j = j-1 return True INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 16

Asserções assert condição, mensagem Declaração de uma condição que se deve verificar. Se a condição for verdadeira passa a asserção e não faz mais nada Se a condição for falsa aborta a execução com uma exceção AssertionError: mensagem INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 17

Acrescentar asserções def palindromo(str): "Verifica se uma cadeia é igual ao seu reverso." i = 0 j = len(str) # erro original while i<j: assert 0<=i<len(str), "limites do índice i" assert 0<=j<len(str), "limites do índice j" if str[i]!=str[j]: return False i = i+1 j = j-1 return True INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 18

Execução com asserções AssertionError >>> palindromo("olamundo") Traceback (most recent call last): File "<stdin>", line 1, in? File "/tmp/python-9298rhy.py", line 8, in palindromo AssertionError: limites do índice j INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 19

Quando a execução não termina RuntimeError Problemas de programação elementares são resolvidos rapidamente num computador atual Se o programa demora muito tempo, provavelmente tem um ciclo infinito Em Python: recursão não limitada termina com uma exceção RuntimeError: maximum recursion depth exceeded INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 20

Evitar ciclos infinitos i = 0 while i<len(xs): # corpo do ciclo # deve modificar i e/ou xs... # verifica os valores na condição print("i=", i, "len(xs)=", len(xs)) O ciclo só termina quando a condição for False INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 21

Evitar ciclos infinitos i = 0 while i<len(xs): # corpo do ciclo # deve modificar i e/ou xs... # verifica os valores na condição print("i=", i, "len(xs)=", len(xs)) O ciclo só termina quando a condição for False Acrescentamos código no fim do ciclo para verificar as actualizações das variáveis INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 21

Evitar ciclos infinitos (2) Verificar se as variáveis na condição while são alteradas no corpo do ciclo Pensar quais os intervalos desejados para índices Se possível: escrever um ciclo simples em vez de dois ciclos embricados Se possível: usar um ciclo for (termina sempre) INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 22

Erros semânticos

Erros semânticos O programa dá um resultado, mas não é correto O computador não advinha o que eu quero Logo: o programa que escrevi não resolve o problema pretendido O erro pode estar: na compreensão do problema no modelo mental de como construir a solução (algoritmo) na tradução do algoritmo para Python INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 23

Corrigir erros semânticos Verifique se compreendeu bem o problema Pensar antecipadamente em casos de teste simples: valores para os dados e para o resultado Dividir para conquistar: decomponha o problema em funções Cada função deve ter um objetivo bem definido Efetue testes das funções no interpretador de Python INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 24

Testes unitários Especificação do valor esperado de funções/métodos/etc. para valores concretos de argumentos Servem de documentação do programa Podem ser testados automaticamente Módulo doctest: testes incluídos na documentação das funções sintaxe pergunta/resposta semelhante ao interpretador de Python usado no sistema Codex de submissões automáticas INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 25

Exemplo: factorial def factorial(n): Calcula o factorial de n. Exemplos: >>> factorial(0) 1 >>> factorial(1) 1 >>> factorial(2) 2 >>> factorial(3) 6 p = 1 for i in range(1,n): p = p * i return p INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 26

Testar um módulo >>> import doctest >>> doctest.testmod() Não produz mensagens se os testes passam. INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 27

Quando um teste falha >>> import doctest >>> doctest.testmod() ******************************************************* File " main ", line 8, in main.factorial Failed example: factorial(2) Expected: 2 Got:. 1 1 items had failures: 2 of 4 in main.fatorial ***Test Failed*** 2 failures. INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 28

Alguns erros comuns Cuidado com as comparações com três operandos. # programa original if not (a==b==c):.. # errado! if a!=b!=c:. # correto if a!=b or b!=c:. É preferivel usar comparações simples: a==b and b==c em vez de a==b==c. INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 29

Alguns erros comuns Os limites dum ciclo for não devem ser re-calculados dentro do ciclo. for i in range(len(xs)): # remover valores pares if xs[i]%2==0: del xs[i] # erro INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 30

Alguns erros comuns A palavra reservada else também pode ser associada a um ciclo (não usamos nestas aulas). # while/else while...: if...:... else:... # if/else while...: if... :... else:... INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 31

Alguns erros comuns Duplicar o nome de uma lista em vez do seu conteúdo. >>> xs = [1,2,3,4,5] >>> ys = xs >>> del xs[0] >>> ys [2,3,4,5] >>> xs = [1,2,3,4,5] >>> ys = xs[:] >>> del xs[0] >>> ys [1,2,3,4,5] INTRODUÇÃO À PROGRAMAÇÃO / PROGRAMAÇÃO I - 2017/2018: AULA 14 32