Skip to main content

บทเรียนที่ 4: พฤติกรรมซ้ำๆ

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

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

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

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

เงื่อนไขการตรวจสอบซ้ำๆ

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

ในขณะที่จริง:
	รอ (5, มิลลิวินาที)

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

ไม่มีที่สิ้นสุด ในขณะที่ วนซ้ำและปัญหาเขาวงกตดิสก์

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

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

def main ():
    while True:
        
        # If front eye detects green then turn right
        if front_eye.detect (GREEN): drivetrain.turn_for
            (RIGHT, 90, DEGREES)

        # If front eye detects blue then turn left
        if front_eye.detect (BLUE): drivetrain.turn_for
            (LEFT, 90, DEGREES)

        # If front eye detects red then stop
        if front_eye.detect (RED): 
            drivetrain.stop ()

        # If front eye detect none then drive forward
        if front_eye.detect (NONE): drivetrain.drive 
            (FORWARD)

        wait (5, MSEC)

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

ขณะนี้ได้เพิ่มลูปแบบอนันต์ while เข้าไปแล้ว เงื่อนไขของคำสั่ง if แต่ละคำสั่งจะถูกตรวจสอบซ้ำๆ กัน

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

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