Skip to main content

Bài 4: Sử dụng vòng lặp lồng nhau

Trong Bài học trước, bạn đã tạo một dự án để hướng dẫn Robot VR lái xe đến, nhặt và di chuyển cả ba đĩa màu xanh trong Sân chơi di chuyển đĩa vào mục tiêu màu xanh. Trong Bài học này, bạn sẽ tạo một dự án để nhặt và di chuyển một đĩa của mỗi màu vào mục tiêu có màu tương ứng trong Sân chơi di chuyển đĩa bằng cách sử dụng các vòng lặp lồng nhau!

Góc nhìn từ trên xuống của Sân chơi Di chuyển đĩa với đĩa đầu tiên của mỗi màu nằm trong mục tiêu có màu tương ứng. Robot VR hướng mặt về phía bức tường bên phải ở rìa khung thành màu xanh lá cây, ở góc dưới bên phải.

Kết quả học tập

  • Xác định cách lồng các vòng lặp.
  • Mô tả luồng của một dự án thông qua các vòng lặp lồng nhau.
  • Giải thích lý do tại sao các vòng lặp lồng nhau được sử dụng trong một dự án.

Vòng lặp lồng nhau là gì?

Trong các Đơn vị và Bài học trước của khóa học này, bạn đã sử dụng các vòng lặp từ danh mục Kiểm soát như vòng lặp for , vòng lặp while và vòng lặp vô hạn whileđể lặp lại các hành vi. Việc đặt một vòng lặp bên trong một vòng lặp khác được gọi là 'lồng ghép'. Các vòng lặp lồng nhau hữu ích trong các dự án mà Robot VR lặp lại cùng một hành vi nhiều lần, chẳng hạn như di chuyển nhiều đĩa trên Sân chơi. Các vòng lặp lồng nhau có thể sắp xếp và cô đọng một dự án, giúp bạn hiểu dự án dễ hơn. Điều này có thể hữu ích để hiểu rõ hơn bối cảnh và mục đích của mã, cũng như giúp xác định lỗi và khắc phục sự cố của dự án dễ dàng hơn. 

Ví dụ, để di chuyển cả ba đĩa màu xanh đến mục tiêu màu xanh, có thể sử dụng vòng lặpchođể lặp lại quá trình thu thập đĩa nhiều lần. Dự án được hiển thị ở đây đặt dự án Bài 3 để di chuyển đĩa màu xanh đầu tiên đến mục tiêu màu xanh bên trong vòng lặp cho , với tham số được đặt thành 3. Lưu ý cách bốn phần của dự án trước được thụt vào trong vòng lặp for.

def main():
    cho repeat_count trong phạm vi(3):
        #1. Lái đến đĩa đầu tiên
        khi không down_eye.near_object():
            drivetrain.drive(FORWARD)
            wait(5, MSEC)
        drivetrain.stop()

        # 2. Nhấc đĩa
        nam châm.kích hoạt(BOOST)

        # 3. Lái xe đến đích
        drivetrain.turn_to_heading(180, DEGREES)
        while front_distance.get_distance(MM) > 200:
            drivetrain.drive(FORWARD)
            wait(5, MSEC)
        drivetrain.stop()

        # 4. Thả đĩa vào mục tiêu
        magnet.energize(DROP)

        drivetrain.drive_for(REVERSE, 100, MM)
        drivetrain.turn_to_heading(0, DEGREES)

    wait(5, MSEC)

Khi bạn 'lồng' các vòng lặp, vòng lặp bên ngoài sẽ kiểm soát số lần thực hiện vòng lặp bên trong.  Trong dự án này, vòng lặpcholà vòng lặp bên ngoài và sẽ lặp lại các hành vi trong vòng lặp ba lần.

Dự án nhìn từ trên xuống với vòng lặp for được đánh dấu trong hộp màu đỏ. Thụt lề bên dưới định nghĩa chính, dấu hai chấm for repeat underscore count in range (3) là phần bắt đầu của vòng lặp và bốn phần của dự án được thụt lề bên dưới phần đó. Cùng với lệnh vòng lặp for ở cuối dự án là lệnh wait, hiển thị vị trí kết thúc của vòng lặp.

Các vòng lặp bên trong là những vòng lặp nằm bên trong vòng lặp bên ngoài. Trong ví dụ này, mỗi vòng lặpwhile(để đưa dữ liệu vào đĩa và đến đích) là 'vòng lặp bên trong' được thực thi mỗi khi dự án di chuyển qua vòng lặpfor.Cùng một dự án ở trên, với mỗi vòng lặp while bên trong được đánh dấu bằng hộp màu đỏ. Phần bình luận đầu tiên và thứ ba của dự án chứa các vòng lặp while để sử dụng các cảm biến trên rô-bốt để điều khiển cho đến khi phát hiện ra đĩa, sau đó cho đến khi phát hiện ra bức tường.

Để bạn biết

Việc thụt lề rất quan trọng trong các dự án Python của VEXcode VR. Bạn có thể sử dụng các đường chỉ báo màu xám trong không gian làm việc như một công cụ hỗ trợ trực quan khi lồng các vòng lặp, để đảm bảo rằng dự án của bạn hoạt động như mong đợi. Mỗi dòng chỉ ra điểm bắt đầu và kết thúc của một vòng lặp.

Cùng một dự án nhìn từ trên xuống với các đường hướng dẫn được đánh dấu trong hộp màu đỏ, cho thấy sự căn chỉnh thụt lề của từng vòng lặp bên trong so với phần còn lại của dự án. Vòng lặp for mở rộng thẳng đến lệnh wait cuối cùng. Và mỗi dòng vòng lặp while mở rộng đến lệnh dừng.

Luồng của một dự án vòng lặp lồng nhau 

Trong ví dụ này, mỗi lần vòng lặpcholặp lại, một đĩa màu xanh sẽ được nhặt lên và trả về mục tiêu màu xanh. 

Sau lần lặp đầu tiên, đĩa xanh đầu tiên được trả về mục tiêu xanh và VR Robot được xoay để sẵn sàng thu thập đĩa thứ hai.

Hình ảnh cạnh nhau của dự án từ trên được hiển thị trong không gian làm việc bên trái và Cửa sổ Sân chơi được hiển thị bên phải. Dự án có một mũi tên màu cam bao quanh toàn bộ dự án từ lệnh vòng lặp for, minh họa cho lần lặp đầu tiên của vòng lặp for. Trên Sân chơi, đĩa màu xanh đầu tiên nằm ở mục tiêu màu xanh và Robot VR được đặt đối diện với các đĩa màu xanh còn lại, ở đầu mục tiêu, cho biết vị trí của robot sau lần lặp đầu tiên.

Sau lần lặp thứ hai, đĩa xanh thứ hai được thu thập và VR Robot được xoay để sẵn sàng thu thập đĩa thứ ba.

Hình ảnh cạnh nhau của dự án từ trên được hiển thị trong không gian làm việc bên trái và Cửa sổ Sân chơi được hiển thị bên phải. Dự án có một mũi tên màu cam bao quanh toàn bộ dự án từ lệnh vòng lặp for, minh họa cho lần lặp thứ hai của vòng lặp for. Trên Sân chơi, có 2 đĩa màu xanh nằm ở mục tiêu màu xanh và Robot VR được đặt đối diện với đĩa màu xanh còn lại, ở đầu mục tiêu, cho biết vị trí của robot sau lần lặp thứ hai.

Sau lần lặp thứ ba, đĩa xanh thứ ba được thu thập và Robot VR ngừng di chuyển. Vòng lặpcho hiện đã hoàn thành phạm vi của nó, do đó dự án đã hoàn thành. 

Hình ảnh cạnh nhau của dự án từ trên được hiển thị trong không gian làm việc bên trái và Cửa sổ Sân chơi được hiển thị bên phải. Dự án có một mũi tên màu cam bao quanh toàn bộ dự án từ lệnh vòng lặp for, minh họa cho lần lặp thứ ba của vòng lặp for. Trên Sân chơi, cả ba đĩa màu xanh đều nằm trong khung thành màu xanh và Robot VR được đặt quay mặt ra xa khung thành ngay bên ngoài hộp khung thành, cho biết vị trí của robot sau lần lặp cuối cùng.

 

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.