Coding for KidsCoding for Kids
Niveles CreativosDesafíosGuía del Maestro
Votar por funciones
Curso Avanzado de Desarrollo en Python
Capítulo
>
Nivel

Manejo de Excepciones
Excepciones Múltiples

Objetivo

Recoge y almacena correctamente algunos suministros médicos en cajas utilizando múltiples excepciones.

Los almacenes en el techo necesitan ser reabastecidos, algunos de los suministros se usaron pero nunca se reemplazaron. Se ha realizado un pedido de más materiales mediante un memorándum en uno de los almacenes; sería buena idea encargarse de ello. Dicho esto, hay una variedad de materiales que deben juntarse y almacenarse en cajas.

Debido a los diferentes tipos de datos y a la cantidad de materiales necesarios para llenar las cajas, podemos encontrar varios errores. Podemos usar try / except para capturar cualquier error posible y solucionar algunos problemas, pero ¿qué sucede cuando existen múltiples errores que pueden ocurrir en una sola operación? Para abordar esto, podemos especificar qué excepciones intentamos capturar y usar múltiples excepciones.

Para comenzar, camina hasta la marca X dorada y enfréntate a la puerta, usa la función open() para entrar al almacén. Una vez dentro, camina hacia la marca X oscura y gira a la derecha para usar la función read() y verificar qué materiales y cantidades se están ordenando en el memorándum sobre la mesa. La información sobre las constantes de lista está escrita en el memorándum, incluyendo los suministros y sus pedidos correspondientes. Una vez hecho, camina hacia la marca X clara dentro del almacén, gira hacia la caja y toma la constante de lista pads de materiales usando la función collect(), de esta manera: player.collect(pads) .

Dentro del almacén hay existencias de "peroxide" e "isopropyl", camina y recógelos todos, luego dirígete afuera y camina hacia la marca X oscura sobre una alfombra morada. Sobre la alfombra morada, mientras enfrentas la caja, usa la función collect() para tomar "water bottle", continúa hacia la marca X oscura sobre la alfombra amarilla y usa la función collect() para tomar "glass bottle".

Ahora que los ítems han sido recogidos, es momento de cumplir el pedido y colocar todos los materiales dentro de las cajas del almacén en la parte derecha. Para hacer esto, primero almacenaremos en la lista supplies lo siguiente: "water bottle", "peroxide" e "isopropyl". En las marcas X oscuras sobre las alfombras red, green y blue usaremos las cajas para guardar los suministros médicos. Para ello, configuraremos tres listas: blue_crate = [], green_crate = [] y red_crate = [].

Antes de colocar todos los ítems, debemos llenar todas las listas con los materiales; para ello vamos a usar un bucle para iterar a través de las listas y combinarlas en una sola lista. Esto colocará todos los supplies en la lista y dividirá la cantidad de ítems de pads según el order en el memorándum del almacén.

for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])

A pesar de esto, notarás que aparecerán errores, a pesar de que todo se está haciendo correctamente y el código es correcto. Sin embargo, aquí está el problema: la lista supplies solo tiene tres (3) ítems, pero el bucle se ejecuta cinco (5) veces, causando un Error de Índice. Mientras, la lista pads no solo tiene tres (3) ítems, sino que además uno de los valores de order es 0; cualquier número dividido por 0 causa un Error de División por Cero, ya que ningún número puede dividirse por 0 en matemáticas.

Aquí es donde las múltiples excepciones son útiles. Usamos los bloques de código try / except para capturar los errores y permitirnos continuar con el código. Dado que ocurren dos errores, debemos identificar cada error para capturar las excepciones específicas. Esto se hace ampliando los bloques except de la siguiente manera: except IndexError: y except ZeroDivisionError:. Por ejemplo:

for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)

El Error de Índice se corrige llenando los espacios faltantes en la lista con "glass bottle" y el Error de División por Cero se soluciona añadiendo un valor de 0 si ocurre la acción ilegal.

Haz lo mismo para las listas blue_crate = [], green_crate = [] y red_crate = []. Camina hacia la marca X oscura sobre las alfombras blue, green y red y usa la función place() para almacenar las listas en las cajas correspondientes y completar el nivel.

Libro de Código