Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Dekorator
Decorator yang Lebih Kompleks
Tujuan
Masukkan pizza ke dalam oven pada suhu yang tepat dan siapkan salad dengan menggunakan decorator dengan argumen.
Setelah pizza sudah dipersiapkan, saatnya untuk memasaknya di oven. Setelah itu, kita harus menyiapkan salad untuk disajikan bersama pizza setelah selesai. Anda dapat menyelesaikan tugas-tugas ini dengan menggunakan decorator dengan argumen, mirip dengan fungsi kustom; Anda juga dapat meneruskan argumen melalui decorator Anda.
Pizza perlu ditempatkan dalam oven, tetapi pertama-tama Anda harus mengumpulkan lebih banyak firewood di bagian kiri bawah peta. Setelah dikumpulkan, ambil keranjang di konter dekat oven kiri. Keranjang ini berisi pizza yang akan dipanggang dalam oven.
Ada sebuah fungsi dan decorator-nya telah disiapkan di editor kode. Fungsi tersebut digunakan untuk menempatkan dan memanggang pizza dalam oven, sedangkan decorator memeriksa apakah oven memiliki suhu yang tepat. Jika suhunya tidak tepat, firewood akan ditempatkan sebagai gantinya.
def place_oven(func):
def check(temp):
if temp < 450:
player.speak("Oven is not hot enough")
player.open()
player.place("firewood")
player.close()
return
return func(temp)
return check
@place_oven
def bake_pizza(temp):
player.open()
player.place("pizza")
player.close()
player.speak("I am baking Pizza at %d degrees" % (temp))
Berjalanlah ke tanda X yang bercahaya dan gunakan fungsi read() sambil menghadap oven, untuk mengidentifikasi suhu oven. Lanjutkan dengan menulis fungsi yang dihiasi bake_pizza() dan tambahkan suhu yang Anda baca sebagai argumen, misalnya: bake_pizza(450) .
Sementara Anda menempatkan pizza dan kayu bakar di oven, berhenti sejenak di tanda X berwarna emas dan hadap lemari. Di sini, Anda dapat mengumpulkan bahan-bahan untuk merangkai salad. Saat ini, bahan-bahan salad disimpan dalam list bersarang yang ditunjukkan di editor kode. Namun, list ini berantakan dan akan lebih baik jika item disimpan dalam list yang teratur untuk digunakan pada salad Anda.
cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]
Buat sebuah list bernama ingredients dan gunakan List Comprehension untuk "meratakan" list bersarang tersebut. Ini adalah proses menghapus sub-list dari list bersarang sehingga semua item sekarang berada dalam satu list daripada banyak list kecil. Setelah list diratakan, gunakan fungsi speak() dengan list untuk memverifikasi bahan-bahan yang akan Anda gunakan.
Setelah semua item yang diperlukan telah ditempatkan di oven, dan list ingredients telah ditangani, berjalanlah ke tanda X gelap untuk membuat salad. Di editor, sebuah fungsi dan decorator telah disiapkan. Kali ini, mereka tidak terhubung dan harus dideklarasikan secara manual, misalnya: salad = add_toppings(toss_salad("ranch","carrot")). Set fungsi ini mengambil dua (2) argumen: dressing dan vegetable.
def add_toppings(func):
def add(dressing, vegetable):
player.place(dressing)
player.place(vegetable)
func(dressing, vegetable)
return add
@add_toppings
def toss_salad(dressing, vegetable):
player.combine("lettuce", dressing, vegetable)
player.speak("I am preparing salad with %s dressing and %s"
% (dressing, vegetable))
Setiap tanda X gelap terletak di atas karpet berwarna, masing-masing memiliki salad yang berbeda yang harus dibuat di atasnya menggunakan bahan-bahan yang Anda ambil dari lemari. Pada karpet kuning, buat salad dengan: cesar dan cheese, pada karpet hijau buat salad dengan: oil dan tomato, pada karpet biru buat salad dengan: ranch dan carrot.
Setelah ketiga (3) salad disusun menggunakan fungsi yang dihiasi toss_salad(dressing, vegetable) dalam format ini, level akan selesai.