Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
Jeneratörler
Bir Jeneratör Oluşturma
Bazen bir değeri tek seferlik bir çıktı yerine tutarlı bir şekilde üretmek isteyebilirsiniz. Fonksiyonların çalışma şekline benzer şekilde, jeneratörler yazılır ve aynı şekilde çalıştırılırlar, ancak bir çıktı ürettiklerinde return() yerine yield() kullanırlar.
Bu alıştırmada, sütleri ahırdaki tanklardan şişelere doldurmanız gerekiyor. Şişeleri doldururken yineleyici bir şekilde jeneratör kullanın ve tanklardan herhangi bir fazla sütü topladığınızdan emin olun.

Amaç
Jeneratörleri kullanarak süt tanklarını pompalayıp şişeleri sütle doldurun.
İnek sütünü depolayan makineler neredeyse dolu, sütün bozulmadan önce şişelenmesi ve depolanması gerekiyor. Normal yöntemlerle bu biraz zor bir görev olabilir ve çıkarabileceğiniz süt miktarı biraz değişkenlik gösterebilir. Neyse ki bu süreci sorunsuz ve doğrudan hale getirmek için jeneratörleri kullanabilirsiniz.
İki (2) süt tankı var ve bunların sütleri pompalanıp şişelenmeli. Her makine süt depolayan bölmelere sahiptir, bunlar tank_a ve tank_b adlı liste sabitleriyle temsil edilir. Ayrıca, her tankın toplayabileceğiniz bir fazlası olur.
Jeneratörler, çıktıları için return yerine yield kullanarak aynı sözdizimi ile fonksiyonlar gibi çalışır. fill() adında ve list argümanıyla kurulmuş bir jeneratör ayarlayın, bu yukarıdaki paragrafta belirtilen sabitleri girdiğiniz yer olacaktır.
def fill(list):
for x in range(3):
yield list[x]
yield 5
Jeneratör, makinedeki bölmeleri temsil eden üç (3) alanın liste sabitlerinden verilerini okur ve sonunda beş (5) olan bir fazlalık ekler.
Sütü doldurmak için gerekli şişelere erişmek için alanının içindeki sepet nesnesini toplayın ve sütü toplamak için iki (2) X işaretine doğru yürüyün.
yield ifadesi sayesinde jeneratörden üretilen değerler bir for döngüsünden doğrudan okunabilir. "milk"i makineden almak için collect() fonksiyonunu kullanan bir for döngüsü kurun. Ardından her şişede ne kadar süt depolandığını kontrol etmek için speak() kullanın. Örneğin:
for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))
Bu for döngüsünü her iki X işaretinde de yazın ve kullanın, açık X işaretinde tank_a argümanını ve koyu X işaretinde tank_b argümanını kullanarak bölümü bitirin.