Coding for KidsCoding for Kids
ระดับสร้างสรรค์ความท้าทายคู่มือครู
โหวตสำหรับฟีเจอร์
หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ

ตัวตกแต่ง
ตัวตกแต่งที่ซับซ้อนมากขึ้น

วัตถุประสงค์

ตั้งค่าเตาอบพิซซ่าให้อยู่ที่อุณหภูมิที่ถูกต้องและเตรียมสลัดโดยใช้ตัวประดับ (decorators) ที่มีอาร์กิวเมนต์

ตอนนี้พิซซ่าถูกเตรียมไว้เรียบร้อยแล้ว ถึงเวลาที่จะนำไปอบในเตาอบ เมื่อจัดการส่วนนี้เสร็จสิ้นแล้ว เราควรเตรียมสลัดเพื่อทานคู่กับพิซซ่า คุณสามารถทำงานเหล่านี้โดยใช้ตัวประดับ (decorators) ที่มีอาร์กิวเมนต์ ซึ่งคล้ายกับฟังก์ชันที่กำหนดเองที่คุณสามารถส่งอาร์กิวเมนต์ผ่านตัวประดับของคุณได้

พิซซ่าจำเป็นต้องถูกวางลงในเตาอบ แต่ก่อนอื่นคุณต้องเก็บ "firewood" เพิ่มเติมที่มุมล่างซ้ายของแผนที่ เมื่อเก็บแล้วให้เก็บตะกร้าที่อยู่บนเคาน์เตอร์ใกล้เตาอบด้านซ้าย ตะกร้านี้มี "pizza" ที่จะนำไปอบในเตาอบ

ในตัวแก้ไขโค้ดมีฟังก์ชันและตัวประดับ (decorator) ได้ถูกตั้งค่าไว้แล้ว ฟังก์ชันนี้ใช้ในการวางและอบ "pizza" ในเตาอบ ส่วนตัวประดับจะตรวจสอบว่าเตาอบมีอุณหภูมิที่ถูกต้องหรือไม่ และหากอุณหภูมิไม่ถูกต้อง "firewood" จะถูกวางแทน

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))

เดินไปยังจุดที่มีเครื่องหมาย X สีอ่อนและใช้ฟังก์ชัน read() ขณะเผชิญหน้าเตาอบ เพื่อระบุอุณหภูมิของเตาอบ จากนั้นให้เขียนฟังก์ชันที่มีตัวประดับ bake_pizza() และเพิ่มอุณหภูมิที่คุณอ่านได้เป็นอาร์กิวเมนต์ เช่น bake_pizza(450)

ในขณะที่คุณไปวางพิซซ่าและไม้เกิ้งลงในเตาอบ ให้หยุดที่จุดที่มีเครื่องหมาย X สีทองและเผชิญหน้ากับตู้เก็บของ ที่นี่คุณสามารถเก็บส่วนผสมสำหรับเตรียมสลัดได้ ขณะนี้ส่วนผสมสำหรับสลัดถูกเก็บอยู่ในลิสต์ซ้อนตามที่ระบุไว้ในตัวแก้ไขโค้ด แต่ลิสต์นี้สับสนและคุณจะได้ประโยชน์มากขึ้นถ้าส่วนผสมเหล่านี้ถูกจัดเก็บในลิสต์ที่เป็นระเบียบเพื่อใช้สำหรับสลัดของคุณ

cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]

สร้างลิสต์ชื่อ ingredients และใช้ List Comprehension เพื่อ "flatten" ลิสต์ซ้อน นั่นคือกระบวนการเอาลิสต์ย่อยออกจากลิสต์ซ้อนเพื่อที่ว่าส่วนประกอบทั้งหมดจะถูกเก็บไว้ในลิสต์เดียวแทนที่จะเป็นลิสต์ขนาดเล็กหลายอัน หลังจากลิสต์ถูกทำให้เรียบแล้ว ให้ใช้ฟังก์ชัน speak() พร้อมกับลิสต์เพื่อตรวจสอบส่วนผสมที่คุณจะใช้งาน

หลังจากวัตถุจำเป็นทั้งหมดถูกวางลงในเตาอบเรียบร้อยแล้ว และลิสต์ ingredients ได้รับการแก้ไขแล้ว ให้เดินไปยังจุดที่มีเครื่องหมาย X สีเข้มเพื่อสร้างสลัด ในตัวแก้ไขโค้ดมีฟังก์ชันและตัวประดับ (decorator) ถูกตั้งค่าไว้ แต่ครั้งนี้ไม่ได้เชื่อมต่อและต้องประกาศด้วยตนเอง เช่น: salad = add_toppings(toss_salad("ranch","carrot")) ชุดฟังก์ชันเหล่านี้รับอาร์กิวเมนต์สอง (2) ตัว คือ dressing และ 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))

แต่ละจุดที่มีเครื่องหมาย X สีเข้มจะตั้งอยู่บนพรมสีต่าง ๆ แต่ละจุดจะมีสลัดที่แตกต่างกันซึ่งจำเป็นต้องสร้างขึ้นโดยใช้ส่วนผสมที่คุณเก็บมาจากตู้เก็บของ บนพรมสีเหลือง ให้สร้างสลัดโดยใช้: "cesar" และ "cheese" , บนพรมสีเขียว ให้สร้างสลัดโดยใช้: "oil" และ "tomato" , บนพรมสีน้ำเงิน ให้สร้างสลัดโดยใช้: "ranch" และ "carrot"

เมื่อสลัดทั้งสาม (3) อันถูกจัดทำขึ้นโดยใช้ฟังก์ชันที่มีตัวประดับ toss_salad(dressing, vegetable) ในรูปแบบนี้ ระดับจะเสร็จสมบูรณ์

หนังสือโค้ด