Ficha 02 · Codificação, debug e testes
Exercício 1 · Sintaxe vs semântica
Explica a diferença entre erro de sintaxe e erro de semântica/lógica, com um exemplo de cada em Python.
Resposta:
- Sintaxe — quebra as regras de escrita; o programa não corre.
python if x > 0 # falta os dois pontos → SyntaxError print(x) - Lógica/semântica — corre, mas faz o errado.
python media = (a + b) / 3 # deveria ser / 2 → resultado errado
Exercício 2 · Codificar a partir do pseudocódigo
Traduz para Python: ler um número e escrever "Par" ou "Ímpar".
Resposta:
n = int(input("Número: "))
if n % 2 == 0:
print("Par")
else:
print("Ímpar")
Exercício 3 · Função
Escreve uma função maior(lista) que devolve o maior elemento de uma lista de números.
Resposta:
def maior(lista):
m = lista[0]
for n in lista:
if n > m:
m = n
return m
print(maior([4, 9, 2, 15, 7])) # 15
(Em Python, max(lista) faz o mesmo — mas o objetivo é praticar a lógica.)
Exercício 4 · Encontrar o erro
Este código deve dar a média, mas falha. Identifica o erro e corrige:
def media(notas):
return sum(notas) / 2
Resposta:
Erro de lógica: divide por 2 fixo em vez do número de notas. Correção:
def media(notas):
return sum(notas) / len(notas)
Exercício 5 · Casos de teste
Para a função media(notas), indica quatro casos de teste (com o resultado esperado), incluindo casos-limite.
Resposta:
- Normal:
media([10, 20])→15. - Um elemento:
media([8])→8. - Valores nos limites:
media([0, 20])→10. - Lista vazia:
media([])→ deve tratar o erro (não rebentar com ZeroDivisionError).
assert media([10, 20]) == 15
assert media([8]) == 8
Exercício 6 · Debug
Ao correr o programa aparece ZeroDivisionError. Que tipo de erro é e como o encontras e resolves?
Resposta:
É um erro de execução (runtime) — divisão por zero. Encontra-se lendo a mensagem (indica a linha) e inspecionando o divisor (ex.: len(notas) = 0 com lista vazia). Resolve-se validando antes:
def media(notas):
if not notas:
return 0 # ou lançar um aviso
return sum(notas) / len(notas)
Exercício 7 · Git
Indica os comandos Git para: iniciar o repositório, guardar todas as alterações e criar um commit com mensagem. Porque é útil o controlo de versões?
Resposta:
git init
git add .
git commit -m "versão inicial"
É útil porque guarda o histórico (podes voltar a qualquer versão), permite trabalhar em equipa sem sobrepor código, e serve de backup do projeto.
Exercício 8 · Documentação
Que deve ter, no mínimo, o README de um pequeno programa? Dá 3 pontos.
Resposta:
- O que é / faz o programa.
- Como instalar/correr (requisitos, comando).
- Como usar (exemplo de utilização).
(Bónus: autor, licença, e limitações conhecidas.)