Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Generator
Membuat Generator
Kadang-kadang Anda mungkin ingin menghasilkan nilai secara konsisten daripada sekali saja. Sama seperti cara kerja fungsi, generator ditulis dan dieksekusi dengan cara yang sama kecuali mereka menggunakan yield() alih-alih return() saat menghasilkan keluaran.
Dalam latihan ini, Anda harus mengisi botol dengan susu dari tangki di kandang. Gunakan generator untuk mengiterasi pengisian botol dan memastikan setiap surplus susu dikumpulkan dari tangki.

Tujuan
Isi botol dengan susu dengan memompa tangki susu menggunakan generator.
Mesin-mesin yang menyimpan susu sapi hampir penuh, kamu perlu membotolkan susu dan menyimpannya sebelum menjadi basi. Ini bisa menjadi tugas yang agak rumit dengan cara biasa dan jumlah susu yang bisa kamu ekstrak dapat bervariasi sedikit. Untungnya, kamu dapat menggunakan generator untuk membuat proses ini mulus dan sederhana.
Ada dua (2) tangki susu yang perlu dipompa dan dibotolkan. Setiap mesin memiliki kompartemen yang menyimpan susu, ini direpresentasikan oleh konstanta daftar bernama: tank_a dan tank_b. Selain itu, setiap tangki cenderung memiliki kelebihan yang bisa kamu kumpulkan.
Generator mengikuti sintaks yang sama dengan fungsi tetapi akan menggunakan yield alih-alih return untuk outputnya. Buat generator bernama fill() dan setel dengan argumen list, ini akan menjadi tempat kamu memasukkan konstanta yang disebutkan di paragraf sebelumnya.
def fill(list):
for x in range(3):
yield list[x]
yield 5
Generator membaca data dari tiga (3) bidang dalam konstanta daftar, yang direpresentasikan oleh kompartemen dalam mesin, dan menambahkan kelebihan di akhir yang bernilai lima (5).
Kumpulkan objek keranjang di lapangan untuk mendapatkan akses ke botol yang diperlukan untuk mengisi dan berjalanlah ke dua (2) tanda X untuk mengumpulkan susu menggunakan for loop.
Berkat pernyataan yield, nilai-nilai yang dihasilkan dari generator dapat dibaca langsung dari for loop juga. Setel satu yang menggunakan fungsi collect() untuk mendapatkan "milk" dari mesin. Setelah itu, gunakan speak() untuk memeriksa berapa banyak susu yang tersimpan di setiap botol. Sebagai contoh:
for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))
Tulis dan gunakan for loop ini pada kedua tanda X, pada tanda X terang gunakan argumen tank_a dan pada tanda X gelap gunakan argumen tank_b untuk menyelesaikan level.