1
resposta

Faça como eu fiz: filtrando números pares

Lucas está desenvolvendo um sistema para gerar relatórios financeiros e precisa filtrar apenas os valores pares de uma lista de números informada pelo usuário.

Crie um programa que receba uma lista de números e exiba apenas os pares usando a função filter().

Exemplo de entrada:

Digite os números separados por espaço: 1 2 3 4 5 6 

Saída esperada:

Números pares: 2 4 6 
lista = []

print("Digite os números um por vez. Digite 'sair' para encerrar.")

while True:
    entrada = input("Número: ")
    if entrada.lower() == "sair":
        break
    try:
        numero = int(entrada)
        lista.append(numero)
    except ValueError:
        print("Por favor, digite apenas números ou 'sair'.")

pares = list(filter(lambda x: x % 2 == 0, lista))

print("Números pares:", pares)

Digite os números um por vez. Digite 'sair' para encerrar.
Número: 15
Número: 18
Número: 72
Número: 104
Número: 121
Número: 270
Número: 297
Número: fim
Por favor, digite apenas números ou 'sair'.
Número: sair
Números pares: [18, 72, 104, 270]
1 resposta

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!