Condicionales
Aprende a controlar el flujo de ejecución de tus programas Python utilizando estructuras condicionales como if, elif y else para tomar decisiones basadas en condiciones.
Cristian Escalante
Última actualización: 19 de mayo de 2025
Condicionales en Python
Las estructuras condicionales son una parte fundamental de cualquier lenguaje de programación. Permiten que un programa tome decisiones y ejecute diferentes bloques de código dependiendo de si ciertas condiciones son verdaderas o falsas. En Python, las estructuras condicionales son claras y fáciles de leer, lo que facilita la escritura de código que responde a diferentes situaciones.
La declaración if
La estructura condicional más básica en Python es la declaración if
. Permite ejecutar un bloque de código solo si una condición específica es verdadera:
edad = 18
if edad >= 18:
print("Eres mayor de edad")
En este ejemplo, el mensaje "Eres mayor de edad" se mostrará solo si la variable edad
es mayor o igual a 18.
Sintaxis de la declaración if
La sintaxis general de una declaración if
es:
if condición:
# Bloque de código que se ejecuta si la condición es verdadera
Aspectos importantes:
- La condición debe evaluar a un valor booleano (
True
oFalse
) - Los dos puntos (
:
) al final de la línea de condición son obligatorios - El bloque de código que depende de la condición debe estar indentado (generalmente con 4 espacios)
- Python usa la indentación para definir bloques de código, no llaves o palabras clave como otros lenguajes
La declaración else
La declaración else
permite ejecutar un bloque de código alternativo cuando la condición del if
es falsa:
edad = 16
if edad >= 18:
print("Eres mayor de edad")
else:
print("Eres menor de edad")
En este ejemplo, como la edad es 16 (menor que 18), se mostrará el mensaje "Eres menor de edad".
Sintaxis de if-else
if condición:
# Código que se ejecuta si la condición es verdadera
else:
# Código que se ejecuta si la condición es falsa
La declaración elif
Cuando necesitas comprobar múltiples condiciones, puedes usar la declaración elif
(abreviatura de "else if"). Esto permite crear una cadena de condiciones que se evalúan en secuencia:
puntuación = 85
if puntuación >= 90:
print("Calificación: A")
elif puntuación >= 80:
print("Calificación: B")
elif puntuación >= 70:
print("Calificación: C")
elif puntuación >= 60:
print("Calificación: D")
else:
print("Calificación: F")
En este ejemplo, como la puntuación es 85, se mostrará "Calificación: B". Las condiciones se evalúan en orden, y una vez que se encuentra una condición verdadera, se ejecuta su bloque de código y se omiten las demás condiciones.
Sintaxis de if-elif-else
if primera_condición:
# Código si la primera condición es verdadera
elif segunda_condición:
# Código si la primera condición es falsa y la segunda es verdadera
elif tercera_condición:
# Código si las dos primeras condiciones son falsas y la tercera es verdadera
else:
# Código si todas las condiciones anteriores son falsas
Puedes tener tantas cláusulas elif
como necesites, pero solo un if
al principio y un else
opcional al final.
Condiciones anidadas
Es posible anidar declaraciones condicionales dentro de otras:
edad = 25
tiene_licencia = True
if edad >= 18:
print("Eres mayor de edad")
if tiene_licencia:
print("Puedes conducir")
else:
print("No puedes conducir sin licencia")
else:
print("Eres menor de edad, no puedes conducir")
En este ejemplo, como la edad es 25 y tiene licencia, se mostrarán los mensajes "Eres mayor de edad" y "Puedes conducir".
Expresiones condicionales compuestas
Puedes combinar múltiples condiciones utilizando operadores lógicos:
Operador and
El operador and
requiere que todas las condiciones sean verdaderas:
edad = 25
ingresos = 30000
if edad >= 18 and ingresos >= 25000:
print("Eres elegible para un préstamo")
else:
print("No eres elegible para un préstamo")
Operador or
El operador or
requiere que al menos una de las condiciones sea verdadera:
es_estudiante = True
es_jubilado = False
if es_estudiante or es_jubilado:
print("Tienes derecho a un descuento")
else:
print("No tienes derecho a un descuento")
Operador not
El operador not
invierte el valor de verdad de una condición:
tiene_deuda = False
if not tiene_deuda:
print("Puedes solicitar un nuevo préstamo")
else:
print("Debes pagar tu deuda actual antes de solicitar un nuevo préstamo")
Combinación de operadores lógicos
Puedes combinar varios operadores lógicos en una misma condición:
edad = 25
ingresos = 30000
tiene_deuda = False
if edad >= 18 and ingresos >= 25000 and not tiene_deuda:
print("Eres elegible para un préstamo")
else:
print("No eres elegible para un préstamo")
Expresión condicional (operador ternario)
Python ofrece una forma concisa de escribir condiciones simples en una sola línea, conocida como expresión condicional o operador ternario:
edad = 20
estado = "mayor de edad" if edad >= 18 else "menor de edad"
print(f"Eres {estado}")
La sintaxis es:
valor_si_verdadero if condición else valor_si_falso
Esta construcción es útil para asignaciones condicionales simples, pero para lógica más compleja es mejor usar las estructuras if-elif-else tradicionales.
Evaluación de valores como condiciones
En Python, cualquier valor puede ser evaluado en un contexto booleano. Los siguientes valores se consideran falsos (False
):
False
None
- Cero de cualquier tipo numérico:
0
,0.0
,0j
- Colecciones vacías:
""
,()
,[]
,{}
- Objetos que implementan
__bool__()
que devuelveFalse
o__len__()
que devuelve0
Todos los demás valores se consideran verdaderos (True
).
Esto permite escribir código más conciso:
nombre = ""
if nombre:
print(f"Hola, {nombre}")
else:
print("Por favor, introduce tu nombre")
En este ejemplo, como nombre
es una cadena vacía (que se evalúa como False
), se mostrará "Por favor, introduce tu nombre".
Patrones comunes con condicionales
Comprobación de existencia
usuario = {"nombre": "Ana", "edad": 28}
if "email" in usuario:
enviar_email(usuario["email"])
else:
print("No se puede enviar email, dirección no disponible")
Asignación condicional
# Forma tradicional
if edad >= 18:
mensaje = "Eres mayor de edad"
else:
mensaje = "Eres menor de edad"
# Forma concisa (operador ternario)
mensaje = "Eres mayor de edad" if edad >= 18 else "Eres menor de edad"
Ejecución condicional de funciones
def procesar_usuario(usuario):
if usuario.es_admin:
return mostrar_panel_admin(usuario)
elif usuario.es_moderador:
return mostrar_panel_moderador(usuario)
else:
return mostrar_panel_usuario(usuario)
Validación de entrada
entrada = input("Introduce un número: ")
if entrada.isdigit():
numero = int(entrada)
print(f"Has introducido el número {numero}")
else:
print("Error: Debes introducir un número válido")
Ejemplos prácticos
Ejemplo 1: Calculadora simple
def calculadora():
num1 = float(input("Introduce el primer número: "))
num2 = float(input("Introduce el segundo número: "))
operación = input("Introduce la operación (+, -, *, /): ")
if operación == "+":
resultado = num1 + num2
print(f"Resultado: {num1} + {num2} = {resultado}")
elif operación == "-":
resultado = num1 - num2
print(f"Resultado: {num1} - {num2} = {resultado}")
elif operación == "*":
resultado = num1 * num2
print(f"Resultado: {num1} * {num2} = {resultado}")
elif operación == "/":
if num2 == 0:
print("Error: No se puede dividir entre cero")
else:
resultado = num1 / num2
print(f"Resultado: {num1} / {num2} = {resultado}")
else:
print("Operación no válida")
calculadora()
Ejemplo 2: Verificación de contraseña
def verificar_contraseña(contraseña):
if len(contraseña) < 8:
return "La contraseña debe tener al menos 8 caracteres"
tiene_mayúscula = False
tiene_minúscula = False
tiene_número = False
for caracter in contraseña:
if caracter.isupper():
tiene_mayúscula = True
elif caracter.islower():
tiene_minúscula = True
elif caracter.isdigit():
tiene_número = True
if not tiene_mayúscula:
return "La contraseña debe contener al menos una letra mayúscula"
if not tiene_minúscula:
return "La contraseña debe contener al menos una letra minúscula"
if not tiene_número:
return "La contraseña debe contener al menos un número"
return "Contraseña válida"
# Prueba de la función
print(verificar_contraseña("abc123")) # Muy corta
print(verificar_contraseña("abcdefgh")) # Sin mayúsculas ni números
print(verificar_contraseña("ABCDEFGH")) # Sin minúsculas ni números
print(verificar_contraseña("12345678")) # Sin letras
print(verificar_contraseña("Abcdefg1")) # Válida
Ejemplo 3: Categorización de IMC
def calcular_imc(peso, altura):
imc = peso / (altura ** 2)
if imc < 18.5:
categoría = "Bajo peso"
elif imc < 25:
categoría = "Peso normal"
elif imc < 30:
categoría = "Sobrepeso"
else:
categoría = "Obesidad"
return f"Tu IMC es {imc:.1f}, categoría: {categoría}"
# Prueba de la función
print(calcular_imc(70, 1.75)) # IMC = 22.9, Peso normal
print(calcular_imc(50, 1.70)) # IMC = 17.3, Bajo peso
print(calcular_imc(90, 1.80)) # IMC = 27.8, Sobrepeso
print(calcular_imc(100, 1.70)) # IMC = 34.6, Obesidad
Ejemplo 4: Juego de adivinanza
import random
def juego_adivinanza():
número_secreto = random.randint(1, 100)
intentos = 0
máximo_intentos = 7
print("¡Bienvenido al juego de adivinanza!")
print(f"Estoy pensando en un número entre 1 y 100. Tienes {máximo_intentos} intentos.")
while intentos < máximo_intentos:
try:
intento = int(input("\nIntroduce tu intento: "))
intentos += 1
if intento < 1 or intento > 100:
print("Por favor, introduce un número entre 1 y 100.")
elif intento < número_secreto:
print(f"Demasiado bajo. Te quedan {máximo_intentos - intentos} intentos.")
elif intento > número_secreto:
print(f"Demasiado alto. Te quedan {máximo_intentos - intentos} intentos.")
else:
print(f"¡Felicidades! Has adivinado el número {número_secreto} en {intentos} intentos.")
return
except ValueError:
print("Por favor, introduce un número válido.")
print(f"\n¡Has agotado tus {máximo_intentos} intentos! El número secreto era {número_secreto}.")
juego_adivinanza()
Mejores prácticas
1. Mantén las condiciones simples
Si una condición es demasiado compleja, considera dividirla en partes más pequeñas o usar variables intermedias:
# Difícil de leer
if edad >= 18 and (es_estudiante or tiene_descuento_especial) and no_tiene_deuda:
# código
# Más legible
es_adulto = edad >= 18
tiene_beneficios = es_estudiante or tiene_descuento_especial
elegible = es_adulto and tiene_beneficios and no_tiene_deuda
if elegible:
# código
2. Evita condiciones anidadas profundas
Demasiadas condiciones anidadas hacen que el código sea difícil de seguir:
# Difícil de seguir
if condición1:
if condición2:
if condición3:
# código
else:
# código
else:
# código
else:
# código
# Mejor enfoque: usar guardas de retorno temprano
if not condición1:
return resultado1
if not condición2:
return resultado2
if not condición3:
return resultado3
# código principal aquí
3. Usa el orden adecuado en condiciones múltiples
Cuando uses múltiples condiciones con and
u or
, coloca primero las condiciones que son más probables de determinar el resultado final o que son más rápidas de evaluar:
# Mejor rendimiento si es_admin es raro
if es_admin or (tiene_permiso and está_activo):
# código
4. Aprovecha la evaluación en cortocircuito
Python evalúa las expresiones lógicas de izquierda a derecha y se detiene tan pronto como el resultado final se puede determinar:
# Si usuario es None, no se evaluará usuario.está_activo
if usuario and usuario.está_activo:
# código
5. Evita comparaciones explícitas con True y False
# No recomendado
if es_válido == True:
# código
# Recomendado
if es_válido:
# código
# No recomendado
if es_válido == False:
# código
# Recomendado
if not es_válido:
# código
Ejercicios prácticos
- Escribe un programa que determine si un año es bisiesto. Un año es bisiesto si es divisible por 4, excepto aquellos divisibles por 100 pero no por 400.
- Crea una función que clasifique un triángulo como equilátero, isósceles o escaleno según las longitudes de sus lados.
- Implementa un sistema de calificación que convierta puntuaciones numéricas (0-100) a letras (A, B, C, D, F) según las reglas estándar.
- Desarrolla un programa que determine si un número es primo.
- Crea un validador de direcciones de correo electrónico que verifique si una cadena tiene el formato básico de un email válido.
En la próxima lección, exploraremos las estructuras de bucles en Python, que nos permitirán repetir bloques de código de manera eficiente.