Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Tipos de Datos Básicos

En nuestro almacén de variables, no todas las cajas son iguales. Cada tipo de caja está diseñada para guardar un tipo específico de información. ¡Vamos a conocer todas las cajas disponibles en Python!

🧱 Una perspectiva personal: Tipos elementales vs compuestos

💭 Nota del autor: Esta es mi perspectiva personal para entender mejor los tipos de datos. No es una definición oficial de Python, pero me ha ayudado mucho a organizar conceptos y espero que te sea útil también.

Desde mi experiencia enseñando Python, me gusta pensar en los tipos de datos como si fueran materiales de construcción en nuestro almacén:

🧱 Tipos Elementales (Los ladrillos básicos)

Son los componentes fundamentales que no se pueden descomponer más. Son como los ladrillos individuales con los que construimos todo lo demás:

  • 🔵 int (números enteros): 25, -10, 1000
  • 🟢 float (números decimales): 3.14, 19.99, -2.5
  • 🟡 str (texto): "Ana", "Hola mundo", "123"
  • 🔴 bool (verdadero/falso): True, False
  • ⚪ None (ausencia de valor): None

🏗️ Tipos Compuestos (Las estructuras construidas)

Son combinaciones organizadas de tipos elementales. Es como usar nuestros ladrillos básicos para construir estructuras más complejas:

  • 📦 Listas: [25, 30, 35] (varios int juntos)
  • 📋 Tuplas: ("Ana", 25, True) (str, int, bool combinados)
  • 📚 Diccionarios: {"nombre": "Ana", "edad": 25} (str como claves, varios tipos como valores)
  • 🎯 Conjuntos: {1, 2, 3, 4} (int únicos agrupados)

🔧 La magia de la composición

Lo interesante es que puedes “crear” tipos compuestos usando combinaciones de tipos elementales:

# Tipos elementales (ladrillos básicos)
nombre = "Ana García"        # 🟡 str
edad = 28                   # 🔵 int
altura = 1.65              # 🟢 float
es_estudiante = True       # 🔴 bool

# Tipos compuestos (estructuras construidas con los ladrillos)
persona_lista = [nombre, edad, altura, es_estudiante]  # 📦 Lista
persona_tupla = (nombre, edad, altura, es_estudiante)  # 📋 Tupla
persona_dict = {                                       # 📚 Diccionario
    "nombre": nombre,      # str como clave, str como valor
    "edad": edad,          # str como clave, int como valor
    "altura": altura,      # str como clave, float como valor
    "estudiante": es_estudiante  # str como clave, bool como valor
}

print("🧱 Tipos elementales usados:")
print(f"   Nombre: {nombre} ({type(nombre).__name__})")
print(f"   Edad: {edad} ({type(edad).__name__})")
print(f"   Altura: {altura} ({type(altura).__name__})")
print(f"   Estudiante: {es_estudiante} ({type(es_estudiante).__name__})")

print("\n🏗️ Tipos compuestos creados:")
print(f"   Lista: {persona_lista} ({type(persona_lista).__name__})")
print(f"   Tupla: {persona_tupla} ({type(persona_tupla).__name__})")
print(f"   Diccionario: {persona_dict} ({type(persona_dict).__name__})")

🎯 ¿Por qué es útil esta perspectiva?

  1. 📚 Aprendizaje progresivo: Primero dominas los ladrillos básicos, luego aprendes a construir estructuras
  2. 🔧 Resolución de problemas: Sabes que cualquier estructura compleja está hecha de elementos simples
  3. 🐛 Depuración: Si algo falla en una estructura compuesta, revisas los elementos individuales
  4. 💡 Diseño: Planificas mejor qué tipos elementales necesitas para crear tus estructuras
# Ejemplo práctico: Sistema de estudiantes
# Primero definimos los elementos básicos (tipos elementales)
estudiante1_nombre = "Carlos Mendoza"    # str
estudiante1_edad = 20                    # int
estudiante1_promedio = 8.5              # float
estudiante1_activo = True               # bool

estudiante2_nombre = "Ana García"       # str
estudiante2_edad = 22                   # int
estudiante2_promedio = 9.2             # float
estudiante2_activo = False             # bool

# Luego construimos estructuras más complejas (tipos compuestos)
estudiante1 = {                        # Diccionario usando str, int, float, bool
    "nombre": estudiante1_nombre,
    "edad": estudiante1_edad,
    "promedio": estudiante1_promedio,
    "activo": estudiante1_activo
}

estudiante2 = {                        # Otro diccionario con la misma estructura
    "nombre": estudiante2_nombre,
    "edad": estudiante2_edad,
    "promedio": estudiante2_promedio,
    "activo": estudiante2_activo
}

# Y finalmente, estructuras aún más complejas
lista_estudiantes = [estudiante1, estudiante2]  # Lista de diccionarios

print("🎓 SISTEMA DE ESTUDIANTES")
print("=" * 40)
for i, estudiante in enumerate(lista_estudiantes, 1):
    print(f"Estudiante {i}:")
    print(f"  📝 Nombre: {estudiante['nombre']}")
    print(f"  🎂 Edad: {estudiante['edad']} años")
    print(f"  📊 Promedio: {estudiante['promedio']}")
    print(f"  ✅ Activo: {estudiante['activo']}")
    print()

💡 Reflexión: Observa cómo partimos de 4 tipos elementales simples (str, int, float, bool) y construimos un sistema completo de gestión de estudiantes. ¡Esa es la potencia de la composición!


Los 5 tipos de cajas principales (Tipos Elementales)

🔵 Caja Azul: int (Números Enteros)

Las cajas azules son perfectas para guardar números enteros (sin decimales). Son como cajas resistentes que solo aceptan números completos.

# Creando cajas azules
edad = 25
año_actual = 2024
temperatura = -5
puntos = 0
habitantes = 1000000

# Verificar que son cajas azules
print(type(edad))  # <class 'int'>

¿Cuándo usar cajas azules?

  • Edades: edad = 25
  • Años: año_nacimiento = 1995
  • Cantidades exactas: numero_estudiantes = 30
  • Puntuaciones: puntos_juego = 1500
  • Posiciones: fila = 5, columna = 3

Ejemplos prácticos:

# Información de un estudiante
edad_estudiante = 20
semestre_actual = 6
materias_cursando = 5
creditos_completados = 120

print("=== INFORMACIÓN ACADÉMICA ===")
print("Edad:", edad_estudiante, "años")
print("Semestre:", semestre_actual)
print("Materias este semestre:", materias_cursando)
print("Créditos completados:", creditos_completados)

# Cálculos con cajas azules
creditos_faltantes = 200 - creditos_completados
print("Créditos faltantes:", creditos_faltantes)

Números negativos también son bienvenidos:

temperatura_invierno = -10
deuda = -5000
diferencia_puntos = -25

print("Temperatura:", temperatura_invierno, "°C")
print("Balance:", deuda, "pesos")

🟢 Caja Verde: float (Números Decimales)

Las cajas verdes son especiales para números con decimales. Son como cajas de precisión que pueden guardar fracciones.

# Creando cajas verdes
altura = 1.75
precio = 29.99
temperatura = 36.5
porcentaje = 85.7
pi = 3.14159

# Verificar que son cajas verdes
print(type(altura))  # <class 'float'>

¿Cuándo usar cajas verdes?

  • Medidas: altura = 1.75, peso = 68.5
  • Precios: precio = 199.99
  • Temperaturas: temperatura = 36.5
  • Porcentajes: descuento = 15.5
  • Constantes matemáticas: pi = 3.14159

Ejemplos prácticos:

# Información física de una persona
altura_metros = 1.75
peso_kg = 68.5
temperatura_corporal = 36.8

print("=== DATOS FÍSICOS ===")
print("Altura:", altura_metros, "metros")
print("Peso:", peso_kg, "kg")
print("Temperatura:", temperatura_corporal, "°C")

# Cálculos con cajas verdes
imc = peso_kg / (altura_metros ** 2)
print("IMC:", round(imc, 2))  # Redondeamos a 2 decimales

# Información de compras
precio_producto = 199.99
descuento_porcentaje = 15.5
iva_porcentaje = 16.0

descuento_pesos = precio_producto * (descuento_porcentaje / 100)
precio_con_descuento = precio_producto - descuento_pesos
iva_pesos = precio_con_descuento * (iva_porcentaje / 100)
precio_final = precio_con_descuento + iva_pesos

print("\n=== CÁLCULO DE PRECIO ===")
print("Precio original: $", precio_producto)
print("Descuento (", descuento_porcentaje, "%): $", round(descuento_pesos, 2))
print("Precio con descuento: $", round(precio_con_descuento, 2))
print("IVA (", iva_porcentaje, "%): $", round(iva_pesos, 2))
print("Precio final: $", round(precio_final, 2))

🟡 Caja Amarilla: str (Cadenas de Texto)

Las cajas amarillas son perfectas para guardar texto. Son como cajas mágicas que pueden contener cualquier combinación de letras, números y símbolos, ¡pero siempre entre comillas!

# Creando cajas amarillas
nombre = "Ana García"
mensaje = "¡Hola mundo!"
email = "ana@email.com"
telefono = "555-1234"  # Nota: entre comillas porque es texto
direccion = "Calle Falsa 123, Col. Centro"

# Verificar que son cajas amarillas
print(type(nombre))  # <class 'str'>

¿Cuándo usar cajas amarillas?

  • Nombres: nombre = "Ana"
  • Mensajes: saludo = "¡Hola!"
  • Direcciones: email = "ana@email.com"
  • Identificadores: codigo = "ABC123"
  • Cualquier texto: descripcion = "Producto de alta calidad"

Formas de crear cajas amarillas:

# Con comillas dobles
nombre = "Ana García"
mensaje = "Ella dijo: 'Hola'"

# Con comillas simples
apellido = 'López'
frase = 'El libro "Python para principiantes" es genial'

# Con comillas triples (para texto largo)
descripcion = """Este es un texto muy largo
que puede ocupar varias líneas
y es perfecto para descripciones detalladas."""

biografia = '''Ana García es una estudiante
de ingeniería en sistemas que le gusta
programar en Python.'''

Ejemplos prácticos:

# Información personal
nombre_completo = "Ana García López"
email_personal = "ana.garcia@email.com"
telefono_celular = "555-123-4567"
ciudad_residencia = "Ciudad de México"
ocupacion = "Estudiante de Ingeniería"

print("=== INFORMACIÓN DE CONTACTO ===")
print("Nombre:", nombre_completo)
print("Email:", email_personal)
print("Teléfono:", telefono_celular)
print("Ciudad:", ciudad_residencia)
print("Ocupación:", ocupacion)

# Mensajes personalizados
saludo_matutino = "¡Buenos días!"
saludo_vespertino = "¡Buenas tardes!"
despedida = "¡Hasta luego!"

print("\n=== MENSAJES ===")
print(saludo_matutino, nombre_completo)
print("Espero que tengas un excelente día.")
print(despedida)

# Información de productos
producto_nombre = "Laptop Gaming Pro"
producto_marca = "TechMaster"
producto_modelo = "GM-2024-X1"
producto_descripcion = "Laptop de alta gama para gaming y trabajo profesional"

print("\n=== INFORMACIÓN DEL PRODUCTO ===")
print("Producto:", producto_nombre)
print("Marca:", producto_marca)
print("Modelo:", producto_modelo)
print("Descripción:", producto_descripcion)

🔴 Caja Roja: bool (Booleanos)

Las cajas rojas son las más simples pero muy importantes. Solo pueden contener dos valores: True (verdadero) o False (falso). Son como interruptores que están encendidos o apagados.

# Creando cajas rojas
es_estudiante = True
tiene_trabajo = False
esta_casado = True
es_fin_semana = False

# Verificar que son cajas rojas
print(type(es_estudiante))  # <class 'bool'>

¿Cuándo usar cajas rojas?

  • Estados: esta_encendido = True
  • Permisos: puede_votar = True
  • Condiciones: es_mayor_edad = False
  • Configuraciones: modo_oscuro = True
  • Resultados de comparaciones: es_igual = (5 == 5)

Ejemplos prácticos:

# Estado de un usuario
usuario_activo = True
email_verificado = True
perfil_completo = False
notificaciones_activadas = True
modo_privado = False

print("=== ESTADO DEL USUARIO ===")
print("Usuario activo:", usuario_activo)
print("Email verificado:", email_verificado)
print("Perfil completo:", perfil_completo)
print("Notificaciones:", notificaciones_activadas)
print("Modo privado:", modo_privado)

# Configuración de una aplicación
tema_oscuro = True
sonido_activado = False
actualizaciones_automaticas = True
compartir_ubicacion = False

print("\n=== CONFIGURACIÓN DE LA APP ===")
print("Tema oscuro:", tema_oscuro)
print("Sonido:", sonido_activado)
print("Actualizaciones automáticas:", actualizaciones_automaticas)
print("Compartir ubicación:", compartir_ubicacion)

# Resultados de verificaciones
contraseña_valida = True
edad_suficiente = False
terminos_aceptados = True

print("\n=== VERIFICACIONES ===")
print("Contraseña válida:", contraseña_valida)
print("Edad suficiente:", edad_suficiente)
print("Términos aceptados:", terminos_aceptados)

⚪ Caja Vacía: None (Nada)

La caja vacía es especial. Representa “nada” o “vacío”. Es como tener una caja etiquetada pero sin contenido adentro.

# Creando cajas vacías
resultado = None
valor_inicial = None
respuesta_usuario = None

# Verificar que son cajas vacías
print(type(resultado))  # <class 'NoneType'>

¿Cuándo usar cajas vacías?

  • Valores iniciales: resultado = None
  • Valores opcionales: segundo_nombre = None
  • Indicar ausencia: fecha_fin = None
  • Valores por defecto: configuracion = None

Ejemplos prácticos:

# Información opcional de una persona
nombre = "Ana García"
segundo_nombre = None  # No tiene segundo nombre
apellido_materno = "López"
apellido_paterno = None  # No se especificó

print("=== INFORMACIÓN PERSONAL ===")
print("Nombre:", nombre)
print("Segundo nombre:", segundo_nombre)
print("Apellido materno:", apellido_materno)
print("Apellido paterno:", apellido_paterno)

# Estado inicial de variables
puntuacion_final = None  # Aún no se calcula
fecha_graduacion = None  # Aún no se define
trabajo_actual = None    # Desempleado

print("\n=== INFORMACIÓN PENDIENTE ===")
print("Puntuación final:", puntuacion_final)
print("Fecha de graduación:", fecha_graduacion)
print("Trabajo actual:", trabajo_actual)

Comparando los tipos de cajas

Vamos a crear un ejemplo que use todos los tipos de cajas:

# ================================
# PERFIL COMPLETO DE USUARIO
# ================================

print("=== CREANDO PERFIL DE USUARIO ===")
print()

# 🟡 Cajas amarillas (texto)
nombre_usuario = "Carlos Mendoza"
email = "carlos.mendoza@email.com"
ciudad = "Guadalajara"
profesion = "Ingeniero de Software"

# 🔵 Cajas azules (números enteros)
edad = 28
años_experiencia = 5
proyectos_completados = 23

# 🟢 Cajas verdes (números decimales)
salario_mensual = 35000.50
altura = 1.78
calificacion_promedio = 4.7

# 🔴 Cajas rojas (verdadero/falso)
esta_empleado = True
busca_trabajo = False
disponible_freelance = True
tiene_auto = True

# ⚪ Cajas vacías (información pendiente)
fecha_ultimo_proyecto = None
siguiente_vacacion = None

# ================================
# MOSTRAR INFORMACIÓN ORGANIZADA
# ================================

print("📋 INFORMACIÓN PERSONAL")
print("Nombre:", nombre_usuario)
print("Email:", email)
print("Ciudad:", ciudad)
print("Profesión:", profesion)
print("Edad:", edad, "años")
print("Altura:", altura, "metros")
print()

print("💼 INFORMACIÓN PROFESIONAL")
print("Años de experiencia:", años_experiencia)
print("Proyectos completados:", proyectos_completados)
print("Salario mensual: $", salario_mensual)
print("Calificación promedio:", calificacion_promedio, "/5.0")
print()

print("✅ ESTADO ACTUAL")
print("Está empleado:", esta_empleado)
print("Busca trabajo:", busca_trabajo)
print("Disponible para freelance:", disponible_freelance)
print("Tiene auto:", tiene_auto)
print()

print("⏳ INFORMACIÓN PENDIENTE")
print("Fecha último proyecto:", fecha_ultimo_proyecto)
print("Siguiente vacación:", fecha_ultimo_proyecto)
print()

print("🔍 TIPOS DE CAJAS UTILIZADAS")
print("nombre_usuario:", type(nombre_usuario))
print("edad:", type(edad))
print("salario_mensual:", type(salario_mensual))
print("esta_empleado:", type(esta_empleado))
print("fecha_ultimo_proyecto:", type(fecha_ultimo_proyecto))

Identificando tipos de cajas

Python te permite “espiar” qué tipo de caja es cada variable:

# Crear diferentes tipos de cajas
mi_nombre = "Ana"
mi_edad = 25
mi_altura = 1.65
soy_estudiante = True
mi_mascota = None

# Espiar qué tipo de caja es cada una
print("=== IDENTIFICANDO TIPOS DE CAJAS ===")
print("mi_nombre es una caja tipo:", type(mi_nombre))
print("mi_edad es una caja tipo:", type(mi_edad))
print("mi_altura es una caja tipo:", type(mi_altura))
print("soy_estudiante es una caja tipo:", type(soy_estudiante))
print("mi_mascota es una caja tipo:", type(mi_mascota))

Ejercicio práctico: Inventario de tu almacén

Vamos a crear un programa que use todos los tipos de cajas:

# ================================
# INVENTARIO DE MI ALMACÉN PERSONAL
# ================================

print("📦 ORGANIZANDO MI ALMACÉN DE VARIABLES")
print("=" * 50)

# Crear una caja de cada tipo
print("\n🟡 Creando caja amarilla (texto)...")
mi_comida_favorita = "Pizza"
print(f"   Contenido: {mi_comida_favorita}")
print(f"   Tipo de caja: {type(mi_comida_favorita)}")

print("\n🔵 Creando caja azul (número entero)...")
mi_edad = 25  # Cambia por tu edad
print(f"   Contenido: {mi_edad}")
print(f"   Tipo de caja: {type(mi_edad)}")

print("\n🟢 Creando caja verde (número decimal)...")
mi_estatura = 1.70  # Cambia por tu estatura
print(f"   Contenido: {mi_estatura}")
print(f"   Tipo de caja: {type(mi_estatura)}")

print("\n🔴 Creando caja roja (verdadero/falso)...")
me_gusta_programar = True  # Cambia según tu preferencia
print(f"   Contenido: {me_gusta_programar}")
print(f"   Tipo de caja: {type(me_gusta_programar)}")

print("\n⚪ Creando caja vacía (None)...")
mi_segundo_apellido = None  # Si no tienes segundo apellido
print(f"   Contenido: {mi_segundo_apellido}")
print(f"   Tipo de caja: {type(mi_segundo_apellido)}")

print("\n" + "=" * 50)
print("📋 RESUMEN DE MI ALMACÉN")
print("=" * 50)
print(f"🟡 Cajas amarillas (str): 1 - Contenido: {mi_comida_favorita}")
print(f"🔵 Cajas azules (int): 1 - Contenido: {mi_edad}")
print(f"🟢 Cajas verdes (float): 1 - Contenido: {mi_estatura}")
print(f"🔴 Cajas rojas (bool): 1 - Contenido: {me_gusta_programar}")
print(f"⚪ Cajas vacías (None): 1 - Contenido: {mi_segundo_apellido}")
print(f"\n📊 Total de cajas en mi almacén: 5")

Consejos para elegir el tipo de caja correcto

1. Para números sin decimales → Caja azul (int)

edad = 25          # ✅ Correcto
edad = 25.0        # ❌ Innecesario (aunque funciona)

2. Para números con decimales → Caja verde (float)

precio = 19.99     # ✅ Correcto
precio = 19        # ❌ Podría perder precisión

3. Para cualquier texto → Caja amarilla (str)

nombre = "Ana"     # ✅ Correcto
telefono = "555-1234"  # ✅ Correcto (aunque sean números)

4. Para sí/no, verdadero/falso → Caja roja (bool)

es_estudiante = True   # ✅ Correcto
es_estudiante = "Sí"   # ❌ Menos eficiente

5. Para valores ausentes → Caja vacía (None)

segundo_nombre = None      # ✅ Correcto
segundo_nombre = ""        # ❌ Cadena vacía, no ausencia

Resumen

🧱 Tipos Elementales (Los fundamentos)

En tu almacén de variables tienes 5 tipos principales de cajas elementales:

  • 🔵 Cajas azules (int): Números enteros como 25, -10, 1000
  • 🟢 Cajas verdes (float): Números decimales como 3.14, 19.99, -2.5
  • 🟡 Cajas amarillas (str): Texto como “Ana”, “Hola mundo”, “123”
  • 🔴 Cajas rojas (bool): Solo True o False
  • Cajas vacías (None): Representan ausencia de valor

🏗️ El camino hacia los tipos compuestos

Estos tipos elementales son tus ladrillos básicos. En capítulos posteriores aprenderás a combinarlos para crear tipos compuestos más sofisticados:

# Hoy aprendiste los ladrillos básicos (tipos elementales)
nombre = "Ana"          # 🟡 str
edad = 25              # 🔵 int
activa = True          # 🔴 bool

# Próximamente aprenderás a construir estructuras (tipos compuestos)
persona = [nombre, edad, activa]                    # 📦 Lista (próximo capítulo)
datos = {"nombre": nombre, "edad": edad}            # 📚 Diccionario (más adelante)
coordenadas = (10.5, 20.3)                        # 📋 Tupla (también veremos)

💡 Principios clave

  1. Domina los elementales primero: Son la base de todo lo demás
  2. Elige el tipo correcto: Cada tipo tiene su propósito específico
  3. Piensa en composición: Los tipos complejos se construyen con los simples
  4. Practica la conversión: Saber cambiar entre tipos es fundamental

Elegir el tipo correcto de caja hace que tu código sea más eficiente y fácil de entender. En la siguiente sección aprenderemos cómo cambiar el contenido de una caja a otro tipo (conversión de tipos).


💡 Consejo del almacenista: Estos tipos elementales son como el alfabeto de la programación. Una vez que los domines, podrás “escribir” estructuras de datos tan complejas como necesites. ¡Recuerda: todo lo complejo está hecho de cosas simples!