Python Reto #11 — Validar email (reglas simples)

Nivel: Principiante
Tema: Strings, validación básica, reglas explícitas, manejo de errores, tests con pytest
Objetivo: Validar direcciones de email usando reglas simples y claras, sin expresiones regulares complejas.

Enunciado

Crea una función llamada validar_email(email) que:

  1. Reciba un valor email.
  2. Si email es None, devuelva False.
  3. Si email no es un str, lance TypeError.
  4. Considere un email válido si cumple todas estas reglas simples:
    • Contiene exactamente un carácter @
    • Tiene texto antes y después del @
    • La parte después del @ contiene al menos un punto .
    • No contiene espacios
  5. Devuelva True si es válido, o False en caso contrario.

Este reto no pretende cubrir todas las reglas reales del estándar de email. Es una validación práctica y pedagógica.

Ejemplos

  • validar_email("usuario@email.com")True
  • validar_email("user.name@mail.co")True
  • validar_email("usuario@com")False
  • validar_email("@email.com")False
  • validar_email("usuario@email")False
  • validar_email("usuario email.com")False
  • validar_email(None)False
  • validar_email(123)TypeError

Pistas

  1. Usa email.count("@") para comprobar cuántos @ hay.
  2. Puedes dividir el email con split("@").
  3. Verifica espacios con " " in email.

Solución explicada (paso a paso)

  1. Si el email es None, no es válido → False.
  2. Si no es una cadena, lanzamos TypeError.
  3. Comprobamos que haya exactamente un @.
  4. Separamos el email en dos partes: usuario y dominio.
  5. Verificamos que ambas partes tengan contenido.
  6. Confirmamos que el dominio tenga al menos un punto.
  7. Verificamos que no haya espacios.
  8. Si todo se cumple, el email es válido.

Ejecuta:

  • pytest -q

Variantes para subir de nivel (opcional)

  1. Usar expresiones regulares simples (re)
  2. Separar validación en funciones pequeñas
  3. Permitir dominios locales (localhost)
  4. Comparar con validadores de librerías reales

Lo que aprendiste

  • Cómo definir reglas claras de validación
  • Por qué “validar simple” suele ser suficiente al inicio
  • Manejo explícito de errores vs valores inválidos
  • Cómo testear lógica booleana con múltiples casos

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

Continúa con Reto #12 — Convertir una lista en un diccionario (índice → valor) para practicar estructuras de datos y enumeración.