Skip to main content

Bài 2: Sử dụng vòng lặp While

Trong Bài học này, bạn sẽ tạo một dự án sử dụng Cảm biến cản và vòng lặp while. Trong thử thách nhỏ này, bạn sẽ áp dụng những kỹ năng này để di chuyển từ đầu Mê cung tường đến chữ 'A'.

Sân chơi mê cung tường không hiển thị bảng điều khiển của sân chơi. Robot VR có một bức tường phía trước mà nó chạm vào, cho biết rằng nó cần phải rẽ để có thể tiến vào mê cung.

Kết quả học tập

  • Xác định rằng các lệnh không chờ sẽ tiếp tục dự án ngay cả khi hành vi của lệnh chưa hoàn tất.
  • Xác định lệnh chờ sẽ hoàn tất hành vi trước khi tiếp tục dự án.
  • Xác định rằng vòng lặp whilesẽ kiểm tra điều kiện Boolean nhiều lần và sẽ không chuyển sang lệnh tiếp theo cho đến khi điều kiện báo cáo là Đúng.
  • Xác định rằng vòng lặp whileđược sử dụng với các lệnh không chờ (ví dụ: drive) để kiểm tra tình trạng cảm biến.
  • Xác định rằng từ khóa notđảo ngược giá trị của điều kiện Boolean từ True thành False hoặc False thành True. 
  • Xác định rằng các lệnh left_bumper.pressedright_bumper.pressedtrả về giá trị True hoặc False trong vòng lặp while.
  • Mô tả cách tạo một dự án có Robot VR di chuyển về phía trước cho đến khi Cảm biến cản được nhấn.

Vòng lặp While

Vòng lặp while chấp nhận các điều kiện Boolean. Vòng lặp Whilekiểm tra điều kiện Boolean nhiều lần và kiểm soát luồng dự án. Vòng lặp whilesẽ tiếp tục lặp cho đến khi điều kiện vẫn là& True. Vòng lặp while sẽ thoát khỏi vòng lặp và chuyển sang lệnh tiếp theo bên ngoài vòng lặp khi điều kiện báo cáo là Sai.

Hộp công cụ Python VEXcode VR. Lệnh while được đánh dấu màu đỏ, với mũi tên trỏ đến giao diện mã hóa. Mã đọc def main():, while condition:, wait(5, MSEC) sau khi lệnh while được kéo từ hộp công cụ vào giao diện mã hóa.

Về cơ bản, vòng lặpwhilesẽ yêu cầu Robot VR tiếp tục thực hiện một hành viwhilekhi một điều kiện nhất định được đáp ứng. Logic tương tự như tình huống này:Khi trời nắng, hãy ra ngoài chơi.Bạn sẽ làm gì? Tình trạng "mặt trời đang chiếu sáng" quyết định nơi bạn nên ở. Khi trời nắng, điều kiện là Đúng, vì vậy bạn hãy ra ngoài chơi. Khi mặt trời lặn, điều kiện đó là Sai, vì vậy bạn sẽ quay trở lại bên trong.

Phía bên trái là ví dụ mã đọc khi trời nắng:, chơi ngoài trời. Sau câu lệnh while thì đọc là come inside. Bên phải là một cô gái đang đạp xe bên ngoài ngôi nhà của mình vào một ngày nắng. Theo quy định, cô bé sẽ chơi ở ngoài cho đến khi mặt trời lặn, sau đó mới được vào nhà.

Vòng lặp While và bài toán mê cung tường

Logic tương tự cũng áp dụng cho Robot VR trong Mê cung tường. Trong khiCảm biến cản không được nhấn, Robot VR vẫn sẽ tiếp tục di chuyển về phía trước. Khi nhấn vào, nó sẽ dừng lại hoặc quay lại. Sử dụng vòng lặpwhilekết hợp với các lệnh không chờ đợi, chẳng hạn như drive, chúng ta có thể lập trình cho VR Robot để thực hiện điều đó. Tuy nhiên, các lệnh Cảm biến cản sử dụng điều kiện của Cảm biến cản được nhấn (left_bumper.pressedhoặc right_bumper.pressed)Để mã hóa Robot VR lái trong khi Cảm biến cản được nhấnchứ không phải, chúng ta cần sử dụng toán tửchứ không phải.

def main():
	while not condition:
		wait (5, MSEC)

Để bạn biết

Các lệnh không chờ và chờ xác định thời điểm lệnh tiếp theo bắt đầu một hành vi. Các lệnh chờ, như drive_forturn_for, hoàn tất hành vi của chúng trước khi chuyển sang lệnh tiếp theo trong dự án. Các lệnh không chờ, chẳng hạn như driveturn, tiếp tục chuyển sang lệnh tiếp theo trong dự án ngay cả khi hành vi của lệnh không chờ chưa hoàn tất.

Lệnh chờ

drivetrain.drive_for(TIẾN LÊN, 200, MM)
drivetrain.turn_for(PHẢI, 90, ĐỘ)

Lệnh không chờ đợi

drivetrain.drive(FORWARD)
drivetrain.turn(RIGHT)

Từ khóa Không

Từ khóanotthường được sử dụng với vòng lặpwhileđể thực thi các lệnh bên trong vòng lặp trong khi điều kiện trả về False. Để sử dụng ví dụ 'mặt trời đang chiếu sáng', hiệu ứng tương tự có thể đạt được khi sử dụng toán tửchứ không phải. Khi mặt trời còn, hãy vào trong nhà.

Bên trái hiển thị một đoạn mã ví dụ, đọc là while not sun is shining:, come inside. Sau lệnh while là chơi bên ngoài. Bên phải là hình ảnh một ngôi nhà vào ban đêm khi mặt trăng ló dạng. Theo quy định này, khi trời không có nắng, không ai được ra ngoài chơi và phải ở trong nhà.

Trong Mê cung tường, điều này rất hữu ích để chúng ta có thể lập trình cho Robot VR sao cho khi Cảm biến cản ởchứ không phải, nó sẽ di chuyển về phía trước. Điều kiện vẫn là 'nếu Cảm biến cản được nhấn', nhưng theo cách này, khi báo cáo là Sai (không được nhấn), luồng dự án vẫn nằm trong vòng lặp. Khi nhấn Cảm biến cản, điều kiện sẽ là Đúng, do đó dự án sẽ thoát khỏi vòng lặp.Sơ đồ luồng dự án mô tả luồng của một dự án có cấu trúc while not. Ở bên trái, dự án trong định nghĩa chính được đọc là while not left bumper pressed, with a drive forward, and wait 5 mili giây command inside the loop. Bên ngoài vòng lặp là lệnh dừng. Bên phải, luồng dự án được minh họa bằng mũi tên màu đỏ tuần hoàn cho biết khi không nhấn vào thanh cản, điều kiện đó sẽ trả về giá trị sai và rô-bốt sẽ tiến về phía trước. Tiếp theo, một mũi tên màu xanh lá cây thẳng hướng xuống minh họa rằng khi nhấn vào thanh cản, điều kiện sẽ trả về giá trị đúng và dự án thoát khỏi vòng lặp khiến rô-bốt dừng lái.

Để bạn biết

Từ khóa not là toán tử logic đảo ngược giá trị của Boolean. Đặt từ khóachứ không phảitrước lệnh trả về giá trị Boolean sẽ đảo ngược True thành False và False thành True. Ví dụ, hãy tưởng tượng rằng Cảm biến cản trái trên Robot VR được nhấn và lệnh left_bumper.pressedtrả về True. Từ khóanotsẽ đảo ngược giá trị Boolean và làm cho biểu thức này trả về False.

không left_bumper.pressed()

Tùy thuộc vào dữ liệu cảm biến mà bạn đang sử dụng, từ khóachứ không phảicó thể cần thiết để khiến Robot VR thực hiện các hành vi mong muốn. 

def main():
	while not left_bumper.pressed():
		drivetrain.drive(FORWARD)
		wait(5, MSEC)
	drivetrain.stop()

Xây dựng một dự án với vòng lặpWhile và cảm biến cản

Đặt tên và Lưu Dự án

  • Mở một dự án văn bản mới và chọnWall Maze Playgroundkhi được nhắc. Ô chọn Sân chơi Mê cung Tường có chữ Mê cung Tường ở phía dưới và hiển thị mê cung ở phía trên.
  • Đặt tên cho dự án Unit4Lesson2.Thanh công cụ VEXcode VR. Tên Dự án ở giữa Thanh công cụ có nội dung Đơn vị 4 Bài 2 và được đánh dấu bằng hộp màu đỏ.

     

  • Kéo hoặc nhập lệnh whilevào không gian làm việc để thay thế lệnh Drivetrain tự động điền vào như một phần của dự án Văn bản mới. Lưu ý có lệnh wait bên trong vòng lặp. Không xóa lệnh wait, vì lệnh này sẽ đảm bảo VR Robot thực hiện dự án một cách chính xác. Dự án của bạn sẽ trông như thế này:

    def main():
    	while condition:
    		wait(5, MSEC)
  • Nhập toán tửchứ không phảisau lệnh 'while' trong lệnhwhile. Dự án của bạn bây giờ sẽ trông như thế này:

    def main():
    	while not condition:
    		wait(5, MSEC)
  • Kéo hoặc nhập lệnh left_bumper.pressedvào 'điều kiện' của vòng lặp while. Các lệnh bên trong vòng lặp sẽ thực thi khi điều kiện không đúng, nghĩa là khi Cảm biến cản trái được nhấn làchứ không phải. Dự án của bạn bây giờ sẽ trông như thế này:

    def main():
    	while not left_bumper.pressed():
    		wait(5, MSEC)
  • Bên trong vòng lặp while, kéo hoặc nhập lệnh drive. Đảm bảo rằng lệnhdrivevà lệnhwaitđược thụt lề đúng trong vòng lặpwhileđể vòng lặp chạy như mong muốn. Bạn có thể sử dụng các đường hướng dẫn như một phương tiện hỗ trợ trực quan. Dự án của bạn bây giờ sẽ trông như thế này:

    def main():
    	while not left_bumper.pressed():
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
  • Kéo vào hoặc nhập lệnh stop bên ngoài vòng lặp while. Đảm bảo rằng lệnhstopđược căn chỉnh với vòng lặpwhilevà không thụt vào, để lệnh chạy ra ngoài vòng lặp như mong muốn. Bạn có thể sử dụng các đường hướng dẫn như một phương tiện hỗ trợ trực quan.  Dự án của bạn bây giờ sẽ trông như thế này:

    def main():
    	while not left_bumper.pressed():
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
    	drivetrain.stop()
  • Mở Cửa sổ Sân chơi nếu nó chưa mở. Hãy chắc chắnSân chơi mê cung tường sốmở. 
  • Chạy dự án.
  • Xem Robot VR di chuyển từ đầu Mê cung tường và dừng lại khi Cảm biến cản được ấn vào tường.
  • Lệnh Drive cho phép VR Robot tiếp tục tiến về phía trước trong khi kiểm tra tình trạng của Cảm biến cản bằng lệnh Nhấn cản trái. Khi lệnh left_bumper.pressedbáo cáo là Đúng, Robot VR sẽ di chuyển đến lệnh tiếp theo bên ngoài vòng lặp và dừng lái.

Chọn nút Tiếp theo để tiếp tục phần còn lại của Bài học này.