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