Curso Avançado de Desenvolvimento Python
Capítulo
>
Nível
Geradores
Avançando manualmente um Gerador
Objetivo
Use um gerador em uma sequência manual para juntar e produzir materiais para fazer pão.
Adiante, há uma instalação onde você pode juntar uma massa de pão usando as prensas. Normalmente, você usaria a função combine() para juntar materiais, mas não é o caso aqui; os materiais precisam ser refinados primeiro antes de serem juntados.
Para esta tarefa, podemos usar geradores, pois eles podem ser personalizados para gerar diferentes tipos de arquivos, bem como ter sua sequência chamada sob comando, em vez de gerar automaticamente, como funções e loops fazem. Aqui está um exemplo:
def bread():
yield 5
yield "grain"
O código acima tem um gerador com duas declarações yield, uma das quais produz um número real e outra uma string. Podemos produzir os valores do gerador conforme desejado usando a função next(). Assim:
recipe = bread() # Configura o Gerador player.place(next(recipe)) # Primeiro valor é chamado player.collect(next(recipe)) # Segundo valor é chamado
No exemplo acima, o gerador é configurado e a função next() é usada com o gerador para chamar o primeiro valor yield para uso em uma função place(). Isso se repete com o segundo valor, mas é usado em uma função collect(). Isso facilita chamar valores de vários tipos em uma sequência sem precisar usar múltiplas listas ou variáveis.
Um gerador chamado bread() será definido no editor de código, mas ele precisará de números de quantidade para cada ingrediente para que você refine a massa de pão. Esses números estão escritos na placa ao lado da instalação. Configure o gerador para uso referenciando-o, assim: recipe = bread()
Primeiro caminhe até a marca de X de luz ao lado do tanque de leite e collect() o restante do leite no tanque usando a função gerador next(), assim: player.collect(next(recipe)). Em seguida, caminhe até a marca de X dourada ao lado da placa e use a função speak() para obter os números de quantidade necessários para o gerador produzir o pão e escreva-os no gerador. Os dados estão armazenados em uma constante chamada "sign" e seriam chamados assim: player.speak(sign).
Uma vez que todos os valores são inseridos no gerador, entre na instalação e use player.place(next(recipe)) em marcas de X escuras e player.collect(next(recipe)) em marcas de X claras para completar o nível.