Skip to main content

บทเรียนที่ 4: การใช้ลูปที่ซ้อนกัน

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

มุมมองด้านบนของ Disk Mover Playground ที่มีดิสก์ตัวแรกของแต่ละสีในเป้าหมายสีที่ตรงกัน หุ่นยนต์ VR หันหน้าไปทางผนังด้านขวาที่ขอบประตูสีเขียวที่มุมขวาล่าง

ผลการเรียนรู้

  • ระบุวิธีการซ้อนลูป
  • อธิบายการไหลของโครงการผ่านลูปที่ซ้อนกัน
  • อธิบายว่าเหตุใดจึงต้องใช้ลูปที่ซ้อนกันใน โปรเจกต์

Nested Loops คืออะไร?

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

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

def main ():
    สำหรับ repeat_count ในช่วง (3):
        #1 ไดรฟ์ไปยังดิสก์แรก
        ในขณะที่ไม่ใช่
            down_eye.near_object (): drivetrain.drive (FORWARD)
            wait (5
        , msec)

        drivetrain.stop () #2 หยิบแผ่นดิสก์
        magnet.energize (BOOST)

        #3 ขับไปยังเป้าหมาย
        drivetrain.turn_to_heading (180, DEGREES)
        ในขณะที่ front_distance.get_distance (MM
            ) > 200: drivetrain.drive (FORWARD)
            wait (5
        , msec) drivetrain.stop ()

        #4 วางดิสก์ลงในแม่เหล็กเป้าหมาย
        ให้พลังงาน (หล่น)

        drivetrain.drive_for (ย้อนกลับ, 100, MM
        ) drivetrain.turn_to_heading (0, องศา)

    รอ (5, มิลลิวินาที)

เมื่อคุณ 'ซ้อน' ลูปลูปด้านนอกจะควบคุมจำนวนครั้งที่ลูปด้านในถูกดำเนินการ  ในโครงการนี้ for loop คือ outer loop และจะทำซ้ำพฤติกรรมใน loop สามครั้ง

โปรเจกต์จากด้านบนที่มีลูปสำหรับไฮไลต์อยู่ในกล่องสีแดง เยื้องใต้คำจำกัดความหลักจำนวนขีดล่างสำหรับการทำซ้ำในช่วง (3) ลำไส้ใหญ่คือจุดเริ่มต้นของลูปและส่วนทั้งสี่ของโครงการอยู่เยื้องใต้สิ่งนั้น สอดคล้องกับคำสั่ง for loop ที่ด้านล่างของโปรเจกต์เป็นคำสั่งรอแสดงว่าลูปสิ้นสุดลงที่ใด

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

สำหรับข้อมูลของคุณ

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

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

การไหลของโครงการลูปที่ซ้อนกัน 

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

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

ภาพด้านข้างของโครงการจากด้านบนที่แสดงในพื้นที่ทำงานทางด้านซ้ายและหน้าต่างสนามเด็กเล่นที่แสดงทางด้านขวา โปรเจกต์นี้มีลูกศรสีส้มตัดจากคำสั่ง for loop รอบๆโปรเจกต์ทั้งหมดซึ่งแสดงให้เห็นถึงการวนซ้ำครั้งแรกของ for loop บนสนามเด็กเล่นดิสก์สีน้ำเงินอันแรกอยู่ในเป้าหมายสีน้ำเงินและหุ่นยนต์ VR อยู่ในตำแหน่งหันหน้าไปทางดิสก์สีน้ำเงินที่เหลือที่ปลายด้านหน้าของเป้าหมายซึ่งระบุตำแหน่งของหุ่นยนต์หลังจากการทำซ้ำครั้งแรก

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

ภาพด้านข้างของโครงการจากด้านบนที่แสดงในพื้นที่ทำงานทางด้านซ้ายและหน้าต่างสนามเด็กเล่นที่แสดงทางด้านขวา โปรเจกต์นี้มีลูกศรสีส้มตัดจากคำสั่ง for loop รอบๆโปรเจกต์ทั้งหมดซึ่งแสดงให้เห็นถึงการวนซ้ำครั้งที่สองของ for loop บนสนามเด็กเล่นดิสก์สีน้ำเงิน 2 ตัวอยู่ในเป้าหมายสีน้ำเงินและหุ่นยนต์ VR อยู่ในตำแหน่งหันหน้าไปทางดิสก์สีน้ำเงินที่เหลือที่ปลายด้านหน้าของเป้าหมายซึ่งระบุตำแหน่งของหุ่นยนต์หลังจากการทำซ้ำครั้งที่สอง

หลังจากการทำซ้ำครั้งที่สามดิสก์สีน้ำเงินที่สามจะถูกรวบรวมและหุ่นยนต์ VR จะหยุดเคลื่อนที่ ขณะนี้ for loop ได้ดำเนินการเสร็จสิ้นแล้วดังนั้นโครงการจึงเสร็จสมบูรณ์ 

ภาพด้านข้างของโครงการจากด้านบนที่แสดงในพื้นที่ทำงานทางด้านซ้ายและหน้าต่างสนามเด็กเล่นที่แสดงทางด้านขวา โปรเจกต์นี้มีลูกศรสีส้มตัดจากคำสั่ง for loop รอบๆโปรเจกต์ทั้งหมดซึ่งแสดงให้เห็นถึงการวนซ้ำครั้งที่สามของ for loop บนสนามเด็กเล่นดิสก์สีน้ำเงินทั้งสามตัวอยู่ในประตูสีน้ำเงินและหุ่นยนต์ VR อยู่ในตำแหน่งที่หันหน้าออกจากประตูนอกกรอบประตูซึ่งแสดงตำแหน่งของหุ่นยนต์หลังจากทำซ้ำครั้งสุดท้าย

 

เลือกปุ่ม ถัดไป เพื่อดำเนินการกับบทเรียนส่วนที่เหลือนี้ต่อไป