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

ผลการเรียนรู้
- ระบุว่าคำสั่งที่ไม่ต้องรอจะทำให้โครงการดำเนินต่อไปแม้ว่า พฤติกรรมของคำสั่งจะยังไม่เสร็จสมบูรณ์ก็ตาม
- ระบุว่าคำสั่งรอทำพฤติกรรมให้เสร็จสมบูรณ์ก่อนดำเนินการต่อผ่าน โครงการ
- ระบุว่า while loop จะตรวจสอบเงื่อนไขบูลีนซ้ำๆและจะไม่ย้ายไปยังคำสั่งถัดไปจนกว่าเงื่อนไขจะรายงานเป็นจริง
- ระบุว่าลูปขณะ ที่ ถูกใช้กับคำสั่งที่ไม่ต้องรอ (เช่น ไดรฟ์) เพื่อตรวจสอบสภาพเซ็นเซอร์
- ระบุว่าคีย์เวิร์ด ไม่ใช่ นั้นจะกลับค่าของเงื่อนไขบูลีนจาก True เป็น False หรือ False เป็น True
- ระบุว่าคำสั่ง left_bumper.pressed และ right_bumper.pressed ส่งคืนค่า True หรือ False ในลูป while
- อธิบายวิธีสร้างโครงการที่มี VR Robot ขับเคลื่อนไปข้างหน้าจนกว่าจะกด Bumper Sensor
ขณะลูป
ลูป while ยอมรับเงื่อนไขแบบบูลีน ในขณะ ที่ลูปซ้ำๆตรวจสอบเงื่อนไขบูลีนและควบคุมการไหลของโครงการ ขณะที่ การวนซ้ำจะยังคงวนซ้ำตราบเท่าที่เงื่อนไขเป็น& จริง ลูปขณะ ที่ จะออกจากลูปและย้ายไปยังคำสั่งถัดไปนอกลูปเมื่อเงื่อนไขรายงานเป็นเท็จ

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

ในขณะที่วนลูปและปัญหากำแพงเขาวงกต
ตรรกะเดียวกันกับหุ่นยนต์ VR ในเขาวงกตติดผนัง ในขณะ ที่ไม่ได้กดเซ็นเซอร์กันชนหุ่นยนต์ VR ควรขับไปข้างหน้าต่อไป เมื่อกดแล้วควรหยุดหรือหมุน การใช้ ใน ขณะที่ วนลูปร่วมกับคำสั่งที่ไม่ต้องรอเช่น ไดรฟ์ เราสามารถตั้งรหัสให้หุ่นยนต์ VR ทำเช่นนั้นได้ อย่างไรก็ตาม คำสั่ง Bumper Sensor จะใช้เงื่อนไขที่ Bumper Sensor จะถูกกด (left_bumper.pressed หรือ right_bumper.pressed) ในการที่จะเขียนโค้ดให้หุ่นยนต์ VR ขับเคลื่อนในขณะที่ Bumper Sensor ไม่ได้ถูกกด เราจำเป็นต้องใช้ตัวดำเนินการ not
def main ():
while not condition:
wait (5, MSEC)สำหรับข้อมูลของคุณ
คำสั่งที่ไม่ต้องรอและรอจะเป็นตัวกำหนดว่าคำสั่งถัดไปจะเริ่มทำงานเมื่อใด คำสั่งรอเช่น DRIVE_FOR และ TURN _FOR ทำพฤติกรรมให้เสร็จก่อนที่จะย้ายไปยังคำสั่งถัดไปในโครงการ คำสั่งที่ไม่ต้องรอเช่น ได รฟ์และ เทิร์นจะยังคงย้ายไปยังคำสั่งถัดไปในโครงการแม้ว่าพฤติกรรมของคำสั่งที่ไม่ต้องรอ จะไม่สมบูรณ์ก็ตาม
คำสั่งที่รออยู่
drivetrain.drive_for (FORWARD, 200, MM)
drivetrain.turn_for (RIGHT, 90, DEGREES)คำสั่งที่ไม่ใช้การตรวจสอบ
drivetrain.drive (ไปข้างหน้า
) drivetrain.turn (ขวา)คีย์เวิร์ดที่ไม่ใช่
โดยทั่วไปแล้วคีย์เวิร์ด ไม่ใช่ จะใช้ร่วมกับลูป while เพื่อให้คำสั่งภายในลู ทำงานในขณะที่เงื่อนไขส่งคืนเป็น False หากต้องการใช้ตัวอย่าง "ดวงอาทิตย์ส่องแสง" สามารถสร้างผลลัพธ์แบบเดียวกันได้โดยใช้ตัวดำเนินการ ไม่ใช่ ในขณะที่พระอาทิตย์ ไม่ ส่องแสงให้เข้ามาข้างใน

ใน Wall Maze สิ่งนี้มีประโยชน์เพื่อให้เราสามารถเขียนโค้ดหุ่นยนต์ VR เพื่อที่ว่าใน ขณะที่ ไม่ได้ กดเซ็นเซอร์กันชนมันจะขับไปข้างหน้า เงื่อนไขยังคงเป็น 'หากกดเซ็นเซอร์กันชน' แต่ด้วยวิธีนี้เมื่อรายงาน False (ไม่ได้กด) การไหลของโครงการจะยังคงอยู่ในลูป เมื่อกดเซ็นเซอร์กันชนเงื่อนไขจะเป็น True ดังนั้นโครงการจะย้ายออกจากลูป
สำหรับข้อมูลของคุณ
คีย์เวิร์ด ไม่ใช่ เป็นตัวดำเนินการเชิงตรรกะที่ จะกลับค่าของค่าบูลีน การใส่คีย์เวิร์ด ไม่ อยู่หน้าคำสั่งที่ส่งกลับค่าบูลีนจะกลับค่า True เป็น False และ False เป็น True ตัวอย่างเช่น ลองนึกภาพว่าเซ็นเซอร์กันชนด้านซ้ายของหุ่นยนต์ VR ถูกกดและคำสั่ง left_bumper.pressed จะส่งกลับค่า True คีย์เวิร์ด ไม่ใช่ จะย้อนกลับค่าบูลีน และทำให้นิพจน์นี้ส่งคืนค่า False
ไม่ใช่ left_bumper.pressed ()ขึ้นอยู่กับข้อมูลเซ็นเซอร์ที่คุณใช้ คีย์เวิร์ด ไม่ใช่ อาจจำเป็นเพื่อให้หุ่นยนต์ VR ดำเนินการตามพฤติกรรมที่ต้องการ
def main ():
while not left_bumper.pressed (): drivetrain.drive
(FORWARD)
wait (5, MSEC
) drivetrain.stop ()การสร้างโปรเจ กต์ด้วย While Loop และ Bumper Sensor
ตั้งชื่อและบันทึกโครงการ
- เปิดโปรเจกต์ข้อความใหม่และเลือก Wall Maze Playground เมื่อได้รับแจ้ง

-
ตั้งชื่อ โครงการUnit4Lesson2

-
ลากหรือพิมพ์คำสั่ง while ลงในพื้นที่ทำงานเพื่อแทนที่คำสั่ง Drivetrain ที่จะเติมโดยอัตโนมัติเป็นส่วนหนึ่งของโครงการ Text ใหม่ สังเกตว่ามีคำสั่ง a wait อยู่ภายในลูป ห้ามลบคำสั่ง รอ จะทำให้ VR Robot ดำเนินการโครงการได้อย่างถูกต้อง โปรเจกต์ของคุณควรมีลักษณะดังนี้:
def main (): while condition: wait (5, MSEC) -
พิมพ์ตัวดำเนินการ ไม่ใช่ หลังเครื่องหมาย 'while' ในคำสั่ง while ตอนนี้โปรเจกต์ของคุณควรมีลักษณะดังนี้:
def main (): while not condition: wait (5, MSEC) -
ลากหรือพิมพ์ คำสั่ง left_bumper.pressed ใน 'เงื่อนไข' ของ while loop คำสั่งภายในลูปจะดำเนินการในขณะที่เงื่อนไขไม่เป็นความจริงซึ่งหมายความว่าเมื่อ ไม่ได้ กดเซ็นเซอร์กันชนด้านซ้าย ตอนนี้โปรเจกต์ของคุณควรมีลักษณะดังนี้:
def main (): while not left_bumper.pressed (): รอ (5, มิลลิวินาที) -
ภายในลูป while ให้ลากหรือพิมพ์คำสั่ง drive ตรวจสอบให้แน่ใจว่าคำสั่ง drive และคำสั่ง wait มีการเยื้องย่อหน้าอย่างถูกต้องภายในลูป while เพื่อให้ลูป ทำงานได้ตามที่ตั้งใจไว้ คุณสามารถใช้เส้นนำทางเป็นตัวช่วยในการมองเห็นได้ตอนนี้โปรเจกต์ของ คุณควรมีลักษณะดังนี้:
def main (): while not left_bumper.pressed (): drivetrain.drive ( forward) wait (5, MSEC) -
ลากหรือพิมพ์คำสั่ง หยุด ด้านนอกของลู ในขณะที่ ตรวจสอบให้แน่ใจว่าคำสั่ง หยุด อยู่ในแนวเดียวกับลูป ในขณะที่ และไม่เยื้องเข้าไป เพื่อให้ ทำงานนอกลูปตามที่ต้องการ คุณสามารถใช้เส้นนำทางเป็นตัวช่วยในการมองเห็นได้ตอนนี้โปรเจกต์ของ คุณควรมีลักษณะดังนี้:
def main (): while not left_bumper.pressed (): drivetrain.drive (FORWARD) wait (5, MSEC ) drivetrain.stop () - เปิดหน้าต่างสนามเด็กเล่น หากยังไม่ได้เปิด ตรวจสอบให้แน่ใจว่าสนามเด็กเล่น Wall Maze เปิดอยู่
- ดำเนินโครงการ
- ดู VR Robot ขับรถจากจุดเริ่มต้นของ Wall Maze และหยุดเมื่อมีการกด Bumper Sensor ที่ผนัง
- คำสั่ง Drive ช่วยให้หุ่นยนต์ VR สามารถขับไปข้างหน้าได้ในขณะที่ตรวจสอบสภาพของเซ็นเซอร์กันชนด้วย คำสั่ง Left Bumper Pressed เมื่อคำสั่ง left_bumper.pressed รายงานว่าเป็นจริง หุ่นยนต์ VR จะเคลื่อนที่ไปที่คำสั่งถัดไปนอกลูปและหยุดขับเคลื่อน
เลือกปุ่ม ถัดไป เพื่อดำเนินการกับบทเรียนส่วนที่เหลือนี้ต่อไป