Aprende a guiar el flujo de tus programas tomando decisiones basadas en condiciones l贸gicas. 隆La base para crear c贸digo inteligente!
Imagina que est谩s programando un sistema para analizar datos de un experimento f铆sico. Quiz谩s necesites hacer algo diferente si la temperatura supera un umbral cr铆tico, o si la velocidad de una part铆cula es positiva o negativa. En la vida real, constantemente tomamos decisiones basadas en condiciones: "Si llueve, llevo paraguas", "Si la nota es mayor o igual a 3.0, apruebo".
En Python, las estructuras de control de decisi贸n (o condicionales) nos permiten exactamente eso: ejecutar ciertos bloques de c贸digo solo si se cumplen determinadas condiciones, y otros bloques si no se cumplen[cite: 390]. Esto le da a nuestros programas la capacidad de reaccionar de manera diferente a distintas situaciones, haci茅ndolos mucho m谩s inteligentes y 煤tiles.
Las condiciones se eval煤an generalmente como True (verdadero) o False (falso), utilizando los operadores de comparaci贸n (==, !=, <, >, <=, >=) y los operadores l贸gicos (and, or, not) que ya conoces.
馃幆 Objetivo Principal: Aprender谩s a usar las sentencias if, elif, y else para controlar el flujo de ejecuci贸n de tus programas en Python, 隆y tambi茅n daremos un vistazo a la nueva estructura match-case!
if: Decisiones Simples
La estructura if es la forma m谩s b谩sica de tomar una decisi贸n. Permite que un bloque de c贸digo se ejecute solo si una condici贸n espec铆fica es verdadera[cite: 393]. Si la condici贸n es falsa, el bloque de c贸digo indentado debajo del if simplemente se ignora y el programa contin煤a con las siguientes instrucciones.
if condicion_a_evaluar:
# Bloque de c贸digo que se ejecuta SI la condici贸n_a_evaluar es True
# 隆La indentaci贸n (4 espacios) es crucial aqu铆!
print("La condici贸n es verdadera.")
# Esta l铆nea se ejecuta siempre, despu茅s del bloque if (si la condici贸n fue True) o directamente (si fue False)
print("Fin de la evaluaci贸n del if.")
Recuerda: la condicion_a_evaluar debe ser una expresi贸n que resulte en True o False. Los dos puntos : al final de la l铆nea del if son obligatorios, y el bloque de c贸digo que depende del if debe estar indentado (generalmente con 4 espacios)[cite: 395, 396].
Visualizaci贸n del flujo de decisi贸n para una estructura condicional.
# Ejemplo 1: Matem谩ticas - 驴Es positivo?
numero = float(input("Ingresa un n煤mero: "))
if numero > 0:
print(f"El n煤mero {numero} es positivo.")
print("An谩lisis completado.")
# Ejemplo 2: F铆sica - 驴Objeto en reposo?
velocidad_mps = 0.0 # metros por segundo
if velocidad_mps == 0:
print("El objeto est谩 en reposo.")
# Ejemplo 3: Biolog铆a - 驴Muestra 谩cida?
ph_muestra = float(input("Ingresa el pH de la muestra: "))
if ph_muestra < 7.0:
print(f"Con pH {ph_muestra}, la muestra es 谩cida.")
馃И 隆Pru茅balo en Google Colab! Copia estos ejemplos, modif铆calos y observa c贸mo se comporta el flujo del programa seg煤n los valores que ingreses o definas.
if-else: Dos Caminos
A menudo, no solo queremos hacer algo si una condici贸n es verdadera, sino tambi茅n hacer algo diferente si es falsa. Para esto, usamos la estructura if-else[cite: 401, 402].
if condicion_a_evaluar:
# Bloque de c贸digo que se ejecuta SI la condici贸n es True
print("La condici贸n fue Verdadera.")
else:
# Bloque de c贸digo que se ejecuta SI la condici贸n es False
print("La condici贸n fue Falsa.")
print("Evaluaci贸n if-else completada.")
La palabra clave else y su bloque de c贸digo indentado solo se ejecutan si la condici贸n del if inicial es False.
if-else
Visualizaci贸n del flujo de decisi贸n para una estructura if-else.
# Ejemplo 1: Matem谩ticas - 驴Par o Impar?
numero = int(input("Ingresa un n煤mero entero: "))
if numero % 2 == 0:
print(f"El n煤mero {numero} es PAR.")
else:
print(f"El n煤mero {numero} es IMPAR.")
# Ejemplo 2: F铆sica - 驴Movimiento o Reposo Basado en Fuerza Neta?
fuerza_neta_N = float(input("Ingresa la fuerza neta sobre el objeto (N): "))
if fuerza_neta_N == 0:
print("Seg煤n la Primera Ley de Newton, el objeto mantiene su estado de movimiento (o reposo).")
else:
print("El objeto experimentar谩 una aceleraci贸n (Segunda Ley de Newton).")
# Ejemplo 3: Ciencias Sociales - 驴Mayor de edad para votar?
edad = int(input("Ingresa la edad de la persona: "))
EDAD_MINIMA_VOTAR = 18 # Constante
if edad >= EDAD_MINIMA_VOTAR:
print(f"Con {edad} a帽os, la persona S脥 puede votar.")
else:
print(f"Con {edad} a帽os, la persona NO puede votar a煤n.")
if-elif-else: M煤ltiples Caminos
驴Qu茅 pasa si tienes m谩s de dos posibilidades? Para esto usamos elif (abreviatura de "else if"). Te permite verificar m煤ltiples condiciones en secuencia[cite: 425]. Python eval煤a cada condici贸n de arriba hacia abajo. Tan pronto como encuentra una condici贸n True, ejecuta el bloque de c贸digo asociado y 隆se salta el resto de los elif y el else final! El bloque else al final es opcional y se ejecuta si ninguna de las condiciones anteriores fue verdadera.
if condicion_1:
# Bloque si condicion_1 es True
print("Se cumpli贸 la condici贸n 1.")
elif condicion_2:
# Bloque si condicion_1 es False Y condicion_2 es True
print("Se cumpli贸 la condici贸n 2.")
elif condicion_3:
# Bloque si condicion_1 y condicion_2 son False Y condicion_3 es True
print("Se cumpli贸 la condici贸n 3.")
# ... puedes tener tantos elif como necesites ...
else:
# Bloque opcional si NINGUNA de las condiciones anteriores fue True
print("Ninguna de las condiciones anteriores se cumpli贸.")
print("Evaluaci贸n if-elif-else completada.")
Visualizaci贸n del flujo de decisi贸n para condicionales consecutivos.
# Ejemplo 1: Matem谩ticas - Clasificar un n煤mero
numero = int(input("Ingresa un n煤mero entero: "))
if numero > 0:
print(f"{numero} es positivo.")
elif numero < 0:
print(f"{numero} es negativo.")
else:
print(f"El n煤mero es cero.")
# Ejemplo 2: F铆sica - Estados del Agua seg煤n Temperatura (掳C a 1 atm)
temperatura_agua_C = float(input("Ingresa la temperatura del agua en 掳C: "))
if temperatura_agua_C <= 0:
print("El agua estar铆a en estado S脫LIDO (hielo).")
elif temperatura_agua_C < 100:
print("El agua estar铆a en estado L脥QUIDO.")
else: # temperatura_agua_C >= 100
print("El agua estar铆a en estado GASEOSO (vapor).")
# Ejemplo 3: Biolog铆a - Clasificaci贸n de pH
ph_valor = float(input("Introduce el valor de pH de la soluci贸n: "))
if ph_valor < 0 or ph_valor > 14:
print("Valor de pH fuera del rango t铆pico (0-14).")
elif ph_valor < 7:
print(f"Con pH {ph_valor}, la soluci贸n es 脕CIDA.")
elif ph_valor == 7: # Es raro obtener exactamente 7.0 con floats
print(f"Con pH {ph_valor}, la soluci贸n es NEUTRA.")
else: # ph_valor > 7
print(f"Con pH {ph_valor}, la soluci贸n es B脕SICA (alcalina).")
Puedes colocar una estructura if (o if-else, if-elif-else) dentro de otra. Esto se llama anidamiento y permite tomar decisiones m谩s complejas basadas en m煤ltiples niveles de condiciones[cite: 405].
if condicion_exterior:
# C贸digo si condicion_exterior es True
print("Condici贸n exterior cumplida.")
if condicion_interior:
# C贸digo si condicion_exterior Y condicion_interior son True
print("Ambas condiciones (exterior e interior) cumplidas.")
else:
# C贸digo si condicion_exterior es True PERO condicion_interior es False
print("Condici贸n exterior cumplida, pero la interior no.")
else:
# C贸digo si condicion_exterior es False
print("Condici贸n exterior no cumplida.")
Visualizaci贸n del flujo de condicionales anidados.
# Simulaci贸n simplificada para clasificar una part铆cula
masa_kg = float(input("Masa de la part铆cula (kg, ej: 9.11e-31 para electr贸n): "))
carga_C = float(input("Carga de la part铆cula (C, ej: -1.602e-19 para electr贸n): "))
TOLERANCIA_CERO_MASA = 1e-35 # Para comparar con masa cero
if masa_kg > TOLERANCIA_CERO_MASA:
print("La part铆cula tiene masa.")
if carga_C == 0:
print("Es una part铆cula masiva neutra (ej: neutr贸n).")
elif carga_C > 0:
print("Es una part铆cula masiva con carga positiva (ej: prot贸n).")
else: # carga_C < 0
print("Es una part铆cula masiva con carga negativa (ej: electr贸n).")
else: # masa_kg es cercana a cero o cero
print("La part铆cula no tiene masa (o es muy peque帽a).")
if carga_C == 0:
print("Podr铆a ser una part铆cula sin masa y sin carga (ej: fot贸n, neutrino idealizado).")
else:
print("Una part铆cula sin masa con carga es te贸ricamente inusual en modelos est谩ndar.")
鈿狅笍 Legibilidad: Si tienes muchos niveles de anidamiento, tu c贸digo puede volverse dif铆cil de leer y seguir. A menudo, puedes simplificar condicionales anidados usando operadores l贸gicos (and, or) o reestructurando con elif.
match-case (Python 3.10+)
A partir de Python 3.10, se introdujo una nueva estructura de control llamada match-case, tambi茅n conocida como "coincidencia de patrones estructurales" (structural pattern matching)[cite: 392, 447]. Ofrece una forma m谩s declarativa y a menudo m谩s legible de manejar m煤ltiples condiciones, especialmente cuando se comparan valores contra diferentes patrones o estructuras de datos. Es similar a las sentencias switch o case de otros lenguajes, pero mucho m谩s potente.
match sujeto_a_evaluar:
case patron_1:
# C贸digo si el sujeto coincide con patron_1
print("Coincide con Patr贸n 1")
case patron_2 if condicion_adicional: # 'Guardia' opcional
# C贸digo si el sujeto coincide con patron_2 Y la condicion_adicional es True
print("Coincide con Patr贸n 2 y cumple la guarda")
case patron_3 | patron_4: # Patrones OR
# C贸digo si coincide con patron_3 O con patron_4
print("Coincide con Patr贸n 3 o 4")
case _: # Caso comod铆n (wildcard) - Opcional, se ejecuta si ning煤n caso anterior coincide
print("No coincide con ning煤n patr贸n espec铆fico.")
Visualizaci贸n del flujo de decisi贸n para una estructura match-case.
angulo_grados = float(input("Ingrese el 谩ngulo en grados (0-360): "))
match angulo_grados:
case 0:
tipo_angulo = "Nulo"
case angulo if 0 < angulo < 90:
tipo_angulo = "Agudo"
case 90.0: # Es importante ser preciso con flotantes si se compara igualdad
tipo_angulo = "Recto"
case angulo if 90 < angulo < 180:
tipo_angulo = "Obtuso"
case 180.0:
tipo_angulo = "Llano (o extendido)"
case angulo if 180 < angulo < 360:
tipo_angulo = "C贸ncavo (o reflejo)"
case 360.0:
tipo_angulo = "Completo (o perigonal)"
case _: # Caso comod铆n para valores fuera de rango o no especificados
tipo_angulo = "Valor no clasificado o fuera de rango (0-360)."
print(f"El 谩ngulo de {angulo_grados}掳 es de tipo: {tipo_angulo}")
馃啎 Nota sobre Versi贸n: match-case est谩 disponible a partir de Python 3.10. Si est谩s usando una versi贸n anterior, deber谩s usar cadenas de if-elif-else. Google Colab usualmente tiene versiones recientes de Python, 隆as铆 que puedes probarlo!
Python ofrece una forma concisa de escribir una sentencia if-else simple en una sola l铆nea, conocida como expresi贸n condicional o operador ternario.
valor_si_true if condicion else valor_si_false
La condicion se eval煤a primero. Si es True, toda la expresi贸n devuelve valor_si_true. Si es False, devuelve valor_si_false.
# Ejemplo 1: Matem谩ticas - Valor absoluto simple
numero = -10
valor_abs = numero if numero >= 0 else -numero
print(f"El valor absoluto de {numero} es {valor_abs}") # Salida: 10
# Ejemplo 2: F铆sica - Estado de un interruptor
voltaje_aplicado_V = 5.0
estado_interruptor = "ENCENDIDO" if voltaje_aplicado_V > 0 else "APAGADO"
print(f"El interruptor est谩: {estado_interruptor}") # Salida: ENCENDIDO
# Ejemplo 3: Biolog铆a - Clasificaci贸n simple de temperatura corporal
temperatura_paciente_C = 37.5
estado_fiebre = "Fiebre" if temperatura_paciente_C > 37.2 else "Normal"
print(f"Estado del paciente (temperatura): {estado_fiebre}")
鈿栵笍 Uso con Moderaci贸n: Las expresiones condicionales son geniales para asignaciones simples y hacer el c贸digo m谩s corto. Sin embargo, si la l贸gica es compleja o los bloques valor_si_true / valor_si_false son largos, una estructura if-else tradicional es m谩s legible.
隆Felicidades! Has aprendido a usar las estructuras de control condicionales if, elif, y else, que son fundamentales para que tus programas tomen decisiones y reaccionen de forma inteligente a diferentes situaciones. Tambi茅n has tenido un primer vistazo a la potente estructura match-case y a las concisas expresiones condicionales.
Estas herramientas te permitir谩n:
馃殌 Pr贸ximos Pasos: Con el poder de tomar decisiones, el siguiente gran paso es aprender a repetir acciones. 隆Prep谩rate para los bucles (for y while) en la pr贸xima lecci贸n! Combinando condicionales y bucles, podr谩s resolver una incre铆ble variedad de problemas.
馃И Desaf铆o Cient铆fico:
Intenta escribir un programa en Google Colab que simule la clasificaci贸n de un tipo de roca (脥gnea, Sedimentaria, Metam贸rfica) basado en algunas de sus caracter铆sticas (ej. `tiene_cristales_visibles: bool`, `tiene_capas: bool`, `proviene_de_enfriamiento_magma: bool`). 隆Usa if-elif-else!