Nivel: Principiante
Tema: Strings, bucles, condicionales, normalización básica, validación de entradas, tests con pytest
Objetivo: Contar cuántas vocales hay en una cadena, ignorando mayúsculas y manejando entradas inválidas de forma segura.

Enunciado
Crea una función llamada contar_vocales(texto) que:
- Reciba un valor
texto. - Si
textoesNone, devuelva0. - Si
textono es unstr, lanceTypeError. - Ignore mayúsculas/minúsculas.
- Cuente solo las vocales a, e, i, o, u.
- Devuelva el número total de vocales encontradas.
Para este reto no es necesario contar vocales con acento.
Ejemplos
contar_vocales("hola")→2contar_vocales("PYTHON")→1contar_vocales("Anita lava la tina")→8contar_vocales("")→0contar_vocales(None)→0contar_vocales(123)→ TypeError
Pistas
- Convierte el texto a minúsculas.
- Define una colección de vocales (
"aeiou"o unset). - Recorre el texto carácter por carácter y suma cuando sea vocal.
Solución explicada (paso a paso)
- Si el texto es
None, no hay vocales →0. - Si la entrada no es una cadena, lanzamos
TypeError. - Convertimos el texto a minúsculas para unificar comparaciones.
- Recorremos cada carácter:
- si pertenece al conjunto de vocales, incrementamos el contador.
- Devolvemos el total acumulado.
Ejecuta:
pytest -q
Variantes para subir de nivel (opcional)
- Soportar vocales con acento: á, é, í, ó, ú
- Devolver frecuencia por vocal:
{a: 3, e: 1, ...} - Usar comprensión de listas
- Ignorar caracteres no alfabéticos
Lo que aprendiste
- Uso de sets para búsquedas eficientes
- Normalización de texto
- Contadores simples
- Tests para lógica iterativa
Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.
Continúa con Reto #10 — Normalizar nombres (trim + title case) para seguir mejorando el manejo de strings y entradas del usuario.