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

[Projeto] Organizando lista de convidados

import re


def nome_valido(nome_convidado):
    """
    Verifica se o nome digitado possui apenas letras e espaços.

    """
    return re.fullmatch(r"[A-Za-zÀ-ÖØ-öø-ÿ]+(?: [A-Za-zÀ-ÖØ-öø-ÿ]+)*", nome_convidado) is not None



def deseja_continuar():
    """
    Pergunta ao usuário se deseja adicionar outro nome à lista.

    """
    while True:
        resposta = input('Deseja adicionar outro convidado? (s/n): ').strip().lower()

        if resposta in ('s', 'n'):
            return resposta == 's'
        print('Por favor, responda com "s" ou "n".')                   

                
                
def nome_repetido(nome_convidado, convidados):
    """
    Verifica se o nome digitado já está na lista de convidados (set).

    """
    return nome_convidado.title() in convidados



def obter_convidados(convidados):
    """
    Adiciona o nome digitado à lista de convidados caso não tenha nenhum erro nas funções anteriores.

    Se o nome digitado for inválido(possui números ou símbolos) retorna None.
    Pede um novo nome caso o nome inserido anteriormente já esteja presente na lista.
    """       
    while True:
        nome_convidado = input('Digite o nome do convidado: ').strip()

        if not nome_valido(nome_convidado):
            print('Nome inválido. Digite apenas letras e espaços. Não use números ou símbolos.')
            continue        
        if nome_repetido(nome_convidado, convidados):
            print('Esse nome já foi adicionado. Digite outro nome.')
            continue
        
        convidados.add(nome_convidado.title())
        print(f'O convidado {nome_convidado.title()} foi adicionado com sucesso.')
        break

    

def main():
    convidados = set()
    while True:
        obter_convidados(convidados)
        if not deseja_continuar():
            print('Encerrando o programa...')
            break

    print(f'Convidados confirmados: {", ".join(sorted(convidados))}')


    
if __name__ == '__main__':
    main()

            
1 resposta
solução!

Oii, Matheus!

Obrigada por compartilhar seu código.

Seu projeto tá bem estruturado e a separação das responsabilidades em funções ficou muito clara. A forma como você validou os nomes com expressões regulares chama atenção e mostra domínio das ferramentas que o Python oferece.

Uma dica interessante para o futuro é usar o método casefold() ao comparar strings, principalmente para garantir que a comparação seja insensível a maiúsculas/minúsculas, inclusive em idiomas com acentuação. Veja este exemplo:


nome1 = "João"
nome2 = "joão"

print(nome1.casefold() == nome2.casefold())  # retorna True

Esse código compara duas strings ignorando diferenças de maiúsculas e acentuação.

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