Kursus Pembangunan Python Lanjutan
Bab
>
Tahap
Penjana
Mewujudkan Penjana
Kadangkala anda mungkin mahu menjana nilai secara konsisten dan bukannya pengeluaran sekali sahaja. Sama seperti bagaimana fungsi berfungsi, penjana ditulis dan dilaksanakan dengan cara yang sama kecuali mereka menggunakan yield() dan bukannya return() apabila menghasilkan output.
Dalam latihan ini, anda mesti mengisi botol dengan susu dari tangki di kandang. Gunakan penjana untuk mengulangi pengisian botol dan memastikan sebarang lebihan susu dikumpulkan dari tangki.

Objektif
Isi botol dengan susu dengan mengepam tangki susu menggunakan generator.
Mesin yang menyimpan susu lembu hampir penuh, anda perlu membotolkan susu dan menyimpannya sebelum ia rosak. Ini boleh menjadi tugas yang agak sukar menggunakan cara biasa dan jumlah susu yang boleh anda ekstrak boleh berbeza sedikit. Nasib baik, anda boleh menggunakan generator untuk menjadikan proses ini lancar dan mudah.
Terdapat dua (2) tangki dengan susu yang perlu dipam susu dan dibotolkan. Setiap mesin mempunyai kompartmen yang menyimpan susu, ini diwakili oleh senarai tetap yang dinamakan: tank_a dan tank_b. Selain itu, setiap tangki cenderung mempunyai lebihan yang boleh anda kumpul.
Generator mengikuti sintaks yang sama seperti fungsi tetapi akan menggunakan yield dan bukan return untuk output mereka. Tetapkan generator yang dinamakan fill() dan tetapkan dengan argumen list, ini adalah di mana anda memasukkan senarai tetap yang disebutkan dalam perenggan di atas.
def fill(list):
for x in range(3):
yield list[x]
yield 5
Generator membaca data dari tiga (3) medan dalam senarai tetap, diwakili oleh kompartmen dalam mesin, dan menambah lebihan pada akhirnya iaitu lima (5).
Kumpul objek bakul di medan untuk mendapatkan akses kepada botol yang diperlukan untuk diisi dan berjalan ke dua (2) tanda X untuk mengutip susu menggunakan gelung for.
Terima kasih kepada pernyataan yield, nilai yang dihasilkan dari generator boleh dibaca terus dari gelung for juga. Tetapkan satu yang menggunakan fungsi collect() untuk memperoleh "susu" dari mesin. Ikuti dengan menggunakan speak() untuk memeriksa berapa banyak susu yang disimpan setiap botol. Sebagai contoh:
for bottles in fill(tank_a): player.collect("milk") player.speak("%d pints of milk collected" % (bottles))
Tulis dan gunakan gelung for ini pada kedua-dua tanda X, pada tanda X yang cerah gunakan argumen tank_a dan pada tanda X yang gelap gunakan argumen tank_b untuk melengkapkan tahap.