Python Reto #7 — Sumar valores en una lista (sin usar sum)

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:

  1. Reciba un valor lista.
  2. Si lista es None, devuelva 0.
  3. Si lista no es una lista (list), lance TypeError.
  4. Sume solo valores numéricos (int o float).
  5. Ignore valores que no sean numéricos.
  6. No utilice la función integrada sum().

Ejemplos

  • sumar_valores([1, 2, 3])6
  • sumar_valores([1, 2.5, 3])6.5
  • sumar_valores([1, "2", None, 3])4
  • sumar_valores([])0
  • sumar_valores(None)0
  • sumar_valores("123")TypeError

Pistas

  1. Usa una variable acumuladora inicializada en 0.
  2. Recorre la lista con un bucle for.
  3. Antes de sumar, valida que el valor sea int o float.

Solución explicada (paso a paso)

  1. Si la lista es None, no hay valores que sumar → 0.
  2. Si la entrada no es una lista, lanzamos TypeError.
  3. Creamos un acumulador total = 0.
  4. Recorremos cada elemento:
    • si es numérico (int o float), lo añadimos al total,
    • si no, lo ignoramos.
  5. Devolvemos el valor acumulado.

Ejecuta:

  • pytest -q

Variantes para subir de nivel (opcional)

  1. Usar comprensión de listas + bucle: comparar claridad
  2. Soportar números negativos y decimales complejos
  3. Validar NaN e infinitos (avanzado)
  4. 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.