terça-feira, 25 de janeiro de 2011

Problema 5: Exame Normal

Este problema, não sendo difícil, obriga a ter alguma disciplina. Identificamos três questões: (1) ler um ficheiro e extrair a informação relevante; (2) usar essa informação como chave de um dicionário para ir buscar os dados que nos são pedidos; (3) ordenar os dados. Vejamos uma hipótese de solução.


def nomes(fich, dicio):
"""
Usa um ficheiro para extrair nomes
e um dicionário para encontrar nome completo. Ordenamento simples.
""”
# Ler informação
ficheiro = open(fich)
dados = ficheiro.readlines()
ficheiro.close()
# Extrair dados
lista = []
for elem in dados:
pos = elem.find('~')
nome = elem[pos+1:-1]
if nome in dicio:
completo = dicio[nome][0]
lista.append(completo)
# ordenar
lista.sort()
return lista

Porque a informação está logicamente organizada por linhas é assim que a devemos ler. Vamos depois iterar para cada linha na busca do nome do utilizador, o que fazemos usando o método find. Encontrada a posição o nome tem que estar a partir dessa posição até ao final, mas devemos ter o cuidado de retirar o código correspondente à mudança de linha. O teste dentro do ciclo serve apenas para garantir que só extraímos informação se ela estiver efectivamente no dicionário. Finalmente o método sort é usado para ordenar o resultado.

1 comentário:

  1. Bom Dia Professor, primeiro parabeniza-lo por excelente didatica no seu blog Python. O problema:

    ler um ficheiro books.txt e imprimir o conteudo, lembrando que o ficheiro tem um cabeçalho seguido de dados.
    Ex.:
    titulo,autor,edicao,ano,categoria,valor,estoque
    web2py official book , Massimo Di Pierro , 3 , 2010 , Informatica , 123.50, 220
    Culinaria vegetariana, Claudia Papp, 1 , 2011 , Gastronomia , 56.50 , 30
    O senhor dos aneis , J.R Tolkien , 37 , 1972 , Epico , 150 , 450
    O Pequeno Principe, Antoine Exuperi, 59 , 1944 , Infantil , 22.50, 89
    A biblia do Java em portugues, Javaman, 1, 2011, Informatica, 225, 456

    Como poderia fazer isto usando o exemplo acima.??
    ovidioccg@gmail.com

    ResponderEliminar