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:

  1. Comprender qué son las variables y cómo funcionan como “archivos digitales”

  2. Aplicar las reglas correctas para nombrar variables en Python

  3. Distinguir y utilizar los cuatro tipos de datos básicos: int, float, str y bool

  4. Convertir datos entre diferentes tipos usando funciones de conversión

  5. 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

ano_1810

año-1810

No usar guión ni ñ

No comenzar con número

batalla1

1batalla

Error de sintaxis

Sin espacios

primer_presidente

primer presidente

Error de sintaxis

No usar palabras reservadas

mi_class

class

class es palabra de Python

Distingue mayúsculas/minúsculas

Edadedad

-

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

  1. int (entero): Números sin decimales → años, cantidades, poblaciones

  2. float (flotante): Números con decimales → porcentajes, coordenadas

  3. str (string): Texto → nombres, documentos, descripciones

  4. bool (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

int

1810

Años, poblaciones, cantidades

Flotante

float

-33.4489

Coordenadas, porcentajes, estadísticas

Cadena

str

"O'Higgins"

Nombres, documentos, descripciones

Booleano

bool

True

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

int()

Entero

int("1810")1810

float()

Flotante

float(1810)1810.0

str()

Cadena

str(1810)"1810"

bool()

Booleano

bool(1)True

# 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:

  1. Pida al usuario un año histórico

  2. Calcule cuántos años han pasado desde ese año hasta 2025

  3. Determine si el año es anterior o posterior a la independencia de Chile (1818)

  4. 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

ano = 1810

Asignación (=)

Guarda un valor en una variable

x = 5

int

Entero (sin decimales)

1818

float

Flotante (con decimales)

-33.45

str

Cadena de texto

"O'Higgins"

bool

Booleano (True/False)

True

type()

Verifica el tipo de dato

type(1810)int

Conversión

Cambia el tipo de dato

int("1810")1810

input()

Recibe datos del usuario

input("Año: ")

¿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#