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

Geradores
Criando um Gerador

Às vezes, você pode querer gerar valores de forma consistente, em vez de apenas uma saída única. De maneira semelhante ao funcionamento das funções, os geradores são escritos e executados da mesma forma, exceto que utilizam yield() em vez de return() ao produzir uma saída.

Neste exercício, você deve encher garrafas com leite dos tanques no estábulo. Use um gerador para iterar enchendo as garrafas e garantindo que qualquer leite excedente seja coletado dos tanques.

Guide

Objetivo

Encher garrafas com leite bombeando os tanques de leite usando geradores.

As máquinas que armazenam o leite de vaca estão quase cheias, você precisa engarrafar o leite e armazená-lo antes que estrague. Isso pode ser um pouco complicado usando meios normais e a quantidade de leite que você pode extrair pode variar um pouco. Felizmente, você pode usar geradores para tornar esse processo suave e direto.

Existem dois (2) tanques com leite que precisam ter seu leite bombeado e engarrafado. Cada máquina tem compartimentos que armazenam leite, estes são representados por constantes de lista chamadas: tank_a e tank_b. Além disso, cada tanque tende a ter um excedente que você pode coletar.

Geradores seguem a mesma sintaxe que as funções, mas usarão yield em vez de return para sua saída. Configure um gerador chamado fill() e defina-o com o argumento list, este seria onde você insere as constantes mencionadas no parágrafo acima.

def fill(list): for x in range(3): yield list[x] yield 5

O gerador lê os dados dos três (3) campos nas constantes de lista, representados pelos compartimentos na máquina, e adiciona um excedente no final que é cinco (5).

Colete o objeto cesta no campo para ganhar acesso às garrafas necessárias para encher e caminhe até as duas (2) marcas de X para coletar o leite usando um loop for.

Graças à declaração yield, os valores produzidos a partir do gerador podem ser lidos diretamente de um loop for também. Configure um que use a função collect() para adquirir o "leite" da máquina. Em seguida, use speak() para verificar quanto leite cada garrafa armazenou. Por exemplo:

for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))

Escreva e use este loop for em ambas as marcas de X, na marca X clara use o argumento tank_a e na marca X escura use o argumento tank_b para completar o nível.

Livro de Código