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

ฟังก์ชันขั้นสูง
คลอเชอร์

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

ควบคุมการจ่ายน้ำในฟาร์มโดยการตั้งค่าและใช้ closures

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

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

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

# Nested Function def multiplier_of(n): def multiplier(number): return number*n return multiplier

เมื่อกำหนดค่าแล้ว เราจำเป็นต้องปิดล้อมฟังก์ชันด้วยการตั้งค่า closures ซึ่งจะป้องกันการเข้าถึงค่าของมันและทำให้การใช้งานนั้นแน่นอน

# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]

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

ในการควบคุมถังน้ำ ให้ตั้งค่า closures สามตัว (3) ได้แก่ multiply_by_2 , multiply_by_3 และ multiply_by_5 โดยตั้งค่าทุกตัวด้วยตนเองโดยใช้รูปแบบเดียวกับที่ให้ในตัวอย่างก่อนหน้า เช่น multiply_by_2 = multiplier_of(2)

ในระดับนี้มีคอนสแตนท์พจนานุกรมหนึ่งที่ชื่อว่า tanks ซึ่งในฐานะดัชนีจะมีค่า 6 สี ได้แก่ “red” , “blue” , “orange” , “purple” , “yellow” และ “green” โดยที่ดัชนีแต่ละตัวจะเก็บตัวเลขที่แสดงถึงปริมาณน้ำที่ไหลผ่านด้านข้างของถัง น้ำนี้จะถูกใช้ในการควบคุมถังโดยใช้ closures "multiply_by" ที่กล่าวถึงก่อนหน้านี้

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

เดินไปยังเครื่องหมาย X สีเข้มบนพรมที่มีสีและเผชิญหน้ากับถัง ใช้ฟังก์ชัน regulate_water() แล้วตั้งค่าสีของพรมเป็นอาร์กิวเมนต์ตัวแรกและ closure ตัวคูณที่ถูกต้องเป็นอาร์กิวเมนต์ตัวที่สอง ตัวคูณที่ใช้สำหรับพรมแต่ละสีมีดังนี้:

multiply_by_2 - "red" และ "green" multiply_by_3 - "blue" และ "purple" multiply_by_5 - "orange" และ "yellow"

ควบคุมการจ่ายน้ำที่ด้านข้างของถังแต่ละใบให้เสร็จสิ้นเพื่อผ่านพ้นระดับนี้

หนังสือโค้ด