Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Reorganizando uma lista de convidados

from lista_vazia import ListaVaziaError
from remover_erro import RemoverError

class ReceberConvidados:
    def __init__(self):
        self.convidados = []

    def adicionar_convidado(self, posicao, convidado):
        self.convidados.insert(posicao -1, convidado)

    @property
    def ver_convidados(self):
        if not self.convidados:
            raise ListaVaziaError("Nenhum convidado adicionado.")
        else:
            return "\n".join(
        f"{i} - {c}" for i, c in enumerate(self.convidados, 1))

    @property
    def ver_convidados_ordenados(self):
        convidados_ordenados = sorted(self.convidados)
        if not convidados_ordenados:
            raise ListaVaziaError("Nehum convidado adiconado.")
        else:
            return "\n".join(
        f"{i} - {c}" for i, c in enumerate(convidados_ordenados, 1))

    def remover_convidado(self, convidado):
            if not self.convidados:
                raise RemoverError("Nehum convidado para remover.")
            if convidado not in self.convidados:
                raise RemoverError(f"O convidado {convidado} não foi encontrado.")
            else:
                self.convidados.remove(convidado)
class ListaVaziaError(Exception):
    """Exceção lançada quando a lista está vazia."""
    pass
class RemoverError(Exception):
    """Exceção lançada quando tentamos remover alguém que não está na lista."""
    pass
from reogarnizar_lista import ReceberConvidados
from lista_vazia import ListaVaziaError
from remover_erro import RemoverError

def menu():
    print("\n----- Organizador de Convites -----")
    print("1 - Adicionar convidado")
    print("2 - Ver convidados")
    print("3 - Ver convidados ordenados")
    print("4 - Remover convidado")
    print("5 - sair")

organizador = ReceberConvidados()

def main():
    while True:
        menu()
        try:
            opcao = int(input("\nEscolha uma opção: "))

            if opcao == 5:
                print("Saindo...")
                break

            match opcao:
                case 1:
                    nome = input("Digite o nome do novo convidado: ")
                    posicao = int(input("Digite a posição na qual deseja inserir o convidado: "))
                    organizador.adicionar_convidado(posicao, nome)
                    print(f"Convidado {nome} adicionado na posição {posicao} com sucesso.")
                case 2:
                    print("\nLista de convidados:")
                    print(organizador.ver_convidados)
                case 3:
                    print("\nLista de convidados ordenadois:")
                    print(organizador.ver_convidados_ordenados)
                case 4:
                    nome_remover = input("Digite o nome  convidado a remover: ")
                    organizador.remover_convidado(nome_remover)
                    print(f"Convidado {nome_remover} removido com sucesso.")
                case _:
                    print("Digite apenas números entre 1 e 5")

        except ValueError:
            print("Digite apenas números")
        
        except ListaVaziaError as e:
            print(e)

        except RemoverError as r:
            print(r)
       
            
if __name__ == '__main__':
    main()
1 resposta
solução!

Olá, João! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de classes para organizar a lógica do programa, utilizou muito bem exceções personalizadas para tratar erros de forma clara e ainda compreendeu a importância de estruturar um menu interativo para o usuário.

Uma dica interessante para o futuro é melhorar a robustez do método adicionar_convidado, evitando que o programa quebre caso o usuário insira uma posição inválida, por exemplo: maior que o tamanho da lista ou menor que 1. Assim:

def adicionar_convidado(self, posicao, convidado):
    if posicao < 1 or posicao > len(self.convidados) + 1:
        raise ValueError("Posição inválida para inserir convidado.")
    self.convidados.insert(posicao - 1, convidado)

Isso faz com que o programa seja mais seguro e evite comportamentos inesperados quando o usuário fornece entradas fora do intervalo permitido.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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