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, maximoErro 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 tabelaErro 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