Portada de libro electrónico gratuitaPython desde cero con mini-retos: aprende programando (sin teoría eterna)

Python desde cero con mini-retos: aprende programando (sin teoría eterna)

Nuevo curso

12 páginas

Control de flujo con condicionales y validación de datos

Capítulo 3

Tiempo estimado de lectura: 5 minutos

+ Ejercicio

Qué es el control de flujo con condicionales

El control de flujo es la forma en que decides qué partes de tu programa se ejecutan según una condición. En Python, la herramienta principal para esto es if, junto con elif y else. La idea es simple: evalúas una expresión que produce True o False y, según el resultado, ejecutas un bloque u otro.

La estructura básica: if / elif / else

Un condicional se lee como “si pasa esto, haz aquello; si no, haz esto otro”. La indentación (espacios al inicio) define qué líneas pertenecen a cada bloque.

edad = 17

if edad >= 18:
    print("Puedes entrar")
else:
    print("No puedes entrar")

Cuando hay más de dos caminos, usas elif (“si no, pero si…”):

nota = 8

if nota >= 9:
    print("Excelente")
elif nota >= 7:
    print("Bien")
elif nota >= 5:
    print("Aprobado")
else:
    print("Reprobado")

Condiciones compuestas: and, or, not

Muchas decisiones reales dependen de varias reglas a la vez. Para combinarlas:

  • and: todas las condiciones deben ser verdaderas.
  • or: al menos una debe ser verdadera.
  • not: invierte el resultado.
edad = 20
invitacion = False

if edad >= 18 and invitacion:
    print("Acceso VIP")
elif edad >= 18 and not invitacion:
    print("Acceso general")
else:
    print("Sin acceso")

Errores típicos al empezar

  • Confundir = con ==: = asigna, == compara.
  • Olvidar los dos puntos : al final de if/elif/else.
  • Indentación inconsistente: el bloque debe estar alineado con el mismo número de espacios.

Validación de datos: que tu programa no se rompa con entradas “raras”

Validar datos significa comprobar que lo que entra a tu programa cumple reglas mínimas antes de usarlo. Esto evita errores y resultados absurdos. En proyectos reales, la validación es una de las habilidades que más te ahorra tiempo.

Continúa en nuestra aplicación.

Podrás escuchar el audiolibro con la pantalla apagada, recibir un certificado gratuito para este curso y además tener acceso a otros 5.000 cursos online gratuitos.

O continúa leyendo más abajo...
Download App

Descargar la aplicación

Tipos de validación comunes

  • Presencia: no permitir vacío.
  • Tipo/formato: que sea un número, que tenga cierto patrón, etc.
  • Rango: que esté entre un mínimo y un máximo.
  • Conjunto permitido: que sea una de varias opciones válidas.

Guía práctica paso a paso: pedir un número entero válido

Mini-objetivo: solicitar al usuario un número entero y no avanzar hasta que sea válido.

Paso 1: pide el dato como texto (lo que entra por teclado siempre llega como texto).

Paso 2: intenta convertirlo a entero.

Paso 3: si falla, muestra un mensaje y repite.

Paso 4: cuando sea válido, continúa con el programa.

while True:
    texto = input("Dime tu edad (entero): ")
    try:
        edad = int(texto)
        break
    except ValueError:
        print("Eso no es un entero. Intenta de nuevo.")

print("Edad registrada:", edad)

Este patrón (bucle + try/except) es una forma robusta de validación cuando necesitas convertir tipos.

Validación de rango: límites razonables

Ahora añade una regla: la edad debe estar entre 0 y 120.

while True:
    texto = input("Dime tu edad (0 a 120): ")
    try:
        edad = int(texto)
    except ValueError:
        print("Eso no es un entero.")
        continue

    if 0 <= edad <= 120:
        break
    else:
        print("Edad fuera de rango.")

print("Edad válida:", edad)

Fíjate en la combinación: primero validas “se puede convertir”, luego validas “cumple el rango”.

Validación por opciones: menús simples

Cuando solo aceptas ciertas opciones (por ejemplo, S o N), valida contra un conjunto permitido.

while True:
    respuesta = input("¿Deseas continuar? (S/N): ").strip().upper()
    if respuesta in ("S", "N"):
        break
    print("Opción inválida. Escribe S o N.")

if respuesta == "S":
    print("Continuamos")
else:
    print("Nos detenemos")

Aquí se usan dos trucos prácticos: strip() para quitar espacios y upper() para aceptar s/n en cualquier combinación de mayúsculas/minúsculas.

Mini-retos (para aprender programando)

Reto 1: Control de acceso a un evento

Reglas:

  • Si la persona tiene 18 o más, puede entrar.
  • Si tiene 16 o 17, solo entra si trae autorización (S/N).
  • Si tiene menos de 16, no entra.

Pistas:

  • Valida que la edad sea un entero y esté en rango.
  • Solo pregunta por autorización si la edad está entre 16 y 17.
while True:
    texto = input("Edad (0 a 120): ")
    try:
        edad = int(texto)
    except ValueError:
        print("Edad inválida")
        continue
    if 0 <= edad <= 120:
        break
    print("Fuera de rango")

if edad >= 18:
    print("Acceso permitido")
elif 16 <= edad <= 17:
    while True:
        aut = input("¿Traes autorización? (S/N): ").strip().upper()
        if aut in ("S", "N"):
            break
        print("Responde S o N")

    if aut == "S":
        print("Acceso permitido")
    else:
        print("Acceso denegado")
else:
    print("Acceso denegado")

Reto 2: Calculadora de envío con validación

Reglas:

  • Pide el peso del paquete en kg (puede ser decimal).
  • Si el peso es menor o igual a 0, es inválido.
  • Tarifa: hasta 1 kg = 5; hasta 5 kg = 10; más de 5 kg = 20.

Pistas:

  • Usa float y valida que sea > 0.
  • Decide la tarifa con if/elif/else.
while True:
    texto = input("Peso en kg: ")
    try:
        peso = float(texto)
    except ValueError:
        print("Peso inválido")
        continue

    if peso > 0:
        break
    print("El peso debe ser mayor que 0")

if peso <= 1:
    tarifa = 5
elif peso <= 5:
    tarifa = 10
else:
    tarifa = 20

print("Tarifa:", tarifa)

Reto 3: Validador de nombre de usuario

Reglas:

  • Debe tener entre 3 y 12 caracteres.
  • No puede contener espacios.
  • Solo se permiten letras, números y guion bajo (_).

Pistas:

  • Usa len() para el tamaño.
  • Para caracteres permitidos, recorre el texto y valida cada carácter.
usuario = input("Usuario: ")

if not (3 <= len(usuario) <= 12):
    print("Longitud inválida")
elif " " in usuario:
    print("No se permiten espacios")
else:
    permitido = True
    for ch in usuario:
        if not (ch.isalnum() or ch == "_"):
            permitido = False
            break

    if permitido:
        print("Usuario válido")
    else:
        print("Caracteres inválidos")

Ahora responde el ejercicio sobre el contenido:

Al validar una edad ingresada por teclado, ¿cuál es el orden más robusto de comprobaciones para evitar errores y valores absurdos?

¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.

¡Tú error! Inténtalo de nuevo.

Lo más robusto es convertir primero (con try/except) para asegurar el tipo y, si la conversión funciona, validar el rango (por ejemplo, 0 a 120). Así evitas errores por entradas no numéricas y también valores fuera de límites.

Siguiente capítulo

Bucles para repetición, conteo e iteración controlada

Arrow Right Icon
Descarga la aplicación para obtener una certificación gratuita y escuchar cursos en segundo plano, incluso con la pantalla apagada.