📌 En síntesis: Modelado de redes complejas mediante grafos: matrices y listas de adyacencia, búsqueda en anchura (BFS) y búsqueda en profundidad (DFS).
Guía técnica desarrollada por el equipo de Proyecto Luna para formación profesional y consulta técnica abierta.
📌
📌 Aprendizaje esperado
📌
Construir algoritmo simple, para la solución del problema utilizando listas, diccionarios y métodos.
Figura 1: Ejemplo de declaración incompleta de un diccionario en Python
En el mundo de la programación, manejar estructuras de datos adecuadas es esencial para resolver problemas de forma eficiente. Python, como lenguaje de alto nivel, ofrece una variedad de estructuras de datos integradas que facilitan el almacenamiento y la manipulación de la información. Una de las estructuras más potentes y versátiles que nos ofrece es el diccionario, que permite trabajar con datos organizados en pares clave-valor, como ejemplo un rut (clave) y nombre (valor). Un diccionario es una colección desordenada, modificable y sin elementos duplicados, que permite asociar una clave (key) con un valor (value). A diferencia de las listas o tuplas, donde el acceso se hace por posición (índice), en un diccionario se accede al valor usando una clave específica, lo que facilita mucho la lectura y escritura de datos cuando se requiere una referencia directa y significativa. Los diccionarios son útiles en una amplia variedad de contextos: desde representar catálogos de productos, datos personales, configuraciones de sistemas, hasta almacenar resultados de operaciones o conexiones entre entidades. Su estructura se asemeja a una agenda de contactos, donde cada nombre es una clave y su número de teléfono es el valor. En Python, los diccionarios se crean encerrando los pares clave-valor entre llaves {}, y separando cada par por comas. Por ejemplo: En este caso, “nombre”, “edad” y “ciudad” son las claves, mientras que “Ana”, 28 y “Santiago” son los valores asociados. Es importante destacar que las claves deben ser únicas e inmutables (como cadenas, números o tuplas), mientras que los valores pueden ser de cualquier tipo de dato, incluso otros diccionarios, listas o funciones.
🚀 Introducción
persona = {“nombre”: “Ana”, “edad”: 28, “ciudad”: “Santiago”}
Los diccionarios permiten realizar múltiples operaciones como: agregar elementos nuevos, actualizar valores existentes, eliminar pares clave-valor, recorrer todos sus elementos, comprobar si una clave existe, entre muchas otras. Aprender a utilizarlos adecuadamente permite a los programadores modelar soluciones más realistas, eficientes y legibles, facilitando el desarrollo de algoritmos robustos que reflejan mejor las necesidades del mundo real.
Esta estructura es ideal para representar datos organizados, como registros, configuraciones, catálogos o cualquier entidad que pueda describirse mediante atributos asociados a identificadores únicos. Un diccionario en Python es una estructura de datos que permite almacenar información en forma de pares clave-valor. Cada elemento del diccionario está compuesto por una clave única que se asocia a un valor determinado, lo que permite un acceso rápido y directo a la información mediante el uso de la clave. A diferencia de las listas y tuplas, que utilizan índices numéricos para acceder a los elementos, los diccionarios permiten utilizar identificadores personalizados (como cadenas de texto, números o tuplas inmutables) para localizar y manipular datos de manera más intuitiva y eficiente. Los diccionarios son estructuras dinámicas (pueden modificarse durante la ejecución del programa), no ordenadas en versiones anteriores a Python 3.7 (a partir de esa versión conservan el orden de inserción), y mutables, lo que significa que se pueden agregar, modificar o eliminar elementos en tiempo de ejecución. Se definen utilizando llaves {} y los pares clave-valor se separan con dos puntos “:”. Por ejemplo: En este ejemplo:
- “codigo”, “nombre” y “stock” son las claves
- “A123”, “Teclado” y 15 son los valores correspondientes.
Figura 2: Diccionario completo: información de un producto en Python
🧠 Concepto de diccionarios
producto = {“codigo”: “A123”, “nombre”: “Teclado”, “stock”: 15}
📌 Acceso a los elementos de una lista
📌 Características de los diccionarios
Los diccionarios son una de las estructuras de datos más potentes y flexibles de Python. A continuación, se detallan sus principales características: 1. Estructura de pares clave-valor: cada elemento se compone de una clave (única) y un valor asociado. Esto permite una representación clara y estructurada de los datos. 2. Acceso mediante clave: el valor de un elemento se accede directamente a través de su clave, sin necesidad de conocer su posición. 3. Claves únicas: no se permiten claves duplicadas dentro de un mismo diccionario. Si se asigna un nuevo valor a una clave ya existente, este sobrescribe al anterior. 4. Valores mutables: los valores asociados a las claves pueden ser de cualquier tipo de dato, incluyendo listas, otros diccionarios, funciones u objetos personalizados. 5. Estructura mutable: se pueden agregar, modificar o eliminar elementos después de que el diccionario ha sido creado. 6. No ordenados (hasta Python 3.6): en versiones anteriores a Python 3.7, los diccionarios no conservaban el orden de inserción. Desde Python 3.7 en adelante, sí lo conservan, aunque no deben considerarse estructuras ordenadas como listas. 7. Alto rendimiento: el acceso a los elementos mediante clave es muy eficiente gracias al uso de tablas hash (aleatorias internas). 8. Soporte para anidamiento: es posible tener diccionarios dentro de otros diccionarios, lo que permite representar estructuras complejas jerárquicas. 9. Versatilidad de uso: se utilizan comúnmente para representar objetos, registros, configuraciones, catálogos, resultados de búsqueda, parámetros y más. 10. Sintaxis compacta y legible: la creación y uso de diccionarios se realiza con una sintaxis clara y concisa, facilitando su aprendizaje y aplicación.
Figura 3: Plantilla para declarar un diccionario: claves y valores
📌 Acceso a los elementos de una lista
📌 ¿Cómo se declara un diccionario?
Tabla 1. Guía rápida de métodos para trabajar con diccionarios Python proporciona una serie de métodos (acciones programadas), integrados, que permiten trabajar eficientemente con diccionarios. A continuación, se describen los más utilizados: En Python, un diccionario se declara utilizando llaves {} y separando cada par clave-valor con dos puntos”:”.
📌 Acceso a los elementos de una lista
📌 Métodos básicos de los diccionarios
Método Descripción dict() Crea un nuevo diccionario vacío. También puede convertir otras estructuras en diccionario. .keys() Devuelve una vista con todas las claves del diccionario. .values() Devuelve una vista con todos los valores del diccionario. .items() Devuelve una vista con pares (clave, valor) como tuplas. .get(clave) Retorna el valor asociado a la clave. Si no existe, retorna None (o un valor por defecto). .update() Agrega o actualiza elementos desde otro diccionario o conjunto de pares clave- valor. .pop(clave) Elimina la clave especificada y devuelve su valor. Si no existe, lanza error. .clear() Elimina todos los elementos del diccionario. .copy() Retorna una copia superficial del diccionario. in Operador que permite verificar si una clave existe en el diccionario. del dict[clave] Elimina la clave especificada del diccionario. nombre_diccionario = { clave1: valor1, clave2: valor2 }
¿Qué se realizó?
- Se creó un diccionario llamado persona.
- Cada elemento del diccionario es un par clave-valor: o “nombre” es la clave, y “Lucía” es el valor. o “edad” es la clave, y 30 es el valor (un número). o “ciudad” es la clave, y “Valparaíso” es el valor.
Figura 4: Tipos de declaración de diccionarios en Python
🔹 Diccionario simple con claves tipo texto (strings)
🛠️ Ejemplos de declaración de diccionarios
En la Figura 4 resumimos los tipos de declaración de diccionarios en Python.
Figura 5: Representación de una persona mediante un diccionario en Python
Diccionario simple (claves str) {“nombre”: “Lucía”, “edad”: 30, “ciudad”: “Valparaíso”} Diccionario vacío {} o dict() Diccionario con claves numéricas {1: “uno”, 2: “dos”, 3: “tres”} dict(nombre=“Ana”, edad=22, carrera=“Arte”) 01 02 03 04 persona = { “nombre”: “Lucía”, “edad”: 30, “ciudad”: “Valparaíso” }
¿Que se realizó?
-
Se declaró un diccionario sin contenido.
-
La variable vacío queda lista para que se le puedan agregar elementos más adelante.
-
Hay dos formas válidas de declarar un diccionario vacío: Usando llaves {} directamente. Usando la función dict(), que también crea un diccionario vacío.
Figura 6: Declaración de un diccionario vacío: dos métodos equivalentes
Figura 7: Representación de números mediante un diccionario
5.2. Diccionario vacío Un diccionario vacío no contiene información inicial, y existen dos formas de crearlo, ejemplificadas a continuación: 5.3. Diccionario con claves numéricas Un diccionario puede contener claves numércias, como se muestra a continuación:
- Las claves son de tipo str (cadena de texto), y los valores pueden ser str o int.
- Este tipo de diccionario es común para representar entidades u objetos con atributos (como una persona). vacio = {} # o también vacio = dict() numeros = { 1: “uno”, 2: “dos”, 3: “tres” }
Esta forma de crear un diccionario es más compacta y legible, pero solo funciona cuando las claves son cadenas de texto válidas como identificadores de Python (sin espacios ni caracteres especiales).
Figura 8: Alternativa para declarar diccionarios: uso de dict()
Es equivalente a escribir: ¿Qué se realizó?
-
Se creó un diccionario llamado estudiante utilizando la función incorporada dict().
-
Dentro del paréntesis se pasaron pares clave-valor usando una sintaxis especial: clave=valor.numéricas, o mapeos de identificadores con nombres).
Figura 9: Representación estructurada de un estudiante con diccionario Python
5.4. Diccionario usando el método dict() ¿Qué se realizó?
- Se creó un diccionario llamado numeros.
- Las claves son enteros (1, 2, 3) y los valores son cadenas (“uno”, “dos”, “tres”).
- Este tipo de estructura puede usarse para hacer traducciones, representaciones numéricas, o mapeos de identificadores con nombres.). estudiante = dict(nombre=“Carlos”, edad=22, carrera=“Informática”) estudiante = { “nombre”: “Carlos”, “edad”: 22, “carrera”: “Informática” }
6.2. Mapeo de valores Son ideales para relacionar una entrada con un resultado. Ej: número -> palabra, país -> capital.
Figura 10: Representación de una persona con correo electrónico
Figura 11: Ejemplo de mapeo geográfico con diccionarios
Los diccionarios sirven para almacenar, organizar y acceder a datos de forma estructurada mediante pares clave-valor, lo que los convierte en una herramienta esencial cuando necesitas identificar datos por un nombre o etiqueta única en lugar de usar solo posiciones numéricas como en las listas. A continuación, veamos sus usos comunes. 6.1. Representar entidades u objetos con atributos Por ejemplo, una persona puede representarse con un diccionario que tenga las claves “nombre”, “edad”, “correo”.
📌 ¿Para qué sirven los diccionarios?
- Funciona con claves como: nombre, edad, carrera
- No funciona con claves como: “primer nombre”, “dirección postal” (porque contienen espacios) persona = {“nombre”: “Camila”, “edad”: 27, “correo”: “camila@email.com”} paises = {“Chile”: “Santiago”, “Perú”: “Lima”, “Argentina”: “Buenos Aires”}
6.3. Bases de datos simples en memoria Se pueden usar como mini-bases de datos para almacenar y consultar información de manera eficiente, que permanecen en la memoria mientras esté activa la aplicación que lo esté usando. 6.4. Conteo de elementos (frecuencias) Son útiles para contar cuántas veces aparece un elemento en una lista, como resultado de alguna operación sobre un conjunto de datos: 6.7. Acceso rápido a datos A través del uso de claves, se puede acceder a los datos sin recorrer toda la estructura.
Figura 13: Ejemplo de organización jerárquica con diccionarios en Python
6.5. Agrupar información relacionada por una clave Por ejemplo, el catálogo de productos con su precio o stock. 6.6. Almacenar configuraciones o parámetros Muy útil en scripts, donde puedes guardar opciones o ajustes.
Figura 12: Uso de diccionarios para representar recuentos
Figura 14: Ajustes de usuario representados con diccionarios en Python
frecuencias = {“manzana”: 2, “pera”: 5, “uva”: 1} productos = {“A101”: {“nombre”: “Mouse”, “stock”: 12, “precio”: 9900}} config = {“modo”: “oscuro”, “idioma”: “español”, “tamaño_fuente”: 12}
8.1. Ejemplo básico Para acceder a los valores almacenados en un diccionario, se utiliza la clave correspondiente. A diferencia de las listas, donde se usa el índice numérico, en los diccionarios se accede a los datos directamente mediante su clave, que va encerrada entre [].
Figura 16: Ejemplo práctico de acceso y visualización de datos en un diccionario
Figura 15: Uso de corchetes para obtener un valor por clave
Esto devuelve el valor asociado a la clave especificada. Si la clave no existe, se generará un error del tipo KeyError.
📌 Acceso a los elementos de un diccionario
- En una lista, accedes por posición numérica (índice).
- En un diccionario, accedes por nombre o clave, lo cual es más intuitivo y directo, especialmente cuando los datos tienen significado.
📌 ¿Por qué usarlos en lugar de listas?
diccionario[clave] persona = { “nombre”: “Andrés”, “edad”: 35, “profesion”: “Ingeniero” } print(persona[“nombre”]) # Imprime: Andrés print(persona[“edad”]) # Imprime: 35
Figura 18: Uso de for para recorrer claves en diccionarios
8.3.1. Acceder a todas las claves Para recorrer todos los elementos del diccionario, se pueden usar ciclos for:
Figura 17: Ejemplos prácticos de .get(): valor existente, None y valor por defecto
8.3.2. Acceder a claves y valores 8.2. Acceso seguro con get() Python también ofrece el método .get() para acceder a los elementos de forma más segura, ya que no lanza error si la clave no existe, sino que devuelve None (o un valor por defecto si se indica).
Figura 19: Imprimir pares clave-valor de un diccionario en Python
8.3. Acceder a todos los elementos print(persona.get(“profesion”)) # Imprime: Ingeniero print(persona.get(“direccion”)) # Imprime: None print(persona.get(“direccion”, “No disponible”)) # Imprime: No disponible for clave in persona: print(clave) for clave, valor in persona.items(): print(clave, “:”, valor)
8.4. Solo los valores
Figura 20: Uso de .values() para acceder a los datos almacenados
Figura 21: Uso de .keys() para listar las claves de un diccionario
8.5. Solo las claves Importante: 1. Las claves deben existir si accedes con [], de lo contrario Python mostrará un KeyError (error de clave). 2. El método .get() es útil cuando no estás seguro de que la clave esté presente. 3. Usar .items() permite recorrer el diccionario completo de forma ordenada (clave y valor). for valor in persona.values(): print(valor) for clave in persona.keys(): print(clave)
9.1. ¿Por qué insertar elementos? Cuando estamos construyendo una estructura de datos como un catálogo, una ficha de cliente o un perfil de usuario, constantemente necesitamos agregar nueva información. En los diccionarios, esto se logra añadiendo nuevos pares clave-valor. 9.2. ¿Cómo funciona? Al asignar un valor a una clave nueva, Python lo agrega automáticamente al diccionario. No necesitas declarar la clave antes, simplemente se crea en el momento.
Figura 22: Diferencias entre inserciones, actualizaciones y
borrados en los diccionarios de Python En la Figura 22 se detallan las principales diferencias entre las inserciones, actualizaciones y borrados en los diccionarios de Python.
📌 Inserciones, borrados y actualización en los diccionarios
📌
📌
📌
Actualización Para modificar información existente cuando cambian los datos (ciudad, precio, stock, etc.). Inserción Para agregar nueva información a una estructura como un catálogo, ficha o perfil. Borrado Para eliminar información que ya no es necesaria o es incorrecta, como productos retirados del catálogo.
¿Qué pasó aquí?
- La clave “correo” no existía.
- Al hacer cliente[“correo”] = valor, se insertó automáticamente con su valor. Actualización de elementos ¿Por qué actualizar? A lo largo del tiempo, los datos cambian: una persona cambia de ciudad, el precio de un producto sube, el stock se ajusta. Por eso, es fundamental poder modificar valores existentes en un diccionario. ¿Cómo funciona? Si la clave ya existe, asignar un nuevo valor con diccionario[“clave”] = nuevo_valor reemplaza el valor anterior.
Figura 23: Actualización de diccionarios en Python con nueva información
Figura 24: Ejemplo de actualización de precio en un diccionario
cliente = {“nombre”: “Sofía”, “edad”: 28} cliente[“correo”] = “sofia@email.com” # Inserción de nueva clave print(cliente) # Salida: {‘nombre’: ‘Sofía’, ‘edad’: 28, ‘correo’: ‘sofia@email.com’} producto = {“nombre”: “Mouse”, “precio”: 10000} producto[“precio”] = 12000 # Actualización de un valor existente print(producto) # Salida: {‘nombre’: ‘Mouse’, ‘precio’: 12000}
Figura 25: Uso de .update() para actualizar un diccionario
¿Por qué borrar? A veces es necesario eliminar información que ya no es relevante, como un producto que salió del catálogo o un dato incorrecto. Eliminar claves mantiene los diccionarios limpios y actualizados. ¿Cómo funciona? Existen dos formas comunes:
- Con del: Elimina directamente una clave y su valor.
Figura 26: Uso de del para borrar elementos de un diccionario
También puedes usar .update() para actualizar una o más claves a la vez: ¿Qué pasó aquí?
- “precio” ya existía como clave.
- Su valor fue reemplazado por el nuevo (12000). producto.update({“precio”: 12000, “stock”: 50}) usuario = {“nombre”: “Carlos”, “edad”: 40} del usuario[“edad”]
Figura 27: Uso de .pop() para borrar una clave y obtener su valor
¿Qué pasa si la clave no existe? del y .pop() lanzan un error KeyError si la clave no está en el diccionario. Para evitarlo, se puede usar .pop(“clave”, valor_por_defecto):
Figura 28: Eliminar sin error: ejemplo de .pop() con respaldo
- Con .pop(): Elimina y devuelve el valor de la clave eliminada. Es útil si quieres usar el valor antes de borrarlo. valor_eliminado = usuario.pop(“nombre”) print(valor_eliminado) # Carlos usuario.pop(“correo”, “No encontrado”) # No lanza error
En la programación orientada a objetos (POO), el desarrollo de soluciones se basa en la creación de clases que representan entidades del mundo real, encapsulando tanto datos como comportamientos. Esta metodología promueve la reutilización del código, la modularidad y la escalabilidad en los programas. En este contexto, los diccionarios en Python son herramientas extremadamente útiles cuando se requiere representar y organizar información de manera flexible mediante pares clave-valor. Su integración dentro de clases permite crear estructuras de datos dinámicas, como catálogos, bases de datos simples en memoria o registros de cualquier tipo de entidad, permitiendo acceder, modificar o eliminar información fácilmente. Uno de los ejemplos más representativos de su uso es la gestión de un catálogo de productos, donde cada producto puede identificarse mediante un código único (clave) y tener asociado un stock (valor). Utilizar un diccionario dentro de una clase para representar este catálogo permite encapsular toda la lógica de manipulación (inserción, actualización, eliminación y visualización), manteniendo el principio de abstracción y separando la lógica del negocio de la implementación interna. Esta combinación entre POO y estructuras de datos como los diccionarios permite construir aplicaciones más limpias, reutilizables y adaptables a distintos escenarios. Además, facilita la lectura y mantenimiento del código, ya que cada operación está organizada dentro de métodos específicos que actúan sobre los atributos del objeto. En la siguiente implementación, se presenta una clase CatalogoProductos que encapsula un diccionario para representar un catálogo de productos. A través de métodos personalizados, se permite agregar productos nuevos, actualizar el stock, eliminar productos existentes y mostrar el contenido completo del catálogo. Esta estructura sirve como base para desarrollar soluciones más complejas y profesionales en sistemas de inventario, comercio electrónico, registros de clientes, entre otros.
🧩 Implementación en programación orientada a objeto
Figura 29. Gestión de catálogos con diccionarios en una clase Python
Código de implementación catalogo productos.
Figura 30. Ejemplo de uso de la clase CatalogoProductos paso a paso
Código de ejecución
Caso de estudio: Control básico de stock en una librería La librería Lectura Viva necesita implementar una solución simple para gestionar el stock de sus libros. Cada libro se identifica por un código único y tiene asociado un número de unidades disponibles. Se solicita crear un sistema orientado a objetos que permita agregar libros, actualizar el stock, eliminar un libro del sistema y acceder al catálogo mediante métodos get y set. 11.1. Objetivo Desarrollar un sistema básico en Python utilizando programación orientada a objetos (POO) que permita a una librería gestionar el stock de libros mediante el uso de diccionarios. El sistema debe permitir agregar, actualizar, eliminar libros y acceder/modificar el catálogo de forma segura mediante métodos get y set. Este ejercicio tiene como propósito reforzar la comprensión del encapsulamiento, la manipulación de estructuras clave-valor, y la aplicación práctica de clases y métodos en la solución de problemas reales.
🛠️ Desarrollo práctico
Código completo
Figura 31. Gestión de libros en una librería usando diccionarios en Python
Figura 32. Resultado de operaciones sobre el catálogo de libros
Explicación del ejercicio Creamos una clase llamada Libreria que tiene un atributo:
-
__libros: es un diccionario privado que guarda los libros disponibles.
-
Cada libro tiene un código único como clave (por ejemplo “L001”) y su stock como valor (por ejemplo 10). Usamos métodos especiales (getters y setters):
-
get_libros(): permite acceder al catálogo completo de libros (diccionario).
-
set_libros(diccionario): permite reemplazar todo el catálogo, siempre que se reciba un diccionario válido. También definimos métodos funcionales para interactuar con el diccionario:
-
agregar(codigo, stock): agrega un nuevo libro al catálogo con el stock indicado, si el código no existe.
-
actualizar(codigo, nuevo_stock): actualiza el stock de un libro existente.
-
eliminar(codigo): elimina un libro del catálogo, si existe.
-
mostrar_catalogo(): recorre el diccionario y muestra los libros con su código y stock de forma ordenada. Resultado final
Este desarrollo demuestra cómo los diccionarios permiten almacenar múltiples datos relacionados en una estructura clave-valor dentro de un solo atributo de clase. Al integrarlos en objetos mediante la programación orientada a objetos (POO), podemos construir aplicaciones organizadas, escalables y reutilizables. En este caso, se utilizó un diccionario para gestionar un catálogo de productos, lo que facilitó representar cada elemento con un código único y su stock correspondiente. Además, los métodos definidos en la clase permiten controlar y validar la manipulación de esa información, como agregar, actualizar o eliminar productos, promoviendo el uso de lógica estructurada y clara. El uso de métodos get y set refuerza el principio de encapsulamiento, asegurando el acceso controlado a los datos internos del objeto. Este tipo de lógica básica es fundamental, ya que más adelante puede extenderse fácilmente hacia bases de datos, interfaces gráficas, sistemas de inventario reales o incluso aplicaciones web. En definitiva, comprender cómo usar diccionarios dentro de clases no solo mejora el dominio del lenguaje Python, sino que también sienta las bases para desarrollar soluciones profesionales más robustas y mantenibles.
📌 Reflexión
Uso del objeto:
- Se crea un objeto de la clase Librería.
- Se agregan libros mediante el método agregar().
- Se actualiza el stock de un libro con actualizar().
- Se elimina un libro usando eliminar().
- Se consulta el catálogo completo con get_libros().
- También se puede reemplazar el catálogo entero usando set_libros(). Durante esta semana, los y las estudiantes han explorado el uso de diccionarios en Python como una estructura de datos fundamental para representar y manipular información mediante pares clave-valor. A través de actividades prácticas y reflexivas, han aprendido a crear diccionarios, acceder a sus elementos, insertar, actualizar y eliminar datos, aplicando estructuras de control y validaciones que les permiten modelar soluciones cercanas a contextos reales. Además, han desarrollado algoritmos simples que integran diccionarios como eje funcional, lo que ha fortalecido su comprensión sobre la versatilidad de esta estructura y su eficiencia en operaciones de búsqueda, asociación y organización de datos. La integración con Programación Orientada a Objetos (POO) ha permitido evidenciar cómo los diccionarios pueden ser utilizados como atributos internos de clases, facilitando la construcción de sistemas más estructurados, escalables y reutilizables. Este cierre reflexivo busca consolidar el aprendizaje vinculando la teoría con la práctica, destacando cómo los diccionarios permiten gestionar información compleja de forma clara y efectiva. Preparar a los estudiantes en el uso correcto de estructuras como esta es un paso clave para enfrentar con seguridad desafíos mayores en el desarrollo de software, donde el manejo eficiente de datos es esencial para construir programas robustos, organizados y funcionales.
💡 Conclusión
🚀 Potencia tus proyectos tecnológicos con Proyecto Luna
En Proyecto Luna desarrollamos arquitectura de software de alto rendimiento, optimización de bases de datos críticas y soluciones aplicadas de inteligencia artificial y automatización para empresas y profesionales.
- 💼 Soluciones de ingeniería: Conoce nuestras capacidades y casos de estudio en proyectoluna.com/work/.
- 🛡️ Seguridad y auditoría: Orientación técnica y respuesta ante incidentes en ¿Te han hackeado?.
- 📩 Contacto directo: Escríbenos a través de nuestro formulario de contacto o a
contacto@proyectoluna.com.
📚 Fuentes y lecturas recomendadas
- Chazallet, M. (2020). Programación orientada a objetos en Python. Ediciones Informáticas. http://descubridor.santotomas.cl/primo_library/libweb/action/display.do?tabs=details Tab&ct=display&fn=search&doc=cst_aleph000043172&indx=1&recIds=cst_aleph00004 3172&recIdxs=0&elementId=0&renderMode=poppedOut&displayMode=full&frbrVers ion=&dscnt=1&scp.scps=scope%3A%28cst_aleph%29%2Cscope%3A%28cst_digitool% 29&frbg=&tab=cst_tab&vl(87563938UI0)=any&dstmp=1753287226753&srt=rank&mode =Basic&dum=true&tb=t&vl(1UIStartWith0)=exact&vl(freeText0)=Introducci%C3%B3n +a+la+programaci%C3%B3n+con+Python.&vl(107694436UI1)=all_items&vid=CST Downey, A. (2002). Aprenda a pensar como un programador con Python. Green Tea Press. http://descubridor.santotomas.cl/primo_library/libweb/action/display.do?tabs=details Tab&ct=display&fn=search&doc=cst_aleph000048949&indx=1&recIds=cst_aleph00004 8949&recIdxs=0&elementId=0&renderMode=poppedOut&displayMode=full&frbrVers ion=&dscnt=1&scp.scps=scope%3A%28cst_aleph%29%2Cscope%3A%28cst_digitool% 29&frbg=&tab=cst_tab&vl(87563938UI0)=any&dstmp=1753287839287&srt=rank&mode =Basic&dum=true&tb=t&vl(1UIStartWith0)=exact&vl(freeText0)=Aprenda+a+pensar+c omo+un+programador+con+Python.&vl(107694436UI1)=all_items&vid=CST Marzal, M., y García, R. (2011). . Pearson. http://descubridor.santotomas.cl/primo_library/libweb/action/display.do?tabs=details Tab&ct=display&fn=search&doc=cst_aleph000062601&indx=1&recIds=cst_aleph00006 2601&recIdxs=0&elementId=0&renderMode=poppedOut&displayMode=full&frbrVers ion=&dscnt=1&scp.scps=scope%3A%28cst_aleph%29%2Cscope%3A%28cst_digitool% 29&frbg=&tab=cst_tab&vl(87563938UI0)=any&dstmp=1753287991817&srt=rank&mode =Basic&dum=true&tb=t&vl(1UIStartWith0)=exact&vl(freeText0)=Python+3%3A+los+fu ndamentos+del+lenguaje.&vl(107694436UI1)=all_items&vid=CST






