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

คลาสขั้นสูง
การโอเวอร์โหลดโอเปอเรเตอร์

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

นับจำนวนไวน์ที่กำลังถูกปรับความใสโดยใช้เวกเตอร์และการโอเวอร์โหลดโอเปอเรเตอร์

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

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

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

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

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

# Create object using data from dark X mark red_wine_dark = vector(345, 272) # Create object using data from light X mark red_wine_light = vector(248, 432) # Add together vectors for totals red_wine_total = red_wine_dark + red_wine_light

ในเวกเตอร์ ตำแหน่งแรกเรียกว่า x และตำแหน่งที่สองคือ y โดยมีสูตรดังนี้: object_name = vector(x,y) ซึ่งมีความสำคัญสำหรับการนำข้อมูลที่ได้จากฟังก์ชัน read() ไปใส่ในเวกเตอร์

บนเครื่องหมาย X สีทองให้ใช้ฟังก์ชัน write() เพื่อจดจำนวนรวมของแต่ละชุดเวกเตอร์ ตัวอย่างเช่น ในกรณีของเครื่องหมาย X บนพรมสีแดงจะเขียนดังนี้:

await player.write( "There is a total of %s pounds on the left barrels and %s pounds on the right barrels" % (red_wine_total.x, red_wine_total.y)

อย่าลืมเพิ่ม .x และ .y ต่อท้ายยอดรวมเพื่อระบุค่าของแต่ละเวกเตอร์

สำหรับแต่ละชุดของพรมสีจะมีประเภทของไวน์ที่ถูกกรองแตกต่างกัน บนพรม red ไวน์แดงจะถูกกรอง; บนพรม yellow จะถูกกรองเป็น sparkling_wine; บนพรม green จะถูกกรองเป็น white_wine; และบนพรม orange กำลังกรองเป็น orange_wine

เมื่อทุกเครื่องหมาย X สีเข้มและสีอ่อนถูกล้างด้วยฟังก์ชัน water() และทุกเครื่องหมาย X สีทองมีการจดบันทึกยอดรวมแล้ว คุณก็จะผ่านด่านนี้แล้ว

หนังสือโค้ด