sábado, 21 de dezembro de 2013

Teste #3 - TP9

Pergunta 1

Explique o que vai aparecer no lugar dos pontos de interrogação (linhas 7 e 11).
01.>>> def toto(n):
02.... res = n.append(4)
03.... return res
04....
05.>>> n = (5,6,7)
06.>>> print(toto(n))
07.Traceback (most recent call last): # Explicação: Erro porque append não é método de tuplos!
08....
09.builtins.AttributeError: 'tuple' object has no attribute 'append'
10.>>> n
11.(5, 6, 7) # Explicação: n é imutável não sendo afectado pela chamada de toto(n).
Pergunta 2

Admita que tem guardado no dicionário informação relativa ao desempenho das equipas envolvidas num campeonato desportivo. A cada jornada pares de equipas jogam entre si. O dicionário está organizado de modo que as chaves são os nomes dos clubes, e os valores uma lista com o número de vitórias, de empates e de derrotas, por esta ordem, obtidos nos diferentes jogos em que a equipa esteve envolvida. Escreva um programa que dado o dicionário com a informação referida me devolva uma lista das equipas que obtiveram o maior número de vitórias.

Solução

Existem várias alternativas. Aqui optou-se por ir buscar toda a informação ao dicionário e passá-la para uma lista. De seguida os pares (clube, vitórias) é inspeccionado na procura do(s) de maior vitórias. Dentro do ciclo for fazemos o teste. Se encontramos algum clube com um novo máximo recomeçamos o processo com uma lista com esse clube apenas. Cada vez que encontramos um clube com o um valor igual ao máximo, acrescentamos o clube à lista dos clubes com número máximo de vitórias.
01.def mais_vict(campeonato):
02.    res = list(campeonato.items())
03.    max_v = 0
04.    clubes = []
05.    for c,r in res:
06.        if r[0] > max_v:
07.            max_v = r[0]
08.            clubes = [c]
09.        elif r[0] == max_v:
10.            clubes.append(c)
11.    return (clubes, max_v)
Pergunta 3 Suponha que tem guardado em disco um ficheiro de texto. Pretende analisar o conteúdo do texto para determinar a lista das palavras que nele ocorrem com uma frequência superior a um dado valor. Escreva um programa que dado um ficheiro e o valor de referência determina a lista das palavras que ocorrem um número de vezes superior a esse valor.

Solução

O que vamos fazer é começar por construir um dicionário de frequências para as palavras do ficheiro. Depois percorremos o dicionário identificando as palavras que ocorrem um número de vezes superior ao valor de referência (limiar).
01.def lista_freq(ficheiro,limiar):
02.    f_ent = open(ficheiro, 'r', enconding='utf8')
03.    palavras = f_ent.read().replace('\n',' ').split()
04.    dicio = {}
05.    for pal in palavras:
06.        dicio[pal] = dicio.get(pal,0) + 1
07.    lista = []
08.    for pal,num_ocor in dicio.items():
09.        if num_ocor > limiar:
10.            lista.append(pal)
11.    return lista

Sem comentários:

Enviar um comentário