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

Ejercicios: Estructuras de Almacenamiento

Domina el arte de organizar las cajas.


Ejercicio 5.1: El Inventario Perdido (Listas)

Escenario: Gestionas un inventario de frutas.

  1. Crea una lista: frutas = ["Manzana", "Pera", "Naranja"].
  2. Agrega “Uva” al final de la lista.
  3. Cambia “Pera” por “Mango” (está en la posición 1).
  4. Imprime la lista final.

Pista 1: hay un método de lista pensado exactamente para “agregar al final”, y otra forma de acceso directo para “reemplazar en una posición conocida”.

Pista 2: .append(valor) agrega al final; asignar por índice (lista[i] = nuevo) reemplaza el elemento que ya está en esa posición.

Ejercicio 5.2: Catálogo de Precios (Diccionarios)

Escenario: Necesitas saber cuánto cuestan los productos.

  1. Crea un diccionario: precios = {"Manzana": 10, "Mango": 15, "Uva": 20}.
  2. El precio del Mango subió. Actualízalo a 18.
  3. Agrega un producto nuevo: “Sandía” con precio 30.
  4. Imprime el precio de la “Uva”.

Pista 1: en un diccionario, actualizar una clave que ya existe y agregar una clave nueva usan exactamente la misma sintaxis.

Pista 2: asignar a una clave (precios[clave] = valor) sirve tanto para crear como para actualizar; Python decide solo según si la clave ya estaba ahí.

Ejercicio 5.3: Limpieza de Datos (Conjuntos)

Escenario: Te pasaron una lista de IDs de usuarios con duplicados. ids = [101, 102, 101, 103, 102, 104]

  1. Convierte esa lista en un conjunto para eliminar los repetidos.
  2. Imprime cuántos usuarios únicos tienes usando len(), el conteo rápido que conociste en la sección de Listas.

Pista 1: existe una función que envuelve cualquier lista y automáticamente descarta los valores repetidos.

Pista 2: convertir la lista a set elimina los duplicados de un golpe; contar ese conjunto te dice cuántos elementos únicos quedaron.

Ejercicio 5.4: Datos Intocables (Tuplas)

Escenario: Estás definiendo los colores base de tu app.

  1. Crea una tupla: colores_primarios = ("Rojo", "Azul", "Amarillo").
  2. Intenta cambiar “Rojo” por “Verde” y observa el error que ocurre. Copia el mensaje de error como un comentario en tu código (la sintaxis de comentarios con # que ya usaste en el Cap. 3).

Pista 1: prueba la misma sintaxis de reemplazo por índice que usarías en una lista, colores_primarios[0] = "Verde", y observa qué pasa.

Pista 2: Python lanza un TypeError cuyo mensaje incluye la frase “does not support item assignment”; ese es justo el texto que debes copiar como comentario.

Ejercicio 5.5: El Sistema Integrado (Reto Final)

Combina todo lo aprendido. Crea un script que tenga:

  1. Una lista de diccionarios, donde cada diccionario representa un estudiante.
    estudiantes = [
        {"nombre": "Ana", "calificacion": 90},
        {"nombre": "Beto", "calificacion": 85}
    ]
    
  2. Agrega un nuevo estudiante a la lista (tú mismo).
  3. Imprime el nombre del primer estudiante de la lista.

Pista 1: una lista de diccionarios sigue siendo una lista; agregar un estudiante nuevo usa el mismo método que agregarías a cualquier lista, solo que el elemento es un diccionario completo.

Pista 2: para agregarte, usa .append() con un diccionario nuevo de la misma forma que los demás (imprime len(estudiantes) antes y después para confirmar que se sumó); para el nombre del primero, encadena primero el índice de la lista y luego la clave del diccionario (lista[i]["clave"]).

Ejercicio 5.6: El Diccionario Seguro (.get e .items)

Tienes producto = {"nombre": "Tornillos", "precio": 5.5}.

  1. Imprime el valor de la clave "descuento" con .get(), usando "sin descuento" como respaldo (esa clave no existe).
  2. Recorre el diccionario con .items() e imprime cada pareja como clave: valor. (Recorrer es tema del Capítulo 8: aquí solo copia el bloque de la sección “Recorrer el Banco” y ajústalo.)
  3. Comprueba con in si existe la clave "stock".

Pista 1: hay un método de diccionario que te deja pedir una clave que quizá no exista sin que explote un KeyError, y sin necesitar un if antes.

Pista 2: .get() acepta un segundo argumento que se usa como valor por defecto cuando la clave no existe; para recorrer pares, .items() te entrega la clave y el valor en cada vuelta.

Ejercicio 5.7: Rebanando el Estante (Slicing de listas)

Tienes estante = ["Martillo", "Taladro", "Sierra", "Clavos", "Cinta"]. Imprime:

  1. Las dos primeras herramientas.
  2. La última, sin contar cuántas hay.
  3. Las dos últimas.
  4. Todas menos la primera.

Pista 1: el slicing usa dos puntos dentro de los corchetes (lista[inicio:fin]); omitir un lado significa “desde el principio” o “hasta el final”. Para contar desde el final sin saber cuántos elementos hay, existen los índices negativos.

Pista 2: para las dos primeras, corta desde el inicio hasta el índice 2; para la última, un solo índice negativo; para las dos últimas, un inicio negativo; para todas menos la primera, empieza el corte en 1.

Ejercicio 5.8: El Reparto (Unpacking)

  1. Crea la tupla envio = ("PRD-101", "Tornillos", 500).
  2. Desempácala en tres variables: codigo, nombre, cantidad, e imprime cada una.
  3. Ahora el clásico: crea a = "Pasillo 1" y b = "Pasillo 2", e intercámbialas en UNA sola línea (sin variable temporal). Imprime ambas para confirmar el intercambio.

Pista 1: Python puede asignar varios valores a la vez si el número de variables a la izquierda coincide con el número de elementos a la derecha.

Pista 2: desempaca la tupla asignándola a varios nombres separados por comas en una sola línea; el intercambio de dos variables es un caso especial de ese mismo truco. Python arma el lado derecho completo antes de reasignar.

Ejercicio 5.9: Las Dos Etiquetas (Aliasing y .copy())

El bug de la copia que no copia, provocado a propósito para que lo reconozcas:

  1. Crea original = ["Martillo", "Sierra"] y luego respaldo = original (sin .copy()).
  2. Antes de tocar nada: si agregas "Taladro" a respaldo, ¿qué crees que va a contener original? Anota tu predicción.
  3. Agrega "Taladro" a respaldo, imprime original y compara con lo que predijiste. ¿Qué pasó y por qué?
  4. Repite el experimento, pero ahora crea el respaldo con original.copy(). Comprueba que esta vez el original queda intacto.
  5. Verifica ambas situaciones con is (¿son el mismo estante o dos distintos?). Adelanto: is pregunta si son el mismo estante; el Capítulo 6 lo formaliza.

Pista 1: respaldo = original no crea una lista nueva; ambos nombres terminan apuntando al mismo estante en memoria, así que modificar uno afecta al otro.

Pista 2: .copy() (o list(original)) sí crea un estante independiente con el mismo contenido, así que modificar uno no toca al otro; comprueba ambos casos con original is respaldo, que da True mientras compartan estante y False en cuanto uses .copy(). Esa es la prueba definitiva, más confiable que solo mirar el contenido.


Soluciones: en el Apéndice B está la solución de cada ejercicio. Inténtalo por tu cuenta antes de consultarla.


Con las cajas y los muebles organizados, en el siguiente capítulo le damos verbos al almacén: los operadores que calculan, comparan y combinan todo lo que ya sabes guardar.