Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Reorganizando uma lista de convidados - minha solução

def atualiza_convidados(convidados: list) -> list:
    """
    Função que recebe uma lista de convidados, pede 
    um novo nome, uma posição e insere o nome na
    posição informados, devolvendo a lista 
    atualizada.
    Parâmetro:
        convidados (list): Lista original com os 
        nomes dos convidados.
    Inputs:
        nome (str): Novo nome a ser inserido.
        posicao (int): Posição que o nome será 
        inserido.
    Retorno:
        atualizada (list): Lista de convidados com o
        novo nome inserido na posição informados.
    """
    while True:
        novo_convidado = input("Digite o nome do novo convidado: ").strip().capitalize()
        if not novo_convidado:
            print("O nome do novo convidado não pode estar em branco.")
        else:
            try:
                posicao = int(input("Digite a posição na qual deseja inserir o convidado: "))
                if 0 >= posicao > len(convidados):
                    raise ValueError
                else:
                    posicao -= 1
                    convidados.insert(posicao, novo_convidado)
                    return convidados
            except ValueError:
                print("Informe uma posição válida.")

def apresenta_convidados(convidados: list) -> None:
    """ 
    Função que apresenta ordenadamente os convidados
    de uma lista.
    Parâmetro:
        convidados (list): Uma lista contendo os 
        nomes dos convidados.
    Retorno:
        None
    Print:
        A lista ordenada dos convidados.
    """
    if convidados == []:
        print("Não há convidados na lista.")
    else:
        print("Lista de convidados:")
        for posicao, convidado in enumerate(convidados, start=1):
            print(f"{posicao}: {convidado}")

if __name__ == "__main__":
    convidados_originais = ['Ana', 'Pedro', 'Carlos']
    convidados_atualizados = atualiza_convidados(convidados_originais)
    apresenta_convidados(convidados_atualizados)
3 respostas

Olá, Gabriel! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de insert para posicionar o novo convidado na lista, utilizou muito bem a validação de entrada com try/except e ainda compreendeu a importância de apresentar os dados de forma organizada com enumerate.

Uma dica interessante para o futuro é ajustar a condição de validação da posição, garantindo que o índice seja corretamente verificado. Assim:

if posicao < 1 or posicao > len(convidados) + 1:
    raise ValueError

Isso faz com que o programa aceite apenas posições válidas, evitando que o usuário insira valores 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!

Obrigado pela sugestão. Entretanto não entendi por que colocou o '+ 1' após 'len(convidados)'. Isso não faria a condição aceitar um número acima do que o desejado?

solução!

Bom dia, Gabriel!

Ótima pergunta a sua!

O + 1 aparece por causa da diferença entre tamanho da lista e posição válida para inserção.

Quando você tem uma lista com len(convidados) elementos, os índices internos vão de 0 até len(convidados) - 1. Porém, quando estamos falando de posição informada pelo usuário (o nosso usuário final informa a posição começando por 1), as posições válidas vão de:

1 até len(convidados) + 1

E por que o + 1?


Porque existe uma posição válida após o último elemento, que representa inserir no final da lista. Sem o + 1, o código impediria o usuário de inserir no final dela.

Espero ter esclarecido!