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: Automatización Industrial

Pon a trabajar a los robots.


Ejercicio 8.1: El Contador de Inventario (for)

Tienes una lista de productos: ["Manzana", "Pera", "Manzana", "Uva", "Manzana"].

  1. Usa un bucle for para recorrer la lista.
  2. Cuenta cuántas veces aparece cada producto, guardando los conteos en un diccionario (Cap. 5) en lugar de contar solo "Manzana".
  3. Imprime el diccionario final.

Pista 1: necesitas un lugar donde guardar un conteo por cada producto distinto, no solo una variable suelta para “Manzana”.

Pista 2: dentro del for, lee el conteo actual con .get(producto, 0) (0 si es nuevo), súmale 1 y guárdalo de vuelta en la clave. Así funciona esté o no ya el producto en el diccionario.

Ejercicio 8.2: La Cuenta Regresiva (while)

Simula el despegue de un cohete.

  1. Inicia una variable en 10.
  2. Mientras sea mayor que 0, imprime el número y réstale 1.
  3. Al final, fuera del bucle, imprime “¡Despegue!”.

Pista 1: el bucle revisa la condición antes de cada vuelta; asegúrate de restarle a la variable dentro del bucle, no fuera, o nunca terminará.

Pista 2: un while que siga mientras el contador sea mayor que 0, imprimiendo y restando 1 en cada vuelta. El print("¡Despegue!") va después, al mismo nivel de indentación que el while, no adentro.

Ejercicio 8.3: Tablas de Multiplicar

Pídele al usuario un número (o defínelo tú, ej: 7). Usa un for y range para imprimir la tabla del 1 al 10 de ese número.

  • Ejemplo: 7 x 1 = 7, 7 x 2 = 14

Pista 1: range() necesita saber dónde empezar y dónde detenerse; el límite superior que le des nunca se incluye en el resultado.

Pista 2: range excluye su límite superior, así que para llegar al 10 el segundo número tiene que ser 11. Usar range(1, 10) te dejaría sin la fila del 10.

¡Ojo!: el error de “uno de más o uno de menos” (off-by-one) en range(). range(1, 10) genera del 1 al 9, no al 10, porque el límite superior siempre queda fuera. Si necesitas llegar hasta el 10 inclusive, el segundo argumento debe ser 11: range(1, 11).

Ejercicio 8.4: Filtrando Basura (continue)

Tienes una lista de números: datos = [10, 50, -5, 20, -10, 30]. Recórrela e imprime solo los números positivos.

  • Reto: Usa continue para saltar los negativos.

Pista 1: hay una palabra clave que salta el resto del cuerpo del bucle sin salir de él; con eso no necesitas envolver el print() en un if extra.

Pista 2: al principio del cuerpo del bucle, usa continue para saltar los negativos; los que pasan esa comprobación llegan al print normal.

Ejercicio 8.5: Prensa Industrial (Comprehension)

Tienes una lista de precios en dólares: dolares = [10, 20, 50]. Crea una nueva lista pesos multiplicando cada valor por 20, usando List Comprehension (una sola línea). Imprime la nueva lista.

Pista 1: hay una forma de construir esta lista nueva en una sola línea, sin .append() ni un bucle for de varias líneas.

Pista 2: dentro de los corchetes, la expresión multiplica cada dólar por el tipo de cambio y el for recorre la lista original, todo en una línea.

Ejercicio 8.6: La Lista Numerada (enumerate)

Tienes productos = ["Martillo", "Taladro", "Sierra"]. Usa enumerate para imprimir una lista numerada que empiece en 1: 1. Martillo, 2. Taladro, 3. Sierra.

Pista 1: enumerate te entrega automáticamente el índice y el valor en cada vuelta, sin que tengas que llevar la cuenta a mano con una variable aparte.

Pista 2: enumerate(productos, start=1) te da el índice y el elemento en cada vuelta; el start=1 evita que la numeración empiece en 0.

Ejercicio 8.7: Precios Emparejados (zip)

Tienes dos listas en paralelo: productos = ["Martillo", "Taladro", "Sierra"] y precios = [50, 120, 80]. Usa zip para recorrerlas juntas e imprimir Martillo: $50, y así con cada par.

Pista 1: zip combina dos listas posición por posición, generando pares sin que tengas que indexar ninguna de las dos a mano.

Pista 2: zip(productos, precios) recorre las dos listas en paralelo, dándote un elemento de cada una por vuelta.

Ejercicio 8.8: La Inspección con Bandera (break)

Llegó el cargamento lote = ["ROJA", "AZUL", "DAÑADA", "VERDE", "DAÑADA"].

  1. Con el patrón de la bandera, detecta si hay al menos una caja "DAÑADA" y detén la búsqueda con break en cuanto aparezca.
  2. Después del bucle, imprime “Lote rechazado” o “Lote aprobado” según la bandera.
  3. Bonus: imprime también en qué posición apareció el primer daño (te sirve enumerate).

Pista 1: el patrón de bandera necesita una variable booleana que empieza en False y se vuelve True en cuanto se cumple la condición buscada.

Pista 2: recorre el lote y, en cuanto encuentres la caja dañada, marca la bandera y usa break para cortar de inmediato sin revisar el resto; para el bonus, combina la bandera con enumerate así capturas también la posición i en el mismo momento del break.

Ejercicio 8.9: El Mini Mostrador (while True + menú)

El esqueleto del proyecto final, en miniatura. Construye un menú que repita para siempre hasta que el usuario decida salir:

  1. Dentro de un while True, imprime dos opciones: 1. Saludar y 2. Salir.
  2. Lee la elección con input().
  3. Si elige 1, imprime un saludo y vuelve a mostrar el menú; si elige 2, despídete y rompe el bucle con break; cualquier otra cosa, avisa que la opción no existe.

Pista 1: while True crea un bucle infinito a propósito; la única forma de salir es con un break explícito dentro de una condición.

Pista 2: una de las ramas del menú usa break para salir del bucle; las demás (if/elif/else) se quedan dentro del mismo while True para que el menú se repita solo.


Nota: El Ejercicio 8.5 te costó una fracción del código que habría exigido un for convencional. Eso no es un truco de sintaxis; es Python diciéndote que hay una forma más directa de pensar el problema.


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


Cuando un bucle anidado crece demasiado, o cuando te sorprendes copiando el mismo procedimiento en varios lugares, es señal de que ese bloque merece su propio nombre. Eso es justo lo que trae el siguiente capítulo: las funciones.