Coding for KidsCoding for Kids
Yaratıcı SeviyelerZorluklarÖğretmen Kılavuzu
Özellikler için oy verin
Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye

Jeneratörler
Bir Üreteci Manuel Olarak İlerletmek

Amaç

Ekmek yapmak için malzemeleri bir araya getirip üretmek amacıyla jeneratör kullanın.

Önünüzde, presleri kullanarak ekmek hamuru hazırlayabileceğiniz bir tesis var. Normalde malzemeleri bir araya getirmek için combine() fonksiyonunu kullanırsınız ancak burada durum farklı; malzemeler birleştirilmeden önce işlenmelidir.

Bu görev için jeneratörleri kullanabiliriz çünkü jeneratörler, farklı dosya türlerini çıktı olarak vermek üzere özelleştirilebilir ve işlevler ile döngüler gibi otomatik olarak çıktı vermek yerine komut üzerine sıra ile çağrılabilir. İşte bir örnek:

def bread(): yield 5 yield "grain"

Yukarıdaki kod, içerisinde iki yield ifadesi bulunan bir jeneratör tanımlamaktadır; bunlardan biri bir gerçek sayı, diğeri ise bir dize üretiyor. Jeneratörün değerlerini next() fonksiyonunu kullanarak istediğimiz zaman üretebiliriz. Örneğin:

recipe = bread() # Jeneratör kurulur player.place(next(recipe)) # İlk değer çağrılır player.collect(next(recipe)) # İkinci değer çağrılır

Yukarıdaki örnekte jeneratör kurulmuş ve jeneratördeki ilk yield değeri place() fonksiyonunda kullanılmak üzere çağrılmıştır. Bu, ikinci değer için de tekrarlanır ancak bu sefer collect() fonksiyonunda kullanılır. Bu, farklı türdeki değerleri, birden fazla liste veya değişken kullanmak zorunda kalmadan sırayla çağırmayı kolaylaştırır.

Koddaki jeneratör bread() ismiyle tanımlanmış olacak, ancak ekmek hamurunu işleyebilmeniz için her bileşen için miktar numaralarına ihtiyaç duyacaktır. Bu numaralar, tesisin yanındaki tabelada yazılıdır. Jeneratörü kullanıma hazır hale getirmek için onu referans alarak kurun, örneğin: recipe = bread()

Öncelikle süt deposunun yanındaki ışıklı X işaretine doğru yürüyün ve jeneratörün next() fonksiyonunu kullanarak depo içerisindeki son sütü collect() edin, örneğin: player.collect(next(recipe)). Ardından tabelanın yanındaki altın X işaretine gidin ve jeneratörün ekmeği üretmesi için gereken miktar numaralarını almak amacıyla speak() fonksiyonunu kullanın ve bu numaraları jeneratöre yazın. Veriler, "sign" adlı bir sabitte depolanır ve şu şekilde çağrılır: player.speak(sign).

Tüm değerler jeneratöre girildikten sonra, tesise gidin ve seviyeyi tamamlamak için koyu X işaretlerinde player.place(next(recipe)) ve ışık X işaretlerinde player.collect(next(recipe)) kullanın.

Kod Kitabı