quarta-feira, 10 de fevereiro de 2016

Exame Recurso - P4

Temos uma base de dados, organizada com um dicionário, formada pelo identificador de cada docente (chave) e pelos seus dados profissionais e pessoais (valor). Estes dados estão também guardados num dicionário em que as chaves são os identificadores dos dados pessoais e académicos e os valores, os valores correspondentes. Era-nos pedido a verificação da consistência da base de dados. definida pela identidade das chaves dos dicionários associados a cada docente. Foram vários os erros feitos pelos alunos. Desde usarem à partida como argumento para além da base de dados a lista das chaves, até assumirem que as chaves de um dicionário estão ordenadas, passando por ignorar que os métodos para obter as chaves,os valores ou os items são iteradores.

Uma solução simples para o problema é o que apresentamos a seguir:

def bd_consistente(bd):
    lista_dados_docentes = list(bd.values())
    lista_chaves = []
    for elem in lista_dados_docentes:
        chaves = list(elem.keys())
        chaves.sort()
        lista_chaves.append(chaves)
    for i in range(len(lista_chaves)-1):
        if lista_chaves[i] != lista_chaves[i+1]:
            return False
    return True

if __name__ == '__main__':
    base_dados = {'ecosta':{'nome':'Ernesto','apelido':'Costa'},'lpato':{'nome':'Luís','apelido':'Pato', 'título':'Auxiliar'}, 'aneves':{'nome':'Artur','apelido':'Neves'}}
    print(bd_consistente(base_dados))

Come se pode ver, começamos por guardar em lista_dados_docentes a lista dos dicionários associados a cada docente. De seguida, construímos uma nova lista (lista_chaves) onde guardamos as chaves ordenadas de cada docente. Finalmente, no segundo ciclo, comparamos as chaves ordenadas, terminando mal exista uma caso de diferença.