Olá, Andressa. Como vai?
Parabéns pela excelente resolução! O seu código ficou impecável e a escolha de utilizar uma função lambda dentro do filter() para validar a paridade (x % 2 == 0) foi cirúrgica.
Gostei muito de ver que você não se limitou a criar uma lista estática. Você implementou uma estrutura dinâmica de captura usando o laço while e adicionou uma camada de tratamento de exceções com o bloco try/except. Capturar o ValueError é uma excelente prática de programação defensiva, pois impede que o seu programa quebre caso o usuário digite um texto acidentalmente (como aconteceu quando você testou digitando "fim").
Como a função filter() trabalha nos bastidores?
Para enriquecer os seus estudos, vale a pena visualizar o comportamento do método filter(). Ele é uma função de alta ordem (Higher-Order Function) que recebe uma regra lógica (sua função lambda) e uma coleção.
O filter() funciona exatamente como uma peneira: ele passa por cada elemento da lista original e aplica a condição. Se a resposta da lambda for True, o número passa pelos furos da peneira e é guardado; se for False, ele é descartado.
Como o filter() gera um objeto do tipo iterador na memória, o uso do list(...) em volta dele, que você aplicou perfeitamente, é obrigatório para converter esses valores filtrados de volta em uma lista visualizável.
Uma sugestão alinhada ao enunciado do desafio
O seu programa está fantástico e resolve o problema de forma muito mais robusta. Contudo, se pensarmos estritamente no formato de entrada proposto no enunciado do desafio técnico do processo seletivo:
Digite os números separados por espaço: 1 2 3 4 5 6
Digitar os números um por vez em um laço while pode fazer o usuário perder tempo caso a lista financeira seja muito grande. No Python, podemos capturar todos os números de uma única vez em uma única linha de texto e transformá-los em uma lista usando o método .split().
Como sugestão de boa prática para o caso de você enfrentar um teste técnico com tempo limitado, veja como a captura pode ser simplificada para bater exatamente com o exemplo de entrada e saída esperado:
# Captura a linha inteira digitada pelo usuário
entrada = input("Digite os números separados por espaço: ")
# .split() divide o texto pelos espaços, gerando uma lista de strings.
# Usamos o int(x) para converter cada pedaço de texto em número.
lista_numeros = [int(x) for x in entrada.split()]
# Aplica o filtro dos pares que você construiu brilhantemente
pares = list(filter(lambda x: x % 2 == 0, lista_numeros))
# Exibe o resultado de forma limpa, desempacotando a lista com o operador *
print("Números pares:", *pares)
O operador * antes da variável pares no print serve para desempacotar a lista, exibindo os números separados apenas por espaços (2 4 6), exatamente igual à saída esperada pelo desafio, eliminando os colchetes e as vírgulas da formatação padrão de listas.
Você demonstrou um excelente domínio de lógica, manipulação de funções anônimas e tratamento de erros. Continue com esse foco incrível!
Espero que possa ter lhe ajudado!