17. Variables y Tipos de Datos#
“El dinero es el más universal y más eficiente sistema de confianza mutua que jamás se haya inventado. Lo que creó esta confianza fue una red muy compleja de relaciones políticas, sociales e intelectuales.”
—Yuval Noah Harari, De animales a dioses (2014)
Información del Capítulo
Tiempo estimado: 80 minutos
Nivel: Introductorio
Prerrequisitos: Capítulo 14 - Introducción a Python
17.1. Objetivos de Aprendizaje#
Al finalizar este capítulo, serás capaz de:
Comprender qué son las variables y cómo funcionan como “archivos digitales”
Aplicar las reglas correctas para nombrar variables en Python
Distinguir y utilizar los cuatro tipos de datos básicos:
int,float,stryboolConvertir datos entre diferentes tipos usando funciones de conversión
Capturar información del usuario con la función
input()
17.2. ¿Qué son las Variables?#
Imagina que eres un archivero en la Biblioteca Nacional de Chile. Tu trabajo es organizar documentos históricos en carpetas etiquetadas. Cada carpeta tiene:
Una etiqueta (nombre) que identifica su contenido
Un documento (valor) guardado dentro
En Python, las variables funcionan exactamente así: son contenedores con nombre que almacenan datos.
Definición formal
Una variable es un espacio en la memoria del computador que tiene un nombre y almacena un valor. Este valor puede cambiar durante la ejecución del programa.
17.2.1. Creando variables: el operador de asignación#
Para crear una variable usamos el operador de asignación (=). Este operador “guarda” el valor de la derecha en la variable de la izquierda.
# Creamos variables con datos históricos de Chile
ano_primera_junta = 1810
nombre_libertador = "Bernardo O'Higgins"
poblacion_chile_1810 = 800000 # aproximadamente
# Mostramos los valores
print("Año de la Primera Junta:", ano_primera_junta)
print("Nombre del Libertador:", nombre_libertador)
print("Población aproximada en 1810:", poblacion_chile_1810)
¡Importante! El signo = no significa “igual”
En matemáticas, = significa igualdad (5 = 5). En Python, = significa asignación: “guarda este valor en esta variable”.
Por ejemplo:
x = 5 # Guarda 5 en x
x = x + 1 # Toma el valor de x (5), súmale 1, y guarda el resultado (6) en x
# Demostración: las variables pueden cambiar de valor
ano_evento = 1810
print("Primera Junta de Gobierno:", ano_evento)
ano_evento = 1814 # Cambiamos el valor
print("Desastre de Rancagua:", ano_evento)
ano_evento = 1818 # Cambiamos nuevamente
print("Declaración de Independencia:", ano_evento)
17.3. Reglas para Nombrar Variables#
Así como un archivero debe seguir normas para etiquetar carpetas, Python tiene reglas estrictas para nombrar variables.
Tabla 15.1: Reglas para nombres de variables
Regla |
Ejemplo válido |
Ejemplo inválido |
Razón |
|---|---|---|---|
Solo letras, números y guion bajo |
|
|
No usar guión ni ñ |
No comenzar con número |
|
|
Error de sintaxis |
Sin espacios |
|
|
Error de sintaxis |
No usar palabras reservadas |
|
|
|
Distingue mayúsculas/minúsculas |
|
- |
Son variables diferentes |
17.3.1. Convención snake_case#
En Python, la convención más usada es snake_case: palabras en minúsculas separadas por guiones bajos.
Buenas prácticas
✅
fecha_nacimiento✅
ano_independencia✅
poblacion_total❌
FechaNacimiento(esto es CamelCase, usado en otros lenguajes)❌
FECHA_NACIMIENTO(esto es para constantes)
# Ejemplos de buenos nombres de variables con contexto histórico
presidente_actual = "Gabriel Boric"
ano_eleccion = 2021
numero_presidentes_chile = 34 # hasta 2024
es_republica = True
# Ejemplo de nombres descriptivos para una batalla
nombre_batalla = "Batalla de Maipú"
fecha_batalla = "5 de abril de 1818"
soldados_patriotas = 5000 # aproximado
soldados_realistas = 4500 # aproximado
victoria_patriota = True
17.4. Tipos de Datos Básicos#
En un archivo histórico, no todos los documentos son iguales: hay actas, fotografías, mapas, registros numéricos. De manera similar, Python maneja diferentes tipos de datos.
Los cuatro tipos básicos
int(entero): Números sin decimales → años, cantidades, poblacionesfloat(flotante): Números con decimales → porcentajes, coordenadasstr(string): Texto → nombres, documentos, descripcionesbool(booleano): Verdadero/Falso → verificación de hechos
17.4.1. Enteros (int)#
Los enteros son números sin parte decimal. Son ideales para representar años, poblaciones, cantidades exactas.
# Enteros en contexto histórico chileno
ano_fundacion_santiago = 1541
poblacion_chile_2024 = 19500000 # aproximadamente 19.5 millones
numero_regiones = 16
dias_guerra_pacifico = 1825 # duración aproximada en días (1879-1884)
print("Tipo de ano_fundacion_santiago:", type(ano_fundacion_santiago))
print("Tipo de poblacion_chile_2024:", type(poblacion_chile_2024))
17.4.2. Flotantes (float)#
Los flotantes son números con parte decimal. Útiles para estadísticas, porcentajes, coordenadas geográficas.
# Flotantes en contexto histórico
latitud_santiago = -33.4489 # coordenada geográfica
longitud_santiago = -70.6693
porcentaje_alfabetizacion_1900 = 43.8 # porcentaje aproximado
superficie_chile_km2 = 756102.4 # km²
print("Tipo de latitud_santiago:", type(latitud_santiago))
print(f"Santiago se ubica en latitud {latitud_santiago}, longitud {longitud_santiago}")
17.4.3. Cadenas de texto (str)#
Las cadenas (strings) almacenan texto. Se escriben entre comillas simples '...' o dobles "...".
# Strings con información histórica
nombre_heroe = "Manuel Rodríguez"
apodo = 'El Húsar de la Muerte'
cita_historica = "La Patria está en peligro" # Atribuida a José Miguel Carrera
# Strings multilínea con triple comilla
descripcion = """Manuel Rodríguez Erdoíza fue un abogado y guerrillero chileno,
considerado uno de los principales gestores de la independencia de Chile.
Nació en Santiago en 1785 y murió en Tiltil en 1818."""
print("Tipo de nombre_heroe:", type(nombre_heroe))
print("\nDescripción:")
print(descripcion)
17.4.4. Booleanos (bool)#
Los booleanos solo pueden tener dos valores: True (verdadero) o False (falso). Son esenciales para verificar hechos históricos.
# Booleanos para verificar hechos históricos
chile_independiente_1817 = False # La independencia formal fue en 1818
chile_independiente_1818 = True
o_higgins_primer_presidente = False # Fue Director Supremo, no presidente
santiago_es_capital = True
print("¿Chile era independiente en 1817?", chile_independiente_1817)
print("¿Chile era independiente en 1818?", chile_independiente_1818)
print("Tipo de dato:", type(chile_independiente_1818))
Tabla 15.2: Resumen de tipos de datos con ejemplos históricos
Tipo |
Símbolo |
Ejemplo |
Uso en Historia |
|---|---|---|---|
Entero |
|
|
Años, poblaciones, cantidades |
Flotante |
|
|
Coordenadas, porcentajes, estadísticas |
Cadena |
|
|
Nombres, documentos, descripciones |
Booleano |
|
|
Verificación de hechos |
17.5. Verificar y Convertir Tipos#
17.5.1. La función type()#
Podemos verificar el tipo de cualquier variable usando type():
# Verificando tipos de datos
dato1 = 1541
dato2 = 19.5
dato3 = "Pedro de Valdivia"
dato4 = True
print(f"'{dato1}' es de tipo: {type(dato1)}")
print(f"'{dato2}' es de tipo: {type(dato2)}")
print(f"'{dato3}' es de tipo: {type(dato3)}")
print(f"'{dato4}' es de tipo: {type(dato4)}")
17.5.2. Conversión de tipos (casting)#
A veces necesitamos convertir un tipo de dato en otro. Python ofrece funciones para esto:
Tabla 15.3: Funciones de conversión de tipos
Función |
Convierte a |
Ejemplo |
|---|---|---|
|
Entero |
|
|
Flotante |
|
|
Cadena |
|
|
Booleano |
|
# Conversiones útiles para datos históricos
# De string a entero (cuando leemos años de un archivo de texto)
ano_texto = "1818"
ano_numero = int(ano_texto)
print(f"Año como texto: '{ano_texto}' → Año como número: {ano_numero}")
print(f"Puedo calcular: 2024 - {ano_numero} = {2024 - ano_numero} años")
# De número a string (para formatear salidas)
poblacion = 800000
mensaje = "La población de Chile en 1810 era de " + str(poblacion) + " habitantes"
print(mensaje)
# Conversión a booleano: reglas importantes
# - Cero (0) y cadena vacía ("") se convierten en False
# - Cualquier otro valor se convierte en True
print("Conversión a booleano:")
print(f"bool(0) = {bool(0)}")
print(f"bool(1) = {bool(1)}")
print(f"bool(-5) = {bool(-5)}")
print(f"bool('') = {bool('')}")
print(f"bool('Hola') = {bool('Hola')}")
¡Cuidado con las conversiones!
No todas las conversiones son posibles. Intentar convertir texto no numérico a número produce un error:
int("Chile") # ❌ ValueError: invalid literal for int()
int("18.5") # ❌ ValueError: no puede convertir decimal en string a int
float("18.5") # ✓ Esto sí funciona: 18.5
17.6. Entrada de Datos: la función input()#
La función input() permite que el usuario ingrese datos desde el teclado. Es como un formulario que el usuario completa.
Importante
input() siempre devuelve un string, incluso si el usuario escribe un número. Debes convertirlo si necesitas hacer cálculos.
# Ejemplo básico de input
nombre = input("¿Cuál es tu nombre? ")
print(f"¡Hola, {nombre}! Bienvenido al estudio de la historia de Chile.")
# Input con conversión para cálculos históricos
ano_nacimiento = input("¿En qué año naciste? ")
ano_nacimiento = int(ano_nacimiento) # Convertimos a entero
# Calculamos cuántos años tenías en fechas históricas importantes
ano_bicentenario = 2010 # Bicentenario de Chile
if ano_nacimiento <= ano_bicentenario:
edad_bicentenario = ano_bicentenario - ano_nacimiento
print(f"En el Bicentenario de Chile (2010) tenías {edad_bicentenario} años")
else:
print("Naciste después del Bicentenario de Chile")
17.6.1. Manejo de errores en input()#
¿Qué pasa si el usuario escribe texto cuando esperamos un número? El programa falla. Podemos prevenir esto:
# Forma segura de pedir un número
try:
ano = input("Ingresa un año histórico: ")
ano = int(ano)
# Si llegamos aquí, la conversión fue exitosa
if ano < 1810:
print(f"El año {ano} es anterior a la Independencia de Chile")
elif ano < 1818:
print(f"El año {ano} corresponde al período de la Patria Vieja o Reconquista")
else:
print(f"El año {ano} es posterior a la Declaración de Independencia")
except ValueError:
print("Error: Debes ingresar un número válido")
17.7. Ejemplo Integrador: Ficha Biográfica Interactiva#
Combinemos todo lo aprendido para crear una ficha biográfica de un personaje histórico:
# ═══════════════════════════════════════════════════════════════
# SISTEMA DE FICHAS BIOGRÁFICAS HISTÓRICAS
# ═══════════════════════════════════════════════════════════════
print("╔" + "═"*50 + "╗")
print("║" + " CREACIÓN DE FICHA BIOGRÁFICA HISTÓRICA ".center(50) + "║")
print("╚" + "═"*50 + "╝")
print()
# Recopilamos datos (en un programa real, estos vendrían de input())
# Aquí usamos datos de ejemplo para José Miguel Carrera
nombre_completo = "José Miguel Carrera Verdugo"
ano_nacimiento = 1785
ano_fallecimiento = 1821
lugar_nacimiento = "Santiago de Chile"
ocupacion = "Militar y político"
cargo_principal = "Presidente de la Junta de Gobierno"
periodo_cargo = "1811-1813"
es_procer = True
# Cálculos
edad_fallecimiento = ano_fallecimiento - ano_nacimiento
anos_desde_muerte = 2025 - ano_fallecimiento
# Generamos la ficha
print("┌" + "─"*50 + "┐")
print("│" + " FICHA BIOGRÁFICA ".center(50) + "│")
print("├" + "─"*50 + "┤")
print(f"│ Nombre: {nombre_completo.ljust(40)} │")
print(f"│ Nacimiento: {str(ano_nacimiento).ljust(37)} │")
print(f"│ Fallecimiento: {str(ano_fallecimiento).ljust(34)} │")
print(f"│ Edad al morir: {str(edad_fallecimiento).ljust(34)} │")
print(f"│ Lugar de nacimiento: {lugar_nacimiento.ljust(28)} │")
print(f"│ Ocupación: {ocupacion.ljust(38)} │")
print(f"│ Cargo principal: {cargo_principal.ljust(31)} │")
print(f"│ Período: {periodo_cargo.ljust(40)} │")
print(f"│ ¿Es prócer?: {'Sí' if es_procer else 'No'.ljust(36)} │")
print("├" + "─"*50 + "┤")
print(f"│ Han pasado {anos_desde_muerte} años desde su muerte.{' '*13} │")
print("└" + "─"*50 + "┘")
17.8. Actividad de Cierre#
Instrucciones
Resuelve los siguientes ejercicios aplicando lo aprendido sobre variables y tipos de datos.
17.8.1. Ejercicio 1: Variables de la Guerra del Pacífico#
Crea variables con la siguiente información de la Guerra del Pacífico (1879-1884):
Año de inicio: 1879
Año de término: 1884
Países involucrados: Chile, Perú, Bolivia (como lista)
Victoria chilena: verdadero
Luego calcula e imprime la duración de la guerra.
# Escribe tu código aquí
17.8.2. Ejercicio 2: Conversión de tipos#
Tienes los siguientes datos como texto (strings). Conviértelos al tipo apropiado y realiza los cálculos:
ano_fundacion = "1541" # Fundación de Santiago
poblacion_inicial = "150" # Primeros colonos aproximados
latitud = "-33.45" # Latitud de Santiago
Calcula cuántos años han pasado desde la fundación hasta 2025.
# Escribe tu código aquí
17.8.3. Ejercicio 3: Ficha de batalla#
Crea variables para almacenar información de la Batalla de Iquique (21 de mayo de 1879):
Nombre de la batalla
Día, mes y año (como variables separadas)
Comandante chileno: Arturo Prat
Barco chileno: Esmeralda
Victoria chilena: False (tácticamente fue derrota, pero victoria moral)
Imprime toda la información de forma organizada.
# Escribe tu código aquí
17.8.4. Ejercicio 4: Verificación de tipos#
Dado el siguiente código, predice qué tipo de dato tendrá cada variable, luego verifica con type():
a = 2024 - 1810
b = 100 / 3
c = "Independencia" + " de Chile"
d = 1810 > 1800
e = str(1818) + " fue el año de la independencia"
# Escribe tu código aquí
17.8.5. Ejercicio 5: Calculadora histórica interactiva#
Crea un programa que:
Pida al usuario un año histórico
Calcule cuántos años han pasado desde ese año hasta 2025
Determine si el año es anterior o posterior a la independencia de Chile (1818)
Muestre toda la información de forma clara
Usa manejo de errores para evitar que el programa falle si el usuario ingresa texto.
# Escribe tu código aquí
17.9. Resumen del Capítulo#
Tabla 15.4: Resumen de conceptos aprendidos
Concepto |
Descripción |
Ejemplo |
|---|---|---|
Variable |
Contenedor con nombre para datos |
|
Asignación ( |
Guarda un valor en una variable |
|
|
Entero (sin decimales) |
|
|
Flotante (con decimales) |
|
|
Cadena de texto |
|
|
Booleano (True/False) |
|
|
Verifica el tipo de dato |
|
Conversión |
Cambia el tipo de dato |
|
|
Recibe datos del usuario |
|
¿Qué sigue?
En el Capítulo 16 aprenderemos sobre métodos de listas y strings, herramientas poderosas para manipular colecciones de datos históricos y procesar textos de documentos.
17.10. Referencias#
Amazon Web Services (2024). ¿Qué es Python? AWS Documentation. https://aws.amazon.com/es/what-is/python/
Downey, A. (2015). Think Python: How to Think Like a Computer Scientist (2nd ed.). O’Reilly Media.
Memoria Chilena (2024). Independencia de Chile. Biblioteca Nacional de Chile. https://www.memoriachilena.gob.cl/
Python Software Foundation (2024). The Python Tutorial. https://docs.python.org/3/tutorial/
Programming Historian (2024). Introducción a Python. https://programminghistorian.org/es/