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'.

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.pressedvà right_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.

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.

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_forvà turn_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ư drivevà turn, 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à.

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.
Để 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.

-
Đặt tên cho dự án Unit4Lesson2.

-
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.