sexta-feira, 19 de dezembro de 2014

Teste #3 - TP 1

P1

Explicar com rigor o que se passou na listagem abaixo.
>>> lista = [[]] * 3
>>> lista
[[], [], []]
>>> lista[1].append('ai')
>>> lista
[['ai'], ['ai'], [‘ai']]
A primeira instrução vai criar uma lista com três elementos, todos eles uma lista vazia, que de é visualizada(linha 2). Aplicamos depois o método append para acrescentar à lista vazia na segunda posição a cadeia de caracteres 'ai'. O método append altera a lista na segunda posição sem alterar a sua localização. Como os três elementos iniciais partilham a mesma memória, isto é, todos apontam para o mesmo objecto (a lista vazia), alterar um deles significa alterar todos. Estamos perante uma das consequências das listas serem objectos mutáveis e haver partilha de memória.

P2

Um ficheiro com a seguinte informação por linha: ano e cotação. Qual a cotação máxima e o respectivo ano?
def cota_maxima(ficheiro):
    with open(ficheiro) as f_ent:
        maximo = 0
        ano = 0
        for linha in f_ent:
            dados = linha[:-1].split()
            ano_cur = int(dados[0])
            valor_cota = float(dados[1])
            if valor_cota > maximo:
                maximo = valor_cota
                ano = ano_cur
        return ano, maximo
Erro mais frequente: ler todas as linhas com o readlines e depois aplicar o método split. Só que o readlines devolve uma lista e o split não se aplica a listas.

P3

A classificação do campeonato está guardada num dicionário (chave = nome clube, valor = pontos). Conhecidos os resultados de uma jornada, actualizar a classificação. Os resultados da jornada é representado por uma lista de jogos e cada jogo é uma lista em que o primeiro elemento é o nome do clube 1, o segundo os golos marcado, o terceiro o nome do clube 2 e o quarto os golos marcados.

def actualiza_tabela(tabela, resultados):
    for resultado in resultados:
        if resultado[1] > resultado[3]:
            tabela[resultado[0]] += 3
        elif resultado[1] == resultado[3]:
            tabela[resultado[0]] += 1
            tabela[resultado[2]] += 1
        else:
            tabela[resultado[2]] += 3
    return tabela
Erro comum: usar dois ciclos em que o primeiro percorre o dicionário e o segundo repete quatro vezes a alteração de um jogo…

Sem comentários:

Enviar um comentário