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"].
- Usa un bucle
forpara recorrer la lista. - Cuenta cuántas veces aparece cada producto, guardando los conteos en un diccionario (Cap. 5) en lugar de contar solo
"Manzana". - 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.
- Inicia una variable en 10.
- Mientras sea mayor que 0, imprime el número y réstale 1.
- 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
whileque siga mientras el contador sea mayor que 0, imprimiendo y restando 1 en cada vuelta. Elprint("¡Despegue!")va después, al mismo nivel de indentación que elwhile, 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:
rangeexcluye su límite superior, así que para llegar al 10 el segundo número tiene que ser 11. Usarrange(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
continuepara 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 unifextra.Pista 2: al principio del cuerpo del bucle, usa
continuepara saltar los negativos; los que pasan esa comprobación llegan al
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 bucleforde varias líneas.Pista 2: dentro de los corchetes, la expresión multiplica cada dólar por el tipo de cambio y el
forrecorre 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:
enumeratete 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; elstart=1evita 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:
zipcombina 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"].
- Con el patrón de la bandera, detecta si hay al menos una caja
"DAÑADA"y detén la búsqueda conbreaken cuanto aparezca. - Después del bucle, imprime “Lote rechazado” o “Lote aprobado” según la bandera.
- 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
Falsey se vuelveTrueen 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
breakpara cortar de inmediato sin revisar el resto; para el bonus, combina la bandera conenumerateasí capturas también la posiciónien el mismo momento delbreak.
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:
- Dentro de un
while True, imprime dos opciones:1. Saludary2. Salir. - Lee la elección con
input(). - Si elige
1, imprime un saludo y vuelve a mostrar el menú; si elige2, despídete y rompe el bucle conbreak; cualquier otra cosa, avisa que la opción no existe.
Pista 1:
while Truecrea un bucle infinito a propósito; la única forma de salir es con unbreakexplícito dentro de una condición.Pista 2: una de las ramas del menú usa
breakpara salir del bucle; las demás (if/elif/else) se quedan dentro del mismowhile Truepara que el menú se repita solo.
Nota: El Ejercicio 8.5 te costó una fracción del código que habría exigido un
forconvencional. 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.