Criada: 2017-12-01
Modificada: 2017-12-02 (Questões 1 e 2 - Critérios)
Modificada: 2017-12-03 (Questões 3 e 4 - Critérios)
Enunciado distribuído na sala.
### q.1
def linhas(filename):
try:
f = open(filename)
except IOError:
return 'falha ao abrir'
else:
l = 0
try:
for linha in f:
l += 1
except IOError:
return 'falha ao ler'
finally:
f.close()
return l
### q.2
def split(d, p):
d1 = {}
d2 = d
for i in p:
if i in d:
d1[i] = d[i]
del d[i]
return d1, d2
### q.3 e q.4: classe Polinomio
class Polinomio:
coefs = []
def __init__(self, lista):
self.coefs = lista
def grau(self):
g = len(self.coefs) - 1
while g >= 0 and self.coefs[g] == 0:
del self.coefs[g]
g -= 1
return g
def escalar(self, a):
for i, v in enumerate(self.coefs):
self.coefs[i] = a*v
### q.3
## Função auxiliar: soma deslocada com escalar
def somadescal(p, q, k, a):
lp = p.grau() + 1
lq = q.grau() + 1
for i in range(lq):
if i + k < lp:
p.coefs[i + k] += a * q.coefs[i]
else:
p.coefs.append(a * q.coefs[i])
## Função pedida
def soma(self, q):
self.somadescal(q, 0, 1)
### q.4
## Usa função auxiliar da q.3
def produto(self, q):
paux = self.coefs
self.coefs = []
for i, v in enumerate(paux):
self.somadescal(q, i, v)
Em todas as questões, o critério de correção começou por decidir como seria a pontuação: de cima para baixo ou de baixo para cima. Se a resposta estava bem escrita, com sintaxe Lisp correta, resolução do problema pedido (e não de outro) e com comprimento proporcional à complexidade da questão, então a correção procedeu de cima para baixo, ou seja, parte-se do valor integral e vão sendo subtraidas frações de pontos para cada defeito encontrado.
Por outro lado, se a resposta estava mal escrita, com sintaxe errada, resolvendo o problema errado ou incompleta, então a correção procedeu de baixo para cima: parte-se de zero e vão sendo adicionadas frações de pontos a cada indício de conhecimento importante encontrado.
A seguir, critérios específicos para cada questão. Os valores negativos se aplicam à correção de cima para baixo, e os valores positivos ou nulos se aplicam à correção de baixo para cima.
I/O fora de try -0,5
tratamento antes da exceção -0,5
não fechou, ou fechou após return -0,5
usou print em lugar de return -0,5
não retorna o número de linhas -0,5
catch em lugar de except -0,5
função não existente (para cada função) -0,5
Nil em vez de None -0,5
esqueceu def -0,5
except após else em try -0,5
leu tudo de uma vez -0,2
nomes das exceções -0,0
estratégia falha -0,5
função, método ou operação não definida -0,5
uso de {:} -0,5
falta de parênteses -0,5
falta de .items() -0,5
falta de for em list compehension -0,5
erro em inicialização -0,5
usoerrôneo de key -0,5
uso de append com dicionário -0,5
faltou return -0,5
tentativa de acesso com chave inexistente -0,5
keys(d) em vez de d.keys() -0,5
ineficiência -0,2
item em vez de items -0,1
acesso a posição não existente -1,0
não copia possível rabeira de q -1,0
não modifica self -0,5
não usou self -0,5
loop infinito -0,5
erro em assinatura de método -0,5
erro em chamada de método -0,5
confusão entre > e &lq; -0,5
confusão entre índice e valor -0,5
confusão entre grau e tamanho do vetor de coeficientes -0,5
confusão entre objeto e componente: até -0,5
soma coeficientes de self consigo mesmo -0,5
esqueceu colchetes -0,5
esqueceu .coefs -0,2
append em lugar de extend -0,2
extends em lugar de extend -0,1
acesso a posição inexistente -1,0
ignora coeficientes negativos -1,0
substitui em vez de somar parciais -0,5
erro em grau do produto -0,5
criação de Polinomio sem passar lista -0,5
repeat em vez de [0]*i -0,5
confusão entre + e * -0,5
compartilha objecto onde deveria copiar -0,5
falta ou sobra de 1 unidade -0,5
esqueceu de zerar self.coefs -0,5
confusão entre , e ; -0,5
erro em teste de índice, ou em índice -0,5
m-- em vez de m -= 1 -0,5
faltaram colchetes -0,5
não deslocou -0,5
não modifica self -0,5
ignorou elementos de índice zero -0,5
faltou self. -0,5
usou append em lugar de extend -0,2
faltou .coefs -0,2
sabe que tem que escalar e deslocar +0,5
só sabe grau, aproximado +0,1
© 2017 João Meidanis