Nivel: Principiante
Tema: Listas, condicionales, bucles, comprensión de listas, validación de entradas, tests con pytest
Objetivo: Crear una función que devuelva únicamente los números pares de una lista, manteniendo el orden original y manejando entradas inválidas de forma segura.
Enunciado
Crea una función llamada filtrar_pares(lista) que:
- Reciba un valor
lista. - Si
listaesNone, devuelva una lista vacía[]. - Si
listano es una lista (list), lanceTypeError. - Devuelva una nueva lista que contenga solo los números pares.
- Mantenga el orden original de los elementos.
- Ignore valores que no sean enteros (
int).
Ejemplos
filtrar_pares([1, 2, 3, 4, 5, 6])→[2, 4, 6]filtrar_pares([10, 15, 20, 25])→[10, 20]filtrar_pares([1, "2", 4, None])→[4]filtrar_pares([])→[]filtrar_pares(None)→[]filtrar_pares("123")→ TypeError
Pistas
- Un número es par si
numero % 2 == 0. - Antes de aplicar el módulo, asegúrate de que el valor sea un
int. - Puedes resolverlo con un bucle
foro con una comprensión de listas.
Solución explicada (paso a paso)
- Si la lista es
None, no hay nada que filtrar → devolvemos[]. - Si la entrada no es una lista, lanzamos
TypeError. - Creamos una lista vacía para los resultados.
- Recorremos cada elemento:
- si es un entero (
int) y es par, lo añadimos a la lista resultado, - si no, lo ignoramos.
- si es un entero (
- Devolvemos la lista filtrada manteniendo el orden original.
Ejecuta:
pytest -q
Variantes para subir de nivel (opcional)
- Usar comprensión de listas: versión más concisa
- Soportar
tuple: aceptar listas y tuplas - Parámetro opcional: filtrar pares o impares según un flag
- Validar negativos y cero: confirmar comportamiento esperado
Lo que aprendiste
- Cómo filtrar listas con condiciones
- Cómo validar tipos antes de operar
- Cómo mantener el orden original
- Cómo escribir funciones predecibles y testeables
Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.
Cuando termines este reto, estás listo para pasar a Intermedio o continuar con Reto #6 — Palíndromo (ignorando espacios y mayúsculas) para profundizar en strings y normalización.