Lectura 2: 🔮 La Reliquia del Fuego Eterno
En los días antiguos, cuando los reinos eran apenas aldeas y los hombres aún vivían con temor a la noche, se contaba la leyenda de un objeto imposible: la Llama Eterna.
Decían que estaba escondida en un templo construido en lo alto de las Montañas de Obsidiana, un lugar tan alto que las nubes se arremolinaban alrededor como muros de niebla. Nadie sabía quién había encendido esa llama por primera vez: algunos creían que había sido obra de los dioses, otros que era un regalo de los dragones primordiales. Lo único cierto era que aquella Llama tenía una característica única: no podía apagarse ni cambiar nunca.
El templo estaba custodiado por un linaje de guardianes que entregaban su vida para protegerla. Los ancianos del pueblo contaban que generaciones de reyes, hechiceros y aventureros habían intentado someterla.
-
Un rey intentó encerrar la Llama en un frasco de cristal para llevarla a su palacio, pero la Llama lo atravesó y regresó al altar, intacta.
-
Un mago trató de cubrirla con hielo mágico, pero el hielo se derretía antes de rozar siquiera sus llamas.
-
Un ladrón intentó dividirla en pedazos, pensando en venderla como joyas, pero la Llama no podía fragmentarse: seguía siendo una sola, indivisible e idéntica.
Pasaron los siglos, y la Llama seguía ardiendo, inmutable, mientras imperios nacían y caían a su alrededor.
El encuentro de Kael
Años después de su aventura en la Sala de los Cofres, el joven aventurero Kael escuchó los rumores sobre la reliquia. Movido por su curiosidad insaciable, emprendió el viaje hacia las Montañas de Obsidiana.
El camino fue arduo: atravesó desiertos donde la arena quemaba como brasas, escaló riscos donde el viento podía arrastrar a cualquiera al vacío, y cruzó ríos que parecían no tener fin. Cada paso lo acercaba a un destino del que no sabía si regresaría.
Finalmente llegó al templo. Era una construcción imponente, hecha de piedra negra, con columnas enormes y muros grabados con símbolos que narraban la historia de la Llama. En el centro, sobre un pedestal de mármol, estaba ella: la Llama Eterna.
Kael se acercó con cautela. El fuego iluminaba la sala con un resplandor cálido, pero lo más inquietante era que no parpadeaba. No titilaba como lo hacen las llamas comunes. Su forma era siempre la misma, su calor siempre constante.
Kael, recordando sus cofres mágicos, intentó experimentar:
-
Colocó su capa encima de la llama: no se quemó ni apagó, simplemente atravesó el fuego como si no existiera.
-
Intentó soplarla con fuerza: el aire no la movió ni un centímetro.
-
Puso otra antorcha cerca para mezclar su fuego: la antorcha ardió normalmente, pero la Llama Eterna siguió igual, sin alterarse ni un instante.
No importaba qué hiciera, la Llama siempre era la misma.
La revelación
Entonces comprendió.
Los cofres de la cueva eran como variables: lugares donde podía guardar y cambiar cosas según sus necesidades. Pero la Llama era diferente: era una constante, algo que jamás podía modificarse, que existía siempre en el mismo estado sin importar lo que sucediera alrededor.
Era como si el universo hubiera decretado:
-
Este fuego no cambiará jamás.
-
Este calor será eterno.
-
Este valor permanecerá intacto por siempre.
Kael cayó de rodillas, impresionado por la magnitud de lo que presenciaba. La Llama era un recordatorio de que, en el mundo, había cosas que podían transformarse y adaptarse… y otras que debían permanecer fijas, inalterables, para sostener todo lo demás.
Cuando salió del templo y miró el horizonte, el joven supo que había aprendido una lección más valiosa que cualquier tesoro: en la vida —y en la programación— hay cofres que se llenan y vacían, pero también existen reliquias eternas, valores que no cambian y que nos dan seguridad en medio del caos.
🔎 Reflexión y Preguntas
-
¿Qué representa la Llama Eterna en relación con la programación?
-
¿Por qué la Llama no se comporta como los cofres mágicos que Kael había encontrado antes?
-
¿Qué ventajas puede tener en un programa el contar con valores que nunca cambien?
-
Imagina que quisieras representar la Llama Eterna en pseudocódigo. ¿Cómo la declararías como constante?
-
En la historia, reyes, magos y ladrones intentaron alterar la Llama sin éxito. ¿Cómo se relaciona esto con lo que ocurre si un programador intenta modificar una constante?
Lectura 1: La aventura de los cofres misteriosos.
🌌 La Aventura de los Cofres Misteriosos
En lo profundo de un bosque antiguo, donde los árboles parecían murmurar secretos al viento y la neblina cubría el suelo como un velo, había una cueva conocida en las leyendas como La Sala de los Cofres.
Los ancianos del pueblo contaban que dentro de esa caverna se guardaban tesoros mágicos, pero nadie sabía con certeza de qué tipo, pues quienes entraban rara vez contaban su experiencia con detalle.
Movido por la curiosidad, el joven aventurero Kael decidió adentrarse en ella. Portaba una antorcha encendida y un pequeño diario donde anotaba sus hallazgos. El eco de sus pasos retumbaba en las paredes de piedra, y mientras avanzaba, empezó a distinguir filas de cofres antiguos alineados a lo largo de la cueva. Cada uno tenía un símbolo grabado en su tapa: un sol, una gota de agua, una luna, una llama…
Intrigado, Kael abrió el primero que tenía el grabado de un sol. Decidió llamarlo “cofreLuz”. Dentro colocó una pequeña piedra brillante que había encontrado en el camino. El cofre no hizo ningún ruido extraño ni mostró señales de encantamiento, simplemente guardó el objeto.
Unos metros más adelante, halló otro cofre con el símbolo de una ola. Lo llamó “cofreAgua” y depositó allí su cantimplora.
Satisfecho con su hallazgo, Kael exploró otras galerías de la cueva, pero cuando regresó horas después a revisar sus cofres, se sorprendió: los objetos no estaban fijos. Podía abrir el cofreLuz y, en vez de la piedra brillante, colocar una antorcha; podía sacar la cantimplora del cofreAgua y reemplazarla con una perla azul.
No importaba cuántas veces lo hiciera: los cofres no se rompían, no se consumían y siempre mantenían el mismo nombre. El símbolo servía como su identidad, pero el contenido podía cambiar cuantas veces fuera necesario.
Kael comenzó a experimentar. Guardó números escritos en trozos de pergamino, mensajes que quería recordar y hasta pequeños amuletos que recogía en el bosque. Cada vez que necesitaba algo, solo debía abrir el cofre correspondiente y allí estaría lo que había decidido almacenar.
Fue entonces cuando comprendió la magia de aquel lugar:
-
Cada cofre representaba un espacio con un nombre fijo.
-
El contenido podía variar con el tiempo, adaptándose a las necesidades de su aventura.
-
Nada se perdía, simplemente se reemplazaba con lo nuevo que decidiera guardar.
En realidad, aquellos cofres no eran simples objetos, sino una representación de algo aún más poderoso: eran variables mágicas. Recipientes capaces de almacenar, cambiar y conservar información para ser utilizada en el momento exacto en que se necesitara.
Cuando Kael abandonó la cueva y salió al bosque iluminado por la luna, sonrió con seguridad. No importaban los retos que vinieran, siempre tendría sus cofres —sus variables— listos para acompañarlo en cualquier aventura que el destino pusiera frente a él.
🔎 Reflexión y Preguntas
-
¿Qué representan los cofres con símbolos grabados en relación con la programación?
-
¿Por qué los cofres podían cambiar de contenido, pero no de nombre? ¿Qué enseñanza deja esto sobre las variables?
-
Imagina que Kael hubiera intentado guardar en un cofre dos cosas al mismo tiempo: ¿qué crees que pasaría? Relaciónalo con cómo funciona una variable en un programa.
-
¿Qué ventajas tenía Kael al poder reutilizar los cofres en su aventura? ¿Cómo se traduce eso al trabajo con variables en programación?
Las condicionales son una parte fundamental de la programación, ya que nos permiten controlar el flujo del programa basándonos en condiciones específicas. En Python, las condicionales se implementan mediante las palabras clave if, elif y else.
1. Estructura Básica de Condicionales
La sintaxis básica para una condicional en Python es:
if condicion:
# Bloque de código que se ejecuta si la condición es verdadera
Si la condición no se cumple, puedes usar else para ejecutar otro bloque de código:
if condicion:
# Código si la condición es verdadera
else:
# Código si la condición es falsa
También puedes encadenar varias condiciones usando elif (abreviatura de "else if"):
if condicion1:
# Código si condicion1 es verdadera
elif condicion2:
# Código si condicion1 es falsa pero condicion2 es verdadera
else:
# Código si todas las condiciones anteriores son falsas
2. Ejemplos de Condicionales
2.1. Verificar si un Número Es Positivo, Negativo o Cero
Este ejemplo verifica el signo de un número.
# Ingrese un número entero
numero = int(input("Ingrese un número: "))
if numero > 0:
print(f"{numero} es positivo.")
elif numero < 0:
print(f"{numero} es negativo.")
else:
print("El número es cero.")
Ejemplo de Interacción:
Ingrese un número: -5
-5 es negativo.
2.2. Determinar el Tipo de Calificación
Este ejemplo evalúa una calificación y muestra un mensaje según su valor.
# Ingrese una calificación entre 0 y 100
calificacion = int(input("Ingrese una calificación: "))
if calificacion >= 90:
print("Excelente trabajo.")
elif calificacion >= 80:
print("Muy bien.")
elif calificacion >= 70:
print("Bueno.")
elif calificacion >= 60:
print("Aprobado.")
else:
print("Reprobado. Necesita mejorar.")
Ejemplo de Interacción:
Ingrese una calificación: 85
Muy bien.
2.3. Verificar si un Número Es Par o Impar
Este ejemplo determina si un número es par o impar.
# Ingrese un número entero
numero = int(input("Ingrese un número: "))
if numero % 2 == 0:
print(f"{numero} es par.")
else:
print(f"{numero} es impar.")
Ejemplo de Interacción:
Ingrese un número: 7
7 es impar.
2.4. Validar Contraseña
Este ejemplo valida una contraseña ingresada por el usuario.
# Ingrese la contraseña
contrasena = input("Ingrese su contraseña: ")
if contrasena == "admin123":
print("Contraseña correcta. Acceso concedido.")
else:
print("Contraseña incorrecta. Acceso denegado.")
Ejemplo de Interacción:
Ingrese su contraseña: admin123
Contraseña correcta. Acceso concedido.
2.5. Determinar si un Año Es Bisiesto
Este ejemplo determina si un año es bisiesto basándose en las reglas del calendario gregoriano.
# Ingrese un año
anio = int(input("Ingrese un año: "))
if anio % 4 == 0:
if anio % 100 != 0 or anio % 400 == 0:
print(f"{anio} es un año bisiesto.")
else:
print(f"{anio} no es un año bisiesto.")
else:
print(f"{anio} no es un año bisiesto.")
Ejemplo de Interacción:
Ingrese un año: 2024
2024 es un año bisiesto.
3. Operadores Lógicos
Python admite los siguientes operadores lógicos para combinar condiciones:
and: DevuelveTruesi ambas condiciones son verdaderas.or: DevuelveTruesi al menos una de las condiciones es verdadera.not: Invierte el resultado de una condición.
Ejemplo de Operadores Lógicos
# Ingrese dos números enteros
num1 = int(input("Ingrese el primer número: "))
num2 = int(input("Ingrese el segundo número: "))
if num1 > 0 and num2 < 10:
print("Ambas condiciones son verdaderas.")
elif num1 > 0 or num2 < 10:
print("Al menos una condición es verdadera.")
else:
print("Ninguna condición es verdadera.")
Ejemplo de Interacción:
Ingrese el primer número: 5
Ingrese el segundo número: 15
num1 > 0 y num2 < 10: Falso.
Al menos una condición es verdadera: num1 > 0 es True.
Salida:
Al menos una condición es verdadera.
4. Condicionales Anidadas
Puedes anidar condicionales dentro de otras condicionales para manejar situaciones más complejas.
Ejemplo de Condicionales Anidadas
# Ingrese un número entero
numero = int(input("Ingrese un número: "))
if numero >= 0:
if numero == 0:
print("El número es cero.")
else:
print("El número es positivo.")
else:
print("El número es negativo.")
Ejemplo de Interacción:
Ingrese un número: -3
El número es negativo.
5. Ejercicios Prácticos
Para practicar, resuelve los siguientes ejercicios:
-
Número Mayor: Escribe un programa que pida al usuario dos números y muestre cuál de ellos es mayor.
-
Calificación Especial: Crea un programa que pregunte al usuario por su calificación y muestre "Excelente" si es 90 o más, "Bien" si está entre 80 y 89, y "Necesita Mejorar" si es menor a 80.
-
Validación de Edad: Escribe un programa que verifique si una persona es mayor de edad (18 años o más) y muestre un mensaje acordemente.
-
Determinar Tipo de Triángulo: Crea un programa que determine si un triángulo es equilátero, isósceles o escaleno basado en la longitud de sus lados.
-
Juego de Adivinanza: Implementa un juego donde el usuario debe adivinar un número secreto (por ejemplo, 42) y obtenga mensajes como "Demasiado alto", "Demasiado bajo" o "¡Correcto!".
6. Conclusión
Ahora deberías entender cómo funciona las condicionales en Python, incluyendo la sintaxis básica, el uso de if, elif, y else, así como cómo combinar condiciones con operadores lógicos. Practica regularmente con ejercicios y proyectos para fortalecer tus habilidades.
Los ciclos (o bucles) son una herramienta esencial en programación para ejecutar un bloque de código varias veces. En Python, los principales tipos de ciclos son for y while. Cada uno tiene sus propias aplicaciones y sintaxis.
1. Ciclo for
El ciclo for se utiliza para iterar sobre una secuencia (como una cadena, lista, tupla o diccionario). La sintaxis básica es:
for variable in secuencia:
# Bloque de código a ejecutar en cada iteración
Ejemplos de Ciclo for
1.1 Iterando sobre una Lista
Itera sobre los elementos de una lista y muestra cada uno.
# Lista de frutas
frutas = ["manzana", "banana", "cereza", "naranja"]
# Ciclo for para iterar sobre la lista
for fruta in frutas:
print(f"Fruta: {fruta}")
Salida:
Fruta: manzana
Fruta: banana
Fruta: cereza
Fruta: naranja
1.2 Iterando sobre una Cadena
Cada carácter de la cadena se considera un elemento.
# Cadena de texto
mensaje = "¡Hola, mundo!"
# Ciclo for para iterar sobre cada carácter
for caracter in mensaje:
print(caracter)
Salida:
!
H
o
l
a
,
m
u
n
d
o
!
1.3 Iterando con Índices y Valores
Para obtener tanto el índice como el valor, usa enumerate().
# Lista de números
numeros = [10, 20, 30, 40]
# Ciclo for con enumerate()
for indice, numero in enumerate(numeros):
print(f"Índice: {indice}, Valor: {numero}")
Salida:
Índice: 0, Valor: 10
Índice: 1, Valor: 20
Índice: 2, Valor: 30
Índice: 3, Valor: 40
1.4 Iterando sobre un Diccionario
Puedes iterar sobre las claves, valores o pares clave-valor de un diccionario.
# Diccionario de estudiantes y sus calificaciones
estudiantes = {
"Juan": 85,
"María": 92,
"Pedro": 78
}
# Ciclo for para iterar sobre las claves
print("Claves:")
for estudiante in estudiantes:
print(estudiante)
# Ciclo for para iterar sobre los valores
print("\nValores:")
for calificacion in estudiantes.values():
print(calificacion)
# Ciclo for para iterar sobre pares clave-valor
print("\nPares clave-valor:")
for estudiante, calificacion in estudiantes.items():
print(f"{estudiante}: {calificacion}")
Salida:
Claves:
Juan
María
Pedro
Valores:
85
92
78
Pares clave-valor:
Juan: 85
María: 92
Pedro: 78
2. Ciclo while
El ciclo while se ejecuta mientras una condición especificada sea verdadera. La sintaxis básica es:
while condicion:
# Bloque de código a ejecutar mientras la condición sea verdadera
Ejemplos de Ciclo while
2.1 Contador Simples
Incrementa un contador hasta que se cumpla una condición.
# Inicialización del contador
contador = 0
# Ciclo while que se ejecuta mientras contador sea menor que 5
while contador < 5:
print(f"Contador: {contador}")
contador += 1 # Incrementa el contador en cada iteración
Salida:
Contador: 0
Contador: 1
Contador: 2
Contador: 3
Contador: 4
2.2 Menú de Opciones
Crea un menú interactivo que se mantenga abierto hasta que el usuario decida salir.
# Variable para controlar el bucle
opcion = "0"
while opcion != "3":
print("\nMenú:")
print("1. Mostrar mensaje")
print("2. Sumar dos números")
print("3. Salir")
opcion = input("\nIngrese una opción: ")
if opcion == "1":
print("\n¡Hola, mundo!")
elif opcion == "2":
num1 = float(input("\nIngrese el primer número: "))
num2 = float(input("Ingrese el segundo número: "))
suma = num1 + num2
print(f"\nSuma: {suma}")
elif opcion == "3":
print("\nSaliendo del programa...")
else:
print("\nOpción no válida. Inténtelo de nuevo.")
Ejemplo de Interacción:
Menú:
1. Mostrar mensaje
2. Sumar dos números
3. Salir
Ingrese una opción: 2
Ingrese el primer número: 5
Ingrese el segundo número: 7
Suma: 12
Menú:
1. Mostrar mensaje
2. Sumar dos números
3. Salir
Ingrese una opción: 3
Saliendo del programa...
2.3 Validación de Entrada
Valida que el usuario ingrese un número entero positivo.
# Variable para almacenar la entrada del usuario
numero = None
while True:
try:
numero = int(input("Ingrese un número entero: "))
if numero > 0:
print(f"\n¡Gracias! Usted ingresó el número {numero}.")
break # Sale del bucle si se cumple la condición
else:
print("\nEl número debe ser positivo. Inténtelo de nuevo.")
except ValueError:
print("\nError: Ingrese un número entero válido.")
Ejemplo de Interacción:
Ingrese un número entero: -5
El número debe ser positivo. Inténtelo de nuevo.
Ingrese un número entero: 10
¡Gracias! Usted ingresó el número 10.
3. Ciclos Anidados
Puedes anidar ciclos for o while dentro de otros ciclos para realizar tareas más complejas, como iterar sobre matrices bidimensionales.
Ejemplo de Ciclo Anidado: Matriz Bidimensional
# Definición de una matriz 3x3
matriz = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# Ciclo exterior para iterar sobre las filas
for fila in matriz:
# Ciclo interior para iterar sobre los elementos de la fila
for elemento in fila:
print(f"Elemento: {elemento}")
Salida:
Elemento: 1
Elemento: 2
Elemento: 3
Elemento: 4
Elemento: 5
Elemento: 6
Elemento: 7
Elemento: 8
Elemento: 9
4. Ejercicios Prácticos
Para practicar, resuelve los siguientes ejercicios:
-
Suma de Números: Escribe un programa que pida al usuario números enteros hasta que ingrese
0, y muestre la suma total de los números ingresados. -
Números Pares e Impares: Crea un programa que use un ciclo
forpara imprimir todos los números pares del 1 al 20, y un ciclowhilepara imprimir todos los impares en el mismo rango. -
Validación de Contraseña: Implementa un sistema de login donde el usuario debe ingresar una contraseña correcta ("admin123") y se le den 3 intentos máximos.
-
Tabla de Multiplicar: Escribe un programa que muestre la tabla de multiplicar del número ingresado por el usuario, desde 1 hasta 10.
5. Conclusión
Ahora deberías tener una buena comprensión de cómo funciona los ciclos for y while en Python, así como su aplicación en diferentes contextos. Los ciclos son fundamentales para automatizar tareas repetitivas y manejar datos de manera eficiente. Practica regularmente con ejercicios y proyectos para fortalecer tus habilidades.
Las variables son una parte fundamental de cualquier lenguaje de programación, y en este tutorial, aprenderás cómo funciona su declaración, asignación y uso en Python.
1. Introducción a las Variables
Una variable es un nombre simbólico que se utiliza para almacenar un valor en memoria del ordenador. En Python, las variables son dinámicas, lo que significa que no necesitas declarar su tipo de dato explícitamente; el intérprete de Python determina el tipo de dato basado en el valor asignado.
Ejemplo:
mensaje = "¡Hola, mundo!"
print(mensaje) # Salida: ¡Hola, mundo!
2. Declaración y Asignación de Variables
En Python, declarar una variable es tan simple como asignarle un valor.
a. Declaración Simple:
edad = 25
print(edad) # Salida: 25
b. Múltiples Asignaciones: Puedes asignar valores a múltiples variables en una sola línea.
nombre, edad, ciudad = "Juan", 30, "Madrid"
print(nombre, edad, ciudad) # Salida: Juan 30 Madrid
c. Sobreasignación: Las variables pueden cambiar de valor durante la ejecución del programa.
x = 10
print(x) # Salida: 10
x = "Hola"
print(x) # Salida: Hola
3. Tipos de Datos de las Variables
Python tiene varios tipos de datos comunes:
a. Enteros (int): Para números enteros.
edad = 25
print(type(edad)) # <class 'int'>
b. Flotantes (float): Para números con decimales.
precio = 19.99
print(type(precio)) # <class 'float'>
c. Cadenas de Texto (str): Para texto.
mensaje = "¡Hola!"
print(type(mensaje)) # <class 'str'>
d. Booleanos (bool): Para valores verdadero o falso.
activo = True
print(type(activo)) # <class 'bool'>
e. NoneType: Representa un valor nulo.
valor_nulo = None
print(type(valor_nulo)) # <class 'NoneType'>
4. Alcance de las Variables (Scope)
Depende del contexto en el que se declare la variable.
a. Variable Local: Definida dentro de una función y solo es accesible dentro de ella.
def saludar():
mensaje = "¡Hola!"
print(mensaje)
saludar() # Salida: ¡Hola!
# print(mensaje) -> Error, 'mensaje' no está definido aquí
b. Variable Global: Definida fuera de cualquier función y es accesible en toda el programa.
mensaje = "¡Hola!"
def saludar():
print(mensaje)
saludar() # Salida: ¡Hola!
print(mensaje) # Salida: ¡Hola!
c. Variable Built-in: Son las variables que ya existen en Python, como True, False, None, etc.
5. Prácticas Recomendadas para Nombrar Variables
- Usa nombres descriptivos y significativos.
- Comienza con una letra o guión bajo
_. - No uses espacios ni caracteres especiales (excepto el guión bajo).
- Evita palabras clave reservadas de Python.
Ejemplos correctos:
edad_juan = 30
numero_telefono = "123456789"
6. Variables Especiales
Python tiene convenciones para nombres de variables:
- Guión Bajo al Inicio y Fin (
__variable__): Usado por Python para nombres especiales (no debes usarlos). - Un Guión Bajo al Inicio (_variable): Indica que es una variable privada.
- Dos Guiones Bajos al Inicio (__variable): Name mangling (modificado durante el tiempo de ejecución).
7. Constantes
Aunque Python no tiene constantes como tal, se suele utilizar mayúsculas para indicar variables que no deben cambiar su valor.
Ejemplo:
PI = 3.14159
GRAVEDAD = 9.8
8. Ejercicios Prácticos
- Crea una variable llamada
nombrey asígnale tu nombre. - Declara tres variables con tus edad, altura y peso.
- Escribe un programa que declare una variable global y una local.
- Define una constante para el número de días en un año.
- Experimenta con diferentes tipos de datos y su alcance.
9. Conclusión
Ahora deberías entender cómo declarar, asignar y usar variables en Python, así como sus tipos de dato, alcance y prácticas recomendadas. Practica regularmente para refinar tus habilidades. ¡Sigue adelante!