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()