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

Geradores
Enviando dados para um Gerador

Objetivo

Recolher lã e fiá-la em fio usando as fusos ao enviar dados para um gerador.

Algumas das ovelhas estão ficando um pouco peludas demais, seria melhor tosquiá-las e recolher sua lã. Você pode então colocar a lã através de uma fuso para produzir fio. Para conseguir isso, precisamos usar um gerador, já que as quantidades de fio e lã processadas podem variar muito.

Primeiro, defina um gerador capaz de fiar fio, nomeando-o spin(), esse gerador precisa ser configurado para usar entrada externa para funcionar. Ele lê dados de yield e armazena-os em uma variável, depois modifica seu conteúdo aumentando seu comprimento a cada ciclo, finalmente produzindo um resultado.

def spin(): cycle = 1 while True: cycle += 1 yarn = yield yarn = yarn * cycle yield player.speak("You've spun %d ft of yarn" % (yarn))

Como este é um gerador, a instrução while() dentro pode ser pausada e modificada para produzir a saída que queremos, esse nível de controle está no cerne do que é um gerador e como ele pode ser útil ao processar dados. Para inserir dados no gerador, defina-o e use a função send() para alimentá-lo com quaisquer dados desejados, por exemplo:

spindle = spin() # Crie uma instância do gerador next(spindle) # Execute o gerador um único passo spindle.send(6) # Insira dados no gerador # Neste caso, você está enviando o número 6

Caminhe até o X indicado pela luz nos tapetes coloridos e enfrente as ovelhas. Existe uma constante de dicionário chamada sheep que contém o valor de quanto lã você pode tosquiar de cada ovelha. Use a função speak() com o dicionário e a cor do tapete em que você está, para tosquiar a lã das ovelhas e verificar quanto você reuniu. Por exemplo: player.speak(sheep["green"]) .

Existem quatro (4) tapetes coloridos no total: "green" , "red" , "blue" e "orange" . Depois de tosquiar as ovelhas, caminhe até os X escuros indicados por cada tapete colorido onde as fusos estão localizadas. Use send() para inserir o número de libras de lã tosquiada de cada ovelha em sua respectiva cor no gerador.

Por exemplo, se ao tosquiar as ovelhas no tapete "green", você tosquia 4 libras de lã, vá para o tapete "green" perto das fusos e envie esses dados para o gerador, assim:

next(spindle) spindle.send(4)

Faça isso para todos os quatro (4) X escuros nos tapetes coloridos para completar o nível.

Livro de Código