CSE 111: Programando com funções

Exemplo de Solução

O seguinte programa mostra uma maneira de resolver este problema. Essa não é a única forma possível de solucioná-lo.


# Copyright 2020, Brigham Young University-Idaho. Todos os direitos reservados.

"""
Uma tarefa comum para muitas pessoas que trabalham com informações
é usar um número, chave ou ID para buscar informações sobre uma pessoa.
Por exemplo, uma pessoa pode usar um número de telefone ou endereço de e-mail
como uma chave para encontrar (ou pesquisar) informações adicionais sobre um cliente.
Durante esta atividade, sua equipe escreverá um programa em Python que
usa o número de identificação (ID) de um estudante para buscar o nome do estudante.
"""
import csv


def main():
    # Os cabeçalhos das colunas e seus índices.
    INDICE_ID = 0
    INDICE_NOME = 1

    # Lê o conteúdo de um arquivo CSV chamado estudantes.csv
    # em um dicionário chamado dic_estudantes. Usa o ID
    # como a chave no dicionário.
    dic_estudantes = ler_dicionario("estudantes.csv", INDICE_ID)

    # Solicita ao usuário um número de identificação.
    id_usuario = input("Por favor, digite um número de identificação (xx-xxx-xxxx): ")

    # Os números de identificação estão armazenados no arquivo CSV como apenas dígitos
    # (sem traços), então removemos todos os traços da entrada do usuário.
    id_usuario = id_usuario.replace("-", "")

    # Verifica se a entrada do usuário está formatada corretamente.
    # "if not" significa "se não", ou seja, execute o bloco se a condição for falsa.
    if not id_usuario.isdigit():
        print("Número de identificação inválido: caractere inválido")
    else:
        if len(id_usuario) < 9:
            print("Número de identificação inválido: dígitos insuficientes")
        elif len(id_usuario) > 9:
            print("Número de identificação inválido: ultrapassa o limite de dígitos")
        else:
            # A entrada do usuário é um ID válido. Verifica
            # se o ID está presente na lista.
            if id_usuario not in dic_estudantes:
                print("Estudante inexistente")
            else:
                # Recupera o nome do estudante correspondente
                # ao ID informado pelo usuário.
                valor = dic_estudantes[id_usuario]
                nome = valor[INDICE_NOME]

                # Exibe o nome do estudante.
                print(nome)


def ler_dicionario(nome_arquivo, indice_coluna_chave):
    """Lê o conteúdo de um arquivo CSV em um dicionário composto
    e retorna o dicionário.

    Parâmetros:
        nome_arquivo: o nome do arquivo CSV a ser lido.
        indice_coluna_chave: o índice da coluna
            a ser usada como chave no dicionário.
    Retorno: um dicionário composto que contém
        o conteúdo do arquivo CSV.
    """
    # Cria um dicionário vazio que irá
    # armazenar os dados do arquivo CSV.
    dicionario = {}

    # Abre o arquivo CSV para leitura e armazena uma referência
    # ao arquivo aberto em uma variável chamada arquivo_csv.
    with open(nome_arquivo, "rt", encoding="utf-8") as arquivo_csv:

        # Usa o módulo csv para criar um objeto leitor
        # que irá ler do arquivo CSV aberto.
        leitor = csv.reader(arquivo_csv)

        # A primeira linha do arquivo CSV contém os cabeçalhos
        # das colunas e não os dados, então esta instrução pula
        # a primeira linha do arquivo.
        next(leitor)

        # Lê as linhas do arquivo CSV uma por uma.
        # O objeto leitor retorna cada linha como uma lista.
        for linha in leitor:

            # Da linha atual, recupera os dados
            # da coluna que contém a chave.
            chave = linha[indice_coluna_chave]

            # Armazena os dados da linha atual
            # no dicionário.
            dicionario[chave] = linha

    # Retorna o dicionário.
    return dicionario


# Se este arquivo for executado assim:
# > python estudantes.py
# então chama a função main. Entretanto, se este arquivo
# for apenas importado, a chamada ao main é ignorada.
if __name__ == "__main__":
    main()