Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Sugestão] Exercícios 1 e 2

https://raw.githubusercontent.com/MARINALDOSOUZA/Alura_Desafios/refs/heads/main/sistema_de_gerenciamento_de_pessoas

O que o código faz
O programa oferece uma interface de linha de comando para gerenciar registros de pessoas. Ele simula um sistema CRUD (Create, Read, Update, Delete) em uma lista de dicionários, permitindo que o usuário realize as seguintes operações:

Adicionar um novo registro de pessoa.

Visualizar todos os registros existentes.

Buscar um registro específico pelo nome.

Atualizar os dados de um registro.

Excluir um registro.

As mensagens de feedback e os erros são exibidos de forma clara para o usuário e também registrados em um arquivo de log para rastreamento.

Principais recursos utilizados
O código demonstra o uso de diversas técnicas importantes em Python:

Estruturas de Dados: Utiliza uma lista de dicionários para armazenar os registros, simulando um banco de dados em memória.

Validação de Dados: Implementa funções de validação robustas, como validar_idade e validar_string, que usam o módulo re (expressões regulares) para garantir que as entradas do usuário estejam no formato correto.

Tratamento de Erros: Usa blocos try-except para capturar e gerenciar erros de forma controlada, garantindo que o programa não pare de funcionar com entradas inválidas.

Boas Práticas de Código: Aplica o princípio DRY (Don't Repeat Yourself), centralizando a lógica de exibição de mensagens e formatação de tabelas em funções separadas, o que torna o código mais limpo e fácil de manter.

Interface de Usuário: Utiliza um menu interativo para navegação e o módulo os para limpar a tela, proporcionando uma experiência de usuário mais fluida.

Logging: O uso do módulo logging permite registrar as ações do programa (sucessos, erros e avisos), o que é essencial para depuração e auditoria em aplicações reais.

Funcionalidades no menu interativo
O menu oferece cinco opções principais:

Mostrar todos os registros: Exibe uma tabela formatada com todas as pessoas cadastradas.

Adicionar novo registro: Permite ao usuário inserir nome, idade, cidade, estado (UF) e uma informação complementar, com validação automática para cada campo.

Buscar registro: Pede um nome ao usuário e exibe as informações da pessoa em um formato de tabela, se encontrada.

Atualizar / Excluir registro: Encontra um registro pelo nome e permite ao usuário escolher entre modificar os dados ou removê-lo definitivamente do sistema.

Sair: Encerra o programa.

3 respostas

Oi, Marinaldo! Como vai?

Com o que você descreveu, ficou claro que você aplicou vários conceitos importantes de Python, como validação de dados, tratamento de erros e logging, criando um CRUD bem estruturado e organizado. É interessante ver como você usou funções para manter o código limpo e evitar repetições.

Uma dica interessante para o futuro é usar o método dict.get() para acessar valores em um dicionário sem causar erro caso a chave não exista.
Veja este exemplo:


pessoa = {"nome": "Ana", "idade": 25}
print(pessoa.get("cidade", "Cidade nao informada"))

Esse código retorna a cidade se existir ou uma mensagem padrão caso a chave não esteja presente.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Pensei em resolver a questão dos Estados e Municípios com um df json, html, xls ou outros com consulta online direta.

No entanto, seria adequado?

Uma vez que eu deveria modular e otimizar para economizar memória...

solução!

Oi, Marinaldo!

Usar um DataFrame (com pandas) para armazenar Estados e Municípios é viável, mas para otimizar memória e manter o código modular, sugiro que você:

  • Armazene os dados em um arquivo local (JSON ou CSV) e carregue apenas quando necessário, evitando manter tudo na memória durante toda a execução.
  • Use indexação e filtros do pandas para consultas rápidas.
  • Caso opte por buscar online, utilize requisições diretas a uma API oficial (como o IBGE) para evitar carregar um volume desnecessário de dados.

Veja este exemplo de implementação simples com CSV local:


import pandas as pd

# Carrega apenas quando precisar
def carregar_dados(caminho_arquivo):
    return pd.read_csv(caminho_arquivo)

# Consulta rápida
def buscar_municipios_por_estado(df, uf):
    return df[df["UF"] == uf]

# Uso
dados = carregar_dados("municipios.csv")
resultado = buscar_municipios_por_estado(dados, "SP")
print(resultado)

Assim, você mantém o sistema mais enxuto e modular, sem sobrecarregar a memória.

Fico à disposição.