บทเรียนที่ 4: การใช้อนันต์ขณะลูป
การแก้ปัญหาเขาวงกตดิสก์
การสร้างโครงการ
- โหลดโครงการ Unit7Lesson3 จากบทเรียนก่อนหน้าหรือสร้างโครงการใหม่ตามที่แสดงที่นี่เพื่อเริ่มต้น
def main ():
# 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 detect 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)
-
เปลี่ยนชื่อ โครงการUnit7Lesson4
- ลากหรือพิมพ์อนันต์ใน ขณะ ที่ลูปไปที่ด้านบนของโครงการและตั้งเงื่อนไขเป็นจริง
def main ():
while True:
รอ (5, มิลลิวินาที)
- ย้ายคำสั่ง wait เพื่อสร้างพื้นที่สำหรับคำสั่งที่จะเข้าไปในลูป while แบบอนันต์
def main ():
while True:
รอ (5, มิลลิวินาที)
- ภายในอนันต์ใน ขณะที่ วนซ้ำให้คัดลอกและวางข้อความก่อนหน้า หาก ข้อความอยู่ภายในวนซ้ำ อย่าลบคำสั่ง wait ที่ด้านล่างของลูป while โปรเจกต์ของคุณอาจเป็นแบบนี้ โปรดทราบว่าการคัดลอกและวางคำสั่งด้วยวิธีนี้ไม่ได้ส่งผลให้เกิดการเยื้องที่ถูกต้อง
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)
- จำไว้ว่าการเยื้องมีความสำคัญมากใน VEXcode VR Python เพื่อให้การไหลของโครงการดำเนินการตามที่ตั้งใจไว้ คำสั่ง if จะต้องถูกเยื้องเข้าไปภายในลูป while ที่ไม่มีที่สิ้นสุด เลือกคำสั่ง if แล้วกด 'Tab' เพื่อย่อหน้าเข้าไปในลูป while แบบอนันต์ เมื่อเยื้องกันอย่างถูกต้องโปรเจกต์ของคุณควรมีลักษณะดังนี้:
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)
- เมื่อเพิ่มลูป while แบบอนันต์ ลงในโครงการ คำสั่ง if ทั้งหมด จะได้รับการตรวจสอบเงื่อนไขซ้ำๆ เปิด Disk Maze Playground และรันโครงการ
-
เมื่อโครงการนี้ทำงานหุ่นยนต์ VR จะนำทาง Disk Maze Playground ตั้งแต่ต้นจนจบ เมื่อหุ่นยนต์ VR ตรวจพบสีแดงมันจะหยุดการขับขี่
โดยสรุป
- ในโครงการจากบทเรียนก่อนหน้า เงื่อนไขภายในคำสั่ง if จะได้รับการตรวจสอบเพียงครั้งเดียวเท่านั้น เนื่องจากเงื่อนไขภายในคำสั่ง หาก ได้รับการตรวจสอบเพียงครั้งเดียว หุ่นยนต์ VR จึงขับเคลื่อนไปข้างหน้าอย่างไม่มีสิ้นสุด เพราะเงื่อนไขที่ตรวจพบ "ไม่มีสี" ได้รับการรายงานว่าเป็นจริงในตอนเริ่มต้นของโครงการ
- ขณะนี้ได้เพิ่มลูปอินฟินิตี้ while เข้าไปแล้ว เงื่อนไขของคำสั่ง if แต่ละคำสั่งจะถูกตรวจสอบซ้ำๆ กัน เงื่อนไขของลูปขณะ ที่ เป็นจริงเสมอดังนั้น รหัสภายในลูปขณะ ที่ จะดำเนินการเสมอ นี่จะตรวจสอบเงื่อนไขของคำสั่ง if ซ้ำๆ ในขณะที่โครงการกำลังทำงานอยู่
- ในระหว่างการไหลของโครงการ ถ้าเงื่อนไขของคำสั่ง if เป็นจริง คำสั่งภายในคำสั่ง if จะถูกดำเนินการ หากเงื่อนไขของคำสั่ง if เป็นเท็จ คำสั่งภายในคำสั่ง if จะไม่ถูกดำเนินการ และการไหลของโครงการจะดำเนินต่อไปจนถึงคำสั่งถัดไป สิ่งนี้ช่วยให้หุ่นยนต์ VR สามารถทำพฤติกรรมที่ไม่ต่อเนื่องเช่นการหมุนหรือหยุดเมื่อตรวจพบสีบางอย่าง
- หาก ข้อความถูกใช้กับอนันต์ ในขณะที่ วนซ้ำ เพื่อให้แน่ใจว่ามีการตรวจสอบเงื่อนไขอย่างต่อเนื่อง