Python Reto #4 — Frecuencia de caracteres en una cadena

Nivel: Principiante
Tema: Strings, diccionarios, bucles, validación de entradas, tests con pytest
Objetivo: Contar cuántas veces aparece cada carácter en una cadena, devolviendo un diccionario con las frecuencias.

Enunciado

Crea una función llamada frecuencia_caracteres(texto) que:

  1. Reciba un valor texto.
  2. Si texto es None, devuelva un diccionario vacío {}.
  3. Si texto no es un str, lance TypeError.
  4. Devuelva un diccionario donde:
    • las claves sean los caracteres del texto,
    • los valores sean el número de veces que aparece cada carácter.
  5. Debe contar todos los caracteres, incluidos espacios y símbolos.

Ejemplos

  • frecuencia_caracteres("hola"){"h": 1, "o": 1, "l": 1, "a": 1}
  • frecuencia_caracteres("hola hola"){"h": 2, "o": 2, "l": 2, "a": 2, " ": 1}
  • frecuencia_caracteres(""){}
  • frecuencia_caracteres(None){}
  • frecuencia_caracteres(123)TypeError

Pistas

  1. Usa un diccionario vacío para acumular los conteos.
  2. Recorre la cadena carácter por carácter.
  3. Si el carácter ya existe como clave, incrementa su valor.
  4. Si no existe, inicialízalo en 1.

Solución explicada (paso a paso)

  1. Si el texto es None, no hay caracteres que contar → devolvemos {}.
  2. Si la entrada no es una cadena, lanzamos TypeError.
  3. Creamos un diccionario vacío frecuencias.
  4. Recorremos cada carácter del texto:
    • si ya está en el diccionario, sumamos 1,
    • si no, lo añadimos con valor 1.
  5. Devolvemos el diccionario final.

Ejecuta:

  • pytest -q

Variantes para subir de nivel (opcional)

  1. Ignorar espacios: no contar " "
  2. Normalizar mayúsculas/minúsculas: "H" y "h" cuentan como el mismo carácter
  3. Usar collections.Counter: compara claridad y concisión
  4. Frecuencia de palabras en lugar de caracteres

Lo que aprendiste

  • Cómo usar diccionarios como contadores
  • Cómo recorrer strings de forma eficiente
  • Cómo definir reglas claras para casos borde
  • Cómo testear estructuras de datos con pytest

Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.

Sigue con Reto #5 — Filtrar números pares de una lista para practicar listas, condicionales y lógica simple aplicada.