1
resposta

[Projeto] Lista de convidados

def obter_convidado():
    """
    Obtem um novo nome para adicionar à lista de convidados.
    
    Solicita ao usuário o nome do convidado ou 'sair' para encerrar.
    Retorna None se o usuário optar por sair.
    Garante que o nome não seja vazio e contenha apenas letras.
    """
    while True:
        novo_convidado = input('Digite o nome do novo convidado ou "sair" para encerrar o programa: ').strip()

        if novo_convidado.lower() == "sair":
            return None

        if not novo_convidado:
            print('Erro! Nome vazio.')
            continue
        elif not novo_convidado.isalpha():
            print('Erro! Digite apenas nomes.')
            continue
        
        return novo_convidado.title()
    

def obter_posicao(tamanho_lista):
    """
    Solicita ao usuário a posição para inserir o novo convidado na lista.

    Args:
        tamanho_lista (int): Tamanho atual da lista de convidados.

    Returns:
        int: Índice (base zero) onde o convidado será inserido.
    """
    while True:
        try:
            posicao_convidado = int(input(f'Insira a posição na qual deseja inserir o convidado(1 a {tamanho_lista + 1}): '))
        except ValueError:
            print('Insira apenas um número válido!')
            continue

        if 1 <= posicao_convidado <= tamanho_lista + 1:
            print('Convidado adicionado a lista.')
            return posicao_convidado - 1
        else:
            print(f'ERRO! insira uma posição entre 1 e {tamanho_lista + 1}.')


def adicionar_convidado(convidados):
    """
    Adiciona um novo convidado em uma posição específica da lista.

    Args:
        convidados (list): Lista atual de convidados.

    Chama as funções para obter o nome e a posição, e insere o convidado na lista.   
    """
    convidado = obter_convidado()
    if convidado is None:
        return False

    posicao = obter_posicao(len(convidados))
    convidados.insert(posicao, convidado)
    return True


def main():
    convidados = ['Ana', 'Pedro', 'Carlos']
    while True:
        if not adicionar_convidado(convidados):
            print(f'Operação finalizada! Nova lista: {convidados}')
            break        
        else:
            print(f'Lista Atualizada: {convidados}')
           

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

Oii, Matheus!

Obrigada por compartilhar seu código com a comunidade Alura.

Seu código tá muito bem estruturado, com funções bem nomeadas e docstrings claras. Gostei especialmente da forma como você validou a entrada de nomes e posições, isso evita muitos erros comuns e torna a interação mais fluida.

Uma dica interessante para o futuro é permitir que o usuário veja a lista atual antes de inserir um novo nome. Isso pode ajudar a decidir melhor a posição. Algo assim:


def exibir_subtitulo(texto):
    linha = (len(texto) + 4)
    print(f"{texto}")
    print()

def exibir_lista(convidados):
    print("\nLista atual de convidados:")
    for i, nome in enumerate(convidados, start=1):
        print(f"{i}. {nome}")
    print()

def obter_convidado():
    """
    Obtem um novo nome para adicionar à lista de convidados.
    """
    while True:
        novo_convidado = input('Digite o nome do novo convidado ou "sair" para encerrar o programa: ').strip()

        if novo_convidado.lower() == "sair":
            return None

        if not novo_convidado:
            print('Erro! Nome vazio.')
            continue
        elif not novo_convidado.isalpha():
            print('Erro! Digite apenas nomes.')
            continue

        return novo_convidado.title()

def obter_posicao(tamanho_lista):
    """
    Solicita ao usuário a posição para inserir o novo convidado na lista.
    """
    while True:
        try:
            posicao_convidado = int(input(f'Insira a posição na qual deseja inserir o convidado (1 a {tamanho_lista + 1}): '))
        except ValueError:
            print('Insira apenas um número válido!')
            continue

        if 1 <= posicao_convidado <= tamanho_lista + 1:
            print('Convidado adicionado à lista.')
            return posicao_convidado - 1
        else:
            print(f'ERRO! Insira uma posição entre 1 e {tamanho_lista + 1}.')

def adicionar_convidado(convidados):
    """
    Adiciona um novo convidado em uma posição específica da lista.
    """
    exibir_lista(convidados)

    convidado = obter_convidado()
    if convidado is None:
        return False

    posicao = obter_posicao(len(convidados))
    convidados.insert(posicao, convidado)
    return True

def main():
    convidados = ['Ana', 'Pedro', 'Carlos']
    exibir_subtitulo('\n - LISTA DE CONVIDADOS - \n')

    while True:
        if not adicionar_convidado(convidados):
            print(f'\nOperação finalizada! Nova lista: {convidados}')
            break
        else:
            print(f'Lista Atualizada: {convidados}')

if __name__ == '__main__':
    main()

Usei enumerate pra mostrar os nomes com a posição correspondente, começando em 1.

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