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

[Sugestão] Minha Resolução

Também fiz uma resolução parecida com a sugerida pelo instrutor usando set, porém também pratiquei outras formas de resolução como esta:

import os

def main():
    lista_de_convidados = []
    while True:
        try:
            response = input(f'Escreva um nome para inserir na lista de convidados ou "sair": ')
            if response in lista_de_convidados:
                raise Exception('Esta pessoa já está na lista de convidados...')
            if response.lower() == 'sair':
                
                break
            lista_de_convidados.append(response.title())
        except Exception as e:
            input(e)
        else:
            os.system('cls')
            print('Convidado registrado com sucesso')
            exibir_convidados(lista_de_convidados)
    print('\nPrograma encerrado...')
    

def exibir_convidados(lista):
    print('Lista de convidados:')
    for i, convidado in enumerate(lista, start=0):
        print(f'{i+1} - {convidado}')
    


if __name__ == '__main__':
    main()
1 resposta

Oi, Arthur. Tudo bem com você?

Obrigado por compartilhar sua resolução. É interessante ver que, além de praticar a abordagem utilizando set, você também explorou uma alternativa baseada em lista para reforçar o aprendizado. Esse tipo de comparação entre diferentes estruturas de dados é uma ótima forma de entender quando cada uma é mais adequada. Seu código está organizado em funções, utiliza o bloco if __name__ == '__main__': corretamente e separa a responsabilidade de exibir os convidados da lógica principal do programa.

Como sugestão, vale observar apenas um detalhe na verificação de convidados duplicados. A comparação if response in lista_de_convidados: acontece antes de aplicar .title(), enquanto o valor armazenado na lista recebe essa transformação. Isso pode permitir que entradas como joão e João sejam tratadas como diferentes durante a validação. Uma alternativa seria normalizar o texto antes da comparação, garantindo consistência nos dados armazenados. Também é possível utilizar uma exceção mais específica, como ValueError, quando a intenção for sinalizar um valor inválido informado pelo usuário.

No contexto deste exercício, sua solução demonstra que é possível resolver o problema mesmo sem utilizar set, o que amplia sua compreensão sobre listas, funções, tratamento de exceções e organização do código. Em quais situações você considera que uma lista seria mais interessante do que um set, mesmo sabendo que o set impede duplicidades de forma nativa?

Parabéns pela iniciativa de testar outras abordagens e compartilhar sua implementação. Continue praticando e trazendo suas soluções para o fórum. Estamos à disposição para acompanhar sua evolução.

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