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
Finalizando uma Exceção

Objetivo

Vá para o escritório e certifique-se de que o suprimento de dinheiro esteja devidamente equilibrado utilizando o bloco de código finally e a palavra-chave assert.

Lá no fundo do segundo andar, um escritório é dedicado a armazenar fundos para futuros investimentos na fazenda. Já está na hora de conferir e garantir que todos os registros estejam equilibrados. Ao lidar com números, erros matemáticos e outras questões inevitavelmente ocorrerão, então, mais uma vez, o tratamento de exceções é uma boa ideia para capturar e resolver erros.

Além dos blocos de código try / except e else, existe também o bloco de código finally que permite encerrar uma exceção. Além disso, a palavra-chave assert é um recurso de depuração que permite verificar se um código possui erros, permitindo que você conserte um código defeituoso.

Comece caminhando até a marca X iluminada em frente à porta do escritório e use a função open() para abrir a porta e entrar. Uma vez dentro, dirija-se à marca X dourada e use a função collect() para pegar duas constantes diferentes nomeadas: categories e savings. A constante categories é uma lista que contém o suprimento de dinheiro de três categorias, nomeadas: "exports", "imports", "stock", que precisam ser verificadas. A constante savings é uma variável que contém o suprimento de dinheiro que pode ser necessário para garantir que os cofres estejam devidamente abastecidos.

Agora que todos os itens necessários foram coletados, é hora de equilibrar o suprimento de dinheiro armazenado em sacos, que serão coletados e distribuídos por um funcionário depois que você terminar. Caminhe até a marca X escura sobre o carpete azul, para as marcas X sobre os carpetes azul, amarelo e vermelho. Aqui, usaremos a constante de lista categories para verificar se cada saco possui todos os componentes necessários antes de ser despachado.

Cada saco deve conter os componentes listados na constante categories. Existem três constantes do tipo dicionário que correspondem a cada saco: blue_sack, yellow_sack e red_sack. Execute um laço for enquanto estiver na marca X sobre o carpete azul para verificar se o saco possui todos os materiais exigidos e, em seguida, confirme que o suprimento está contabilizado.

for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")

Alguns dos sacos devem conter todos os materiais exigidos, mas, como de costume nestes exercícios, você pode encontrar um erro. Se encontrar um problema, você deve usar os blocos de código try / except para capturar o erro, neste caso um KeyError:, que ocorre se uma chave de dicionário não for encontrada. Quando isso acontecer, adicionamos também o finally à exceção, que encerra o tratamento adicionando um código que sempre é executado ao final de cada tratamento de exceção. Ao contrário das exceções, pode haver apenas um bloco finally por try. Por exemplo, no caso do blue_sack:

try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")

Repita este processo nas marcas X escuras sobre os carpetes amarelo e vermelho, utilizando as constantes do dicionário yellow_sack e red_sack. Em alguns casos, isso pode não ser necessário, pois o erro ocorre somente se houver um item faltando nos sacos.

Agora que os sacos foram verificados, é hora de passar para os baús em frente aos carpetes: verde, roxo e laranja. Aqui devemos garantir que o suprimento de dinheiro seja exatamente 30 em cada baú e, em seguida, fechá-los. Existem três constantes variáveis correspondentes a cada baú, nomeadas: green_chest, purple_chest e orange_chest.

O maior desafio ao verificar os baús é que não conhecemos seu conteúdo exato; quando você lida com valores desconhecidos, pode usar a palavra-chave assert. Essa palavra-chave permite verificar se a afirmação que você está declarando é verdadeira ou falsa, o que é muito útil para identificar se o seu código possui erros. A palavra-chave assert é utilizada em conjunto com: try, except, else e final e suas várias combinações para corrigir códigos com erros. Por exemplo, no caso do green_chest:

try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()

No código acima, verificamos se o green_chest contém a quantidade correta de dinheiro utilizando a palavra-chave assert. Se não contiver a quantidade correta, o bloco except é acionado e calculamos, em seguida, subtraímos o suprimento faltante da variável savings e o adicionamos ao baú. Se o suprimento estiver completo, o bloco else é acionado e confirma que todos os ativos foram contabilizados. Uma vez verificado tudo, o bloco finally é executado e a função close() é chamada para fechar o baú.

Nas marcas X sobre os carpetes verde, roxo e laranja, posicione-se de frente aos baús e execute a verificação utilizando: green_chest, purple_chest, orange_chest nos respectivos carpetes coloridos. Depois de concluído, caminhe até a marca X iluminada e use a função place() para armazenar o restante da variável savings na caixa, a fim de completar o nível.

Livro de Código