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.

01.def nomes(fich, dicio):
02.    """
03.    Usa um ficheiro para extrair nomes
04.    e um dicionário para encontrar nome completo. Ordenamento simples.
05.    ""”
06.    # Ler informação
07.    ficheiro = open(fich)
08.    dados = ficheiro.readlines()
09.    ficheiro.close()
10.    # Extrair dados
11.    lista = []
12.    for elem in dados:
13.        pos = elem.find('~')
14.        nome = elem[pos+1:-1]
15.        if nome in dicio:
16.            completo = dicio[nome][0]
17.            lista.append(completo)
18.    # ordenar
19.    lista.sort()
20.    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