Nivel: Principiante
Tema: Listas, bucles, acumuladores, validación de entradas, tests con pytest
Objetivo: Implementar una función que sume valores numéricos de una lista sin usar la función integrada sum(), manejando entradas inválidas de forma segura.
Enunciado
Crea una función llamada sumar_valores(lista) que:
- Reciba un valor
lista. - Si
listaesNone, devuelva0. - Si
listano es una lista (list), lanceTypeError. - Sume solo valores numéricos (
intofloat). - Ignore valores que no sean numéricos.
- No utilice la función integrada
sum().
Ejemplos
sumar_valores([1, 2, 3])→6sumar_valores([1, 2.5, 3])→6.5sumar_valores([1, "2", None, 3])→4sumar_valores([])→0sumar_valores(None)→0sumar_valores("123")→ TypeError
Pistas
- Usa una variable acumuladora inicializada en
0. - Recorre la lista con un bucle
for. - Antes de sumar, valida que el valor sea
intofloat.
Solución explicada (paso a paso)
- Si la lista es
None, no hay valores que sumar →0. - Si la entrada no es una lista, lanzamos
TypeError. - Creamos un acumulador
total = 0. - Recorremos cada elemento:
- si es numérico (
intofloat), lo añadimos al total, - si no, lo ignoramos.
- si es numérico (
- Devolvemos el valor acumulado.
Ejecuta:
pytest -q
Variantes para subir de nivel (opcional)
- Usar comprensión de listas + bucle: comparar claridad
- Soportar números negativos y decimales complejos
- Validar NaN e infinitos (avanzado)
- Devolver también la cantidad de valores sumados
Lo que aprendiste
- Cómo usar acumuladores en bucles
- Cómo filtrar tipos antes de operar
- Cómo definir reglas claras para funciones simples
- Cómo testear operaciones numéricas
Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.
Continúa con Reto #8 — FizzBuzz (versión limpia y testeable) para reforzar condicionales y claridad de código.