Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Resolução de Exercícios- 06 Registrando voluntários para uma campanha

models/repositorio_voluntarios.py


class RepositorioVoluntarios:

    """ Classe que guarda a lista de voluntários cadastrados -- Lógica de Persistência """

    lista_voluntarios = []

    @classmethod

    def adicionar_voluntario (cls, voluntario):

        cls.lista_voluntarios.append (voluntario)

    @classmethod

    def remover_voluntario (cls, voluntario):

        cls.lista_voluntarios.remove (voluntario)

    @classmethod

    def buscar_voluntario_por_id (cls, ID):

        """
        Busca no Repositório de Voluntários o ID fornecido e retorna o nome, caso existir ou retorna False se não.
        
        Parâmetros:
        - ID: int
        """

        for voluntario_iterador in cls.lista_voluntarios:

            if voluntario_iterador.id == ID:

                return voluntario_iterador
        
        return False
    
    @classmethod

    def percorrer_lista_voluntarios (cls):

        """ Percorre a lista de voluntários cadastrados e exibe o nome e o ID de cada um """

        print (f"{"Nome".ljust(25)} | {"ID".ljust(25)}")

        for voluntario_iterador in cls.lista_voluntarios:
            
            print (f"{voluntario_iterador.nome.ljust(25)} | {str(voluntario_iterador.id).ljust(25)}")

models/voluntario.py


from models.repositorio_vonluntarios import RepositorioVoluntarios

class Voluntario:

    """ Classe que representa uma pessoa voluntária ao serviço """

    def __init__ (self, nome = "", id = 0):

        """
        Contrutor da Classe
        
        Parâmetros:
        - Nome: String
        - ID: Int
        """

        self.nome = nome
        self.id = id

main.py


from models.repositorio_vonluntarios import RepositorioVoluntarios
from models.voluntario import Voluntario

def exibir_apresentacao():

    """Exibe no console uma apresentação amigável ao usuário"""

    print ("\nOlá, seja bem-vindo à ONG Ajudantes. Como podemos ajudar? \n")

def selecionar_opcoes():

    """Permite o usuário escolher uma opção dentre os serviços disponíveiss"""

    opcao_usuario = input (
        "1 - Cadastrar voluntário" \
        "\n2 - Remover voluntário" \
        "\n3 - Mostrar a lista de voluntários" \
        "\n4 - Sair; \n Digite o número da opção desejada: ")
    
    return opcao_usuario

def confirmador():

    input("\nAperte qualquer tecla para continuar")
    print("\n\n\n")

def main():

    while True:

        try:

            exibir_apresentacao()
            
            opcao_usuario = int (selecionar_opcoes())

            if opcao_usuario == 1:

                nome_voluntario = input("\nDigite o nome do voluntário(a): ").title()
                id_voluntario = input("Digite o novo ID do voluntário(a): ").title()

                if RepositorioVoluntarios.buscar_voluntario_por_id (id_voluntario):

                    print ("\nEsse ID já está sendo usado. Por favor, tente novamente")
                    confirmador()
                
                else:

                    RepositorioVoluntarios.adicionar_voluntario (Voluntario (nome_voluntario, id_voluntario))
                    print (f"\nO(A) voluntário(a) {nome_voluntario} foi adiocionado(a) com sucesso!")

            elif opcao_usuario == 2:

                id_voluntario = input ("\nDigite o ID do voluntário(a) que se deseja excluir: ")

                voluntario_selecionado = RepositorioVoluntarios.buscar_voluntario_por_id (id_voluntario)

                if not voluntario_selecionado:

                    print ("\nErro, este voluntário não existe em nosso banco de dados. Verifique se não houve erros de digitação no ID.")
                    confirmador()

                else:

                    confirmacao = input (f"Deseja realmente deletar o(a) voluntário(a) {voluntario_selecionado.nome}? (S / qualquer outra tecla para cancelar): ").upper()

                    if confirmacao == "S":

                        RepositorioVoluntarios.remover_voluntario (voluntario_selecionado)

                    else:

                        print ("Cancelando a exclusão. Voltando ao Menu Principal")
                        confirmador()

            elif opcao_usuario == 3:

                RepositorioVoluntarios.percorrer_lista_voluntarios()
                confirmador()

            elif opcao_usuario == 4:

                print ("\n\nObrigado por acessar nosso site. Até mais!")
                break

            else:

                print ("\nOpção inválida. Por favor, tente novamente.")
                confirmador()


        except ValueError:

            print ("\nDigite um número válido. Por favor, tente novamente.")
            confirmador()


if __name__ == "__main__":

    main()
1 resposta

Olá, Victor! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a orientação a objetos para estruturar o sistema de voluntários em Python, utilizou muito bem a separação entre classe de modelo e repositório para organizar responsabilidades e ainda compreendeu a importância da validação de IDs para evitar duplicidade de registros.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Validação de entrada: garantir que IDs sejam únicos e que nomes não fiquem vazios.
  • Organização modular: separar lógica de interface (menus) da lógica de persistência e modelo.
  • Corrigir importações: há um pequeno erro de digitação em repositorio_vonluntarios (o correto seria repositorio_voluntarios).

Ah, uma pergunta: você acha que adicionar persistência dos dados em JSON deixaria o sistema mais próximo de um uso real em uma ONG ou prefere manter apenas em memória para simplificar os testes iniciais?

Abraço e bons estudos!

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