Coding for KidsCoding for Kids
Níveis CriativosDesafiosGuia do Professor
Votar em funcionalidades
Curso Avançado de Desenvolvimento Python
Capítulo
>
Nível

Tratamento de Exceções
Cláusula Else

Objetivo

Pegue os materiais de reparo, separe-os e, em seguida, descarte os resíduos indesejados utilizando a cláusula else com tratamento de exceção.

Alguns materiais de reparo foram armazenados no topo do edifício e são usados para reparar o telhado após tempestades ou desgaste geral. Alguns foram entregues recentemente e ainda estão guardados em embalagens e contêineres, enquanto outros foram armazenados por muito tempo e foram jogados junto com o lixo. Seria uma boa ideia separar os materiais, armazená-los corretamente e descartar o lixo e os resíduos.

Devido à natureza dos materiais desorganizados, é provável que ocorram erros. Você pode resolver isso utilizando o bloco de código try / except, embora possa ser um pouco complicado se você não estiver familiarizado com os erros que podem ocorrer. Contudo, você pode ampliar suas ferramentas de tratamento de exceção adicionando a cláusula else. Isso permite que você execute um código caso o bloco except não seja executado, possibilitando simplificar seu código, sendo muito adequado para identificar e corrigir erros.

Para começar, você deve ir até o depósito à esquerda e caminhar em direção à marca X clara. Esta sala armazena telhas usadas para reparar as telhas do telhado. Use a função collect() para pegar a constante de lista chamada shingles.

A lista provavelmente possui vários materiais indesejados misturados, que precisam ser removidos, pois estão armazenados em seis (6) compartimentos diferentes, cada um com sua própria quantidade de materiais. Você precisa consolidar todos os materiais em uma única pilha. Crie uma variável chamada red_storage para armazenar todos os materiais e uma lista chamada junk para depositar todos os resíduos.

Normalmente, você apenas identificaria os materiais, os converteria em números inteiros usando int() e os armazenaria em uma variável para que pudesse guardá-los. Mas, como você provavelmente espera, considerando os níveis anteriores do capítulo e o assunto deste exercício, é inevitável que ocorra um erro.

for x in range(6): player.speak(int(shingles[x])) red_storage+=int(shingles[x])

Isso infelizmente gerará um Value Error, já que alguns dos itens na lista parecem não ser números; para resolver isso, você pode usar os blocos de código try / except e else para organizar os materiais. Ao utilizar o bloco else, transformamos efetivamente o bloco except em um filtro que elimina os elementos indesejados da lista, enquanto o bloco else captura e transfere os elementos corretos da lista para a variável que criamos.

for x in range(6): try: player.speak(int(shingles[x])) except: player.speak("Item %s is junk" % (x)) junk.append(shingles[x]) else: red_storage+=int(shingles[x])

Com isso, a variável red_storage agora possui todas as telhas utilizáveis, enquanto todo o lixo foi adicionado à lista junk. Caminhe até a marca X dourada no depósito à esquerda em que você se encontra, e use a função write() para registrar o número de telhas para armazenamento, assim: await player.write("There are %s shingles ready for use in storage" % (red_storage)). Em seguida, caminhe até a marca X escura sobre o tapete vermelho e use a função place() para armazenar a variável red_storage na caixa.

Após concluir essa tarefa, dirija-se ao depósito à direita, que armazena tábuas de madeira e materiais necessários para reparar estruturas de telhado e parede. Siga para a marca X escura sobre o tapete verde e use a função collect() para pegar a constante de lista denominada planks_set da caixa; essa lista contém tábuas que já foram limpas de qualquer resíduo. Caminhe até a marca X clara ao lado dela e use a função collect() novamente para pegar outra constante de lista chamada shipment, que contém materiais de tábuas que foram enviados recentemente e ainda possuem alguns resíduos.

Assim como na sala anterior, a lista shipment provavelmente possui vários materiais indesejados misturados que precisam ser removidos. Assim como antes, eles estão armazenados em seis (6) compartimentos diferentes, cada um com sua própria quantidade de materiais. Crie uma variável chamada blue_storage para armazenar todos os materiais para que você possa consolidá-los em uma única pilha. Como antes, os resíduos serão depositados na lista junk.

Para as tábuas, vamos converter e somar todos os materiais úteis da lista shipment e adicioná-los à lista planks_set, em seguida, consolidá-los todos, usando int(), na variável blue_storage. No entanto, assim como antes, espera-se que ocorram erros.

for y in range(6): planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) blue_storage+=int(planks_set[y])

Desta vez, você pode esperar um Type Error; isso acontece quando você tenta adicionar números e strings juntas. Isso pode ser tratado, mais uma vez, utilizando os blocos de código try / except e else: o try adiciona as listas, o bloco except filtra o lixo da lista e a cláusula else adiciona as tábuas à variável blue_storage.

for y in range(6): try: planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) except: player.speak( "Item %s is junk. Slot only has %s items" % (y,planks_set[y])) junk.append(shipment[y]) else: blue_storage+=int(planks_set[y])

Agora que a variável blue_storage está populada, você pode documentar e armazenar todas as tábuas de madeira. Caminhe até a marca X dourada no depósito à direita em que você está, vire-se para a mesa e use a função write() para contabilizar os materiais consolidados, assim: await player.write("There are %s planks ready for use in storage" % (blue_storage))

Para finalizar o nível, caminhe até a marca X escura no tapete azul e use a função place() para armazenar a variável blue_storage na caixa. Em seguida, caminhe até a marca X escura sobre o tapete roxo na câmara central e use a função place() para descartar a lista junk no canal de resíduos, concluindo sua tarefa.

Livro de Código