19. Condicionales y Ciclos For: Decisiones y Repeticiones en la Historia#
“La historia no es el estudio del pasado; es el estudio del cambio. La historia nos enseña qué cosas cambian y cómo cambian, y nos ayuda a entender qué podría permanecer igual y qué podría cambiar en el futuro.”
—Yuval Noah Harari, 21 lecciones para el siglo XXI (2018)
19.1. 🎯 Objetivos de Aprendizaje#
Al finalizar este capítulo, serás capaz de:
Usar estructuras condicionales (
if,elif,else) para tomar decisionesAplicar operadores de comparación y lógicos
Crear ciclos
forpara iterar sobre datos históricosUsar la función
range()para generar secuenciasCombinar condicionales y ciclos en programas más complejos
⏱️ Tiempo estimado
90 minutos de lectura y práctica
19.2. Estructuras Condicionales#
Las estructuras condicionales permiten que el programa tome decisiones basadas en condiciones, igual que los historiadores evalúan evidencias antes de llegar a conclusiones.
🏛️ Analogía Histórica
Imagina que eres un historiador evaluando si un evento es anterior o posterior a cierta fecha. Si el año es menor a 1810, entonces es período colonial; si es igual a 1810, es el inicio de la Independencia; de lo contrario, es período republicano.
19.2.1. La estructura if#
# Clasificar un año histórico
anio = 1818
if anio >= 1810:
print(f"El año {anio} pertenece al período de Independencia o posterior")
El año 1818 pertenece al período de Independencia o posterior
19.2.2. La estructura if-else#
# ¿Es período colonial o independiente?
anio = 1750
if anio < 1810:
print(f"El año {anio} pertenece al período Colonial")
else:
print(f"El año {anio} pertenece al período de Independencia o posterior")
El año 1750 pertenece al período Colonial
19.2.3. La estructura if-elif-else#
Para múltiples condiciones usamos elif (abreviatura de “else if”):
# Clasificar períodos de la historia de Chile
anio = 1830
if anio < 1541:
periodo = "Precolombino"
elif anio < 1810:
periodo = "Colonial"
elif anio < 1818:
periodo = "Patria Vieja / Reconquista"
elif anio < 1830:
periodo = "Patria Nueva / Organización"
elif anio < 1891:
periodo = "República Conservadora y Liberal"
else:
periodo = "Chile Contemporáneo"
print(f"El año {anio} corresponde al período: {periodo}")
El año 1830 corresponde al período: República Conservadora y Liberal
19.3. Operadores de Comparación#
Operador |
Significado |
Ejemplo |
Resultado |
|---|---|---|---|
|
Igual a |
|
|
|
Diferente de |
|
|
|
Menor que |
|
|
|
Mayor que |
|
|
|
Menor o igual |
|
|
|
Mayor o igual |
|
|
Tabla 17.1: Operadores de comparación en Python
# Ejemplos con contexto histórico
anio_rancagua = 1814 # Desastre de Rancagua
anio_maipu = 1818 # Batalla de Maipú
print(f"¿Rancagua fue antes que Maipú?: {anio_rancagua < anio_maipu}")
print(f"¿Son el mismo año?: {anio_rancagua == anio_maipu}")
print(f"¿Rancagua fue en 1814?: {anio_rancagua == 1814}")
¿Rancagua fue antes que Maipú?: True
¿Son el mismo año?: False
¿Rancagua fue en 1814?: True
19.4. Operadores Lógicos#
Operador |
Significado |
Ejemplo |
|---|---|---|
|
Y (ambas verdaderas) |
|
|
O (al menos una verdadera) |
|
|
Negación |
|
Tabla 17.2: Operadores lógicos en Python
# Verificar si un año está en el siglo XIX
anio = 1879 # Guerra del Pacífico
# Un año está en el siglo XIX si es >= 1801 Y <= 1900
en_siglo_xix = anio >= 1801 and anio <= 1900
print(f"¿{anio} está en el siglo XIX?: {en_siglo_xix}")
# ¿Es un año de guerra importante?
es_guerra_pacifico = anio >= 1879 and anio <= 1884
es_guerra_civil = anio == 1891
en_conflicto = es_guerra_pacifico or es_guerra_civil
print(f"¿Chile estaba en conflicto en {anio}?: {en_conflicto}")
¿1879 está en el siglo XIX?: True
¿Chile estaba en conflicto en 1879?: True
19.4.1. Ejemplo: Clasificador de Edades Históricas#
# Programa que clasifica un año en su "Edad" histórica
anio = int(input("Ingresa un año de la historia: "))
if anio < -3000:
edad = "Prehistoria"
elif anio < 476:
edad = "Edad Antigua"
elif anio < 1453:
edad = "Edad Media"
elif anio < 1789:
edad = "Edad Moderna"
else:
edad = "Edad Contemporánea"
print(f"El año {anio} pertenece a la {edad}")
19.5. El Ciclo for#
El ciclo for permite iterar (repetir) sobre una secuencia de elementos. Es como revisar uno por uno los documentos de un archivo histórico.
📋 Sintaxis básica
for elemento in secuencia:
# código a repetir
# Iterar sobre una lista de estaciones del año
estaciones = ["Primavera", "Verano", "Otoño", "Invierno"]
print("Las estaciones del año son:")
for estacion in estaciones:
print(f" - {estacion}")
# Iterar sobre presidentes chilenos del siglo XX
presidentes = [
("Arturo Alessandri", 1920),
("Carlos Ibáñez", 1927),
("Pedro Aguirre Cerda", 1938),
("Salvador Allende", 1970)
]
print("Algunos presidentes del siglo XX:")
for nombre, anio in presidentes:
print(f" {nombre} asumió en {anio}")
19.5.1. La función range()#
La función range() genera secuencias de números:
Uso |
Resultado |
|---|---|
|
0, 1, 2, 3, 4 |
|
2, 3, 4, 5 |
|
0, 2, 4, 6, 8 |
Tabla 17.3: Usos de la función range()
# Contar del 1 al 5
print("Contando del 1 al 5:")
for i in range(1, 6):
print(i)
print("\nDécadas del siglo XX (solo cada 10 años):")
for anio in range(1900, 2001, 10):
print(f"Década de {anio}")
19.5.2. Iterar sobre strings#
# Contar letras en "CHILE"
palabra = "CHILE"
print(f"Letras en '{palabra}':")
for letra in palabra:
print(f" {letra}")
print(f"\nTotal de letras: {len(palabra)}")
19.5.3. Combinando for con condicionales#
# Filtrar años de guerra en Chile
anios = [1814, 1817, 1818, 1836, 1879, 1880, 1891, 1920, 1973]
print("Años de conflictos importantes:")
for anio in anios:
# Guerra de Independencia (1810-1826)
if 1810 <= anio <= 1826:
print(f" {anio}: Guerra de Independencia")
# Guerra del Pacífico (1879-1884)
elif 1879 <= anio <= 1884:
print(f" {anio}: Guerra del Pacífico")
# Guerra Civil (1891)
elif anio == 1891:
print(f" {anio}: Guerra Civil")
19.5.4. Ciclos anidados: Listas dentro de listas#
# Series de TV organizadas por género
series_por_genero = [
["Los Simpson", "Friends", "The Office"], # Comedia
["Game of Thrones", "Breaking Bad", "The Wire"] # Drama
]
generos = ["Comedia", "Drama"]
for i, genero in enumerate(generos):
print(f"\n{genero}:")
for serie in series_por_genero[i]:
print(f" - {serie} ({len(serie)} caracteres)")
19.6. 🏛️ Ejemplo Histórico: Análisis de Batallas de la Independencia#
# Base de datos de batallas de la Independencia de Chile
batallas = [
{"nombre": "Rancagua", "anio": 1814, "resultado": "Derrota"},
{"nombre": "Chacabuco", "anio": 1817, "resultado": "Victoria"},
{"nombre": "Cancha Rayada", "anio": 1818, "resultado": "Derrota"},
{"nombre": "Maipú", "anio": 1818, "resultado": "Victoria"}
]
# Análisis
victorias = 0
derrotas = 0
print("="*50)
print("BATALLAS DE LA INDEPENDENCIA DE CHILE")
print("="*50)
for batalla in batallas:
# Emoji según resultado
emoji = "✅" if batalla["resultado"] == "Victoria" else "❌"
print(f"{emoji} {batalla['nombre']} ({batalla['anio']}): {batalla['resultado']}")
# Contar resultados
if batalla["resultado"] == "Victoria":
victorias += 1
else:
derrotas += 1
print("="*50)
print(f"RESUMEN: {victorias} victorias, {derrotas} derrotas")
print(f"Tasa de éxito: {(victorias / len(batallas)) * 100:.1f}%")
19.7. 📝 Actividad de Cierre#
19.7.1. Ejercicio 1: Clasificador de Siglos#
Crea un programa que pida un año al usuario y determine a qué siglo pertenece.
# Tu código aquí
# Pista: El siglo XIX va de 1801 a 1900
19.7.2. Ejercicio 2: Contador de Vocales#
Cuenta cuántas vocales tiene el nombre “BERNARDO O’HIGGINS” usando un ciclo for.
# Tu código aquí
nombre = "BERNARDO O'HIGGINS"
vocales = "AEIOUaeiou"
19.7.3. Ejercicio 3: Años Bisiestos Históricos#
Imprime todos los años bisiestos entre 1800 y 1900 (cada 4 años, excepto los que son divisibles por 100 pero no por 400).
# Tu código aquí
# Un año es bisiesto si:
# - Es divisible por 4 Y
# - NO es divisible por 100, O es divisible por 400
19.8. 📚 Resumen del Capítulo#
Concepto |
Descripción |
|---|---|
|
Ejecuta código si la condición es verdadera |
|
Condición alternativa |
|
Se ejecuta si ninguna condición anterior fue verdadera |
|
Operadores de comparación |
|
Operadores lógicos |
|
Itera sobre cada elemento |
|
Genera secuencia de 0 a n-1 |
Tabla 17.4: Resumen de conceptos del capítulo
19.9. 📖 Referencias#
Python Software Foundation. (2024). Control Flow. https://docs.python.org/3/tutorial/controlflow.html
Memoria Chilena. (2024). Cronología de Chile. http://www.memoriachilena.gob.cl/
Villalobos, S. (2006). Historia de Chile. Editorial Universitaria.