Skip to main content

Bài 2: Sử dụng toán tử so sánh

Trong Bài học này, bạn sẽ tìm hiểu về các toán tử so sánh và cách sử dụng chúng trong một dự án có dữ liệu từ Cảm biến khoảng cách. Sau đó, bạn sẽ tạo một dự án điều hướng Robot VR đến chữ 'A' bằng Cảm biến khoảng cách với các vòng lặp while và toán tử lớn hơn (>). 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 số '1'.

Góc nhìn từ trên xuống của Sân chơi Mê cung tường với Robot VR ở vị trí bắt đầu ở giữa phía dưới Sân chơi. Chữ A nằm ngay bên trái của robot, được ngăn cách bởi một bức tường ngắn. Số 1 nằm về phía góc bên phải của robot, được ngăn cách bởi một bức tường dọc và một bức tường ngang.

Kết quả học tập

  • Xác định rằng lớn hơn (>), nhỏ hơn (<) và bằng (==) là các toán tử so sánh dùng để so sánh hai giá trị, được gọi là toán hạng.  
  • Xác định rằng toán tử lớn hơn (>) so sánh hai giá trị và báo cáo Đúng nếu giá trị bên trái lớn hơn giá trị bên phải.
  • Xác định rằng toán tử nhỏ hơn (<) so sánh hai giá trị và báo cáo Đúng nếu giá trị bên trái nhỏ hơn giá trị bên phải.
  • Xác định rằng các toán tử lớn hơn (>) hoặc nhỏ hơn (<) báo cáo giá trị Đúng hoặc Sai khi được sử dụng làm điều kiện 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 giá trị của Cảm biến khoảng cách nhỏ hơn một lượng nhất định.

Toán tử so sánh

Các toán tử nhỏ hơn (<), lớn hơn (>) và bằng (==) so sánh hai giá trị, còn được gọi là toán hạng. Giá trị bên trái của toán tử là toán hạng đầu tiên và giá trị bên phải là toán hạng thứ hai. Các toán tử báo cáo các giá trị Boolean và trả về giá trị True khi phép so sánh đúng và False khi phép so sánh là KHÔNG phảiđúng.

  • Trong các ví dụ này sử dụng toán tử nhỏ hơn (<), khi câu lệnh đúng về mặt số, nó sẽ báo cáo là Đúng.Đối với các hàng có toán tử nhỏ hơn - hàng trên cùng sẽ ghi 50 nhỏ hơn 25 và được gắn nhãn là 'báo cáo sai'. Hàng dưới cùng ghi là 25 nhỏ hơn 50 và được dán nhãn là 'báo cáo đúng'.
  • Tương tự như vậy, trong các ví dụ này sử dụng toán tử lớn hơn (>), câu lệnh đúng về mặt số sẽ báo cáo là Đúng.Đối với các hàng có toán tử lớn hơn - hàng trên cùng sẽ ghi 50 lớn hơn 25 và được gắn nhãn là 'báo cáo đúng'. Hàng dưới cùng có số lớn hơn 50 là 25 và được dán nhãn là 'báo cáo sai'.
  • Toán tử bằng (==) báo cáo True khi hai giá trị hoàn toàn giống nhau và False khi chúng không giống nhau.Đối với các hàng có toán tử bằng - hàng trên cùng sẽ ghi 50 = = 50 và được dán nhãn là 'báo cáo đúng'. Hàng dưới cùng ghi 25 = = 50 và được dán nhãn là 'báo cáo sai'.
    • Lưu ý rằng dấu bằng kép có nghĩa là "bằng" và so sánh hai giá trị. Một dấu bằng là toán tử gán có tác dụng gán giá trị cho một biến.

Các toán tử so sánh có thể so sánh các số thập phân, số nguyên hoặc các lệnh báo cáo số.

Sử dụng toán tử so sánh với dữ liệu cảm biến khoảng cách

Các toán tử so sánh đặc biệt hữu ích khi bạn sử dụng dữ liệu số từ cảm biến, như Cảm biến khoảng cách, để giúp Robot VR đưa ra quyết định. Trong Đơn vị trước, dữ liệu từ Cảm biến cản được sử dụng để khiến Robot VR quay khi Cảm biến cản được nhấn. Tuy nhiên, với toán tử so sánh, chúng ta có thể sử dụng dữ liệu từ Cảm biến khoảng cách để khiến Robot VR quay ở vị trí chính xác hơn. Tính năng này hữu ích để tránh đâm vào tường hoặc để điều hướng Robot VR đến một địa điểm cụ thể trên Sân chơi. 

Dữ liệu từ Cảm biến khoảng cách có thể được sử dụng làm một trong các giá trị trong toán tử so sánh.

front_distance.get_distance(MM) > 50

Ví dụ, nếu chúng ta muốn Robot VR di chuyển về phía một vật thể, chẳng hạn như bức tường, rồi dừng lại khi đến gần vật thể đó, chúng ta có thể thực hiện điều này bằng cách sử dụng toán tử so sánh và hàm get _distance. Về cơ bản, chúng tôi yêu cầu Robot VR lái xe khi khoảng cách giữa robot và vật thể lớn hơn giá trị ngưỡng, chẳng hạn như 50 milimét (mm).Góc nhìn cận cảnh phần trung tâm phía dưới của Sân chơi mê cung tường, với Robot VR ở ô vuông bắt đầu. Một mũi tên màu xanh lá cây kéo dài từ phía trước của robot đến khoảng cách khoảng 50mm tính từ bức tường đầu tiên đối diện, minh họa nơi mà khoảng cách lớn hơn 50mm được báo cáo là đúng. Một mũi tên màu đỏ kéo dài từ phía trước mũi tên màu xanh lá cây đến tường, minh họa nơi khoảng cách lấy dữ liệu lớn hơn 50mm được báo cáo là sai.

Trong khi Cảm biến khoảng cách báo cáo rằng giá trị làhơnso với 50 milimét (mm) hoặc giá trị lớn hơnso với(>) 50, thì Robot VR có thể tự do di chuyển. Khi Cảm biến khoảng cách báo cáo rằng khoảng cách gầnhơnso với 50 milimét (mm) hoặc giá trị lớn hơn (>) 50 làchứ không phải, thì Robot VR cần dừng lại hoặc quay trước khi va vào tường. 

Để bạn biết

Việc lựa chọn toán tử so sánh nào để sử dụng có thể là một lựa chọn mang tính phong cách. Toán tử lớn hơn (>) được sử dụng trong ví dụ trên để làm cho dự án rõ ràng và dễ đọc nhất có thể. Khi Robot VR ở khoảng cách lớn hơn 50 mm, hãy di chuyển về phía trước. Bạn có thể đạt được mục tiêu tương tự bằng cách đảo ngược thứ tự các giá trị trong toán tử và bằng cách sử dụng toán tử nhỏ hơn (<).

trong khi 50 > front_distance.get_distance(MM):

Ở đây, Robot VR sẽ di chuyển khi 50 mm lớn hơn giá trị được cảm biến khoảng cách báo cáo. Robot VR cũng có thể thực hiện hành vi tương tự, tuy nhiên, dự án này có phần kém rõ ràng và khó đọc hơn. 

Tùy thuộc vào dữ liệu cảm biến mà bạn đang sử dụng, toán tử bằng (==) có thể không khiến Robot VR hoạt động như bạn mong muốn. Ví dụ, nếu mục tiêu là để Robot VR dừng lại cách một vật thể 50 mm, bạn có thể nghĩ đến việc sử dụng toán tử bằng (==).

trong khi front_distance.get_distance(MM) == 50:

Tuy nhiên, ví dụ như trong Mê cung tường, việc sử dụng toán tử bằng (==) với Cảm biến khoảng cách sẽ yêu cầu cảm biến phải đọc chính xác đến mức, phải làx50 mm, do đó tốc độ của Robot VR sẽ khiến việc đạt được mức độ chính xác đó theo thời gian thực gần như là không thể. Do đó, Robot VR có thể sẽ tiếp tục vượt qua ngưỡng vì dù báo cáo giá trị là 100 mm hay 25 mm thì cả hai giá trị này đều bằng50 mm, do đó người vận hành không bao giờ báo cáo là Đúng. 

Toán tử so sánh và bài toán mê cung tường

Có thể sử dụng vòng lặp while với các toán tử so sánh và Cảm biến khoảng cách để Robot VR liên tục kiểm tra dữ liệu cảm biến và đánh giá quá trình so sánh. Điều này có thể cho phép Robot VR thực hiện hành vi khi giá trị cao hơn hoặc thấp hơn một ngưỡng nhất định. Trong Mê cung tường, kết quả mong muốn là Robot VR di chuyển về phía trướcCảm biến khoảng cách hơn 50 milimét (mm) so với tường. Sau đó, nó sẽ dừng lại hoặc rẽ để tiếp tục đi qua mê cung.

def main():
    while front_distance.get_distance(MM) > 50:
        drivetrain.drive(FORWARD)
        wait(5, MSEC)
    drivetrain.stop()

Trong ví dụ video clip này, vòng lặp whiletrong dự án được hiển thị bên trái sẽ giữ cho VR Robot tiến về phía trước từ vị trí bắt đầu, miễn là điều kiện được đáp ứng và khoảng cách giữa VR Robot và vật thể gần nhất (bức tường đầu tiên đối diện) được báo cáo là lớn hơn 50 milimét (mm). Sau đó, robot dừng lại khi tiếp cận bức tường đầu tiên và khoảng cách được báo cáo là nhỏ hơn 50mm.

Tập tin video

Hình ảnh này giải thích luồng của dự án ở trên:

  • Trong khi Cảm biến Khoảng cách lớn hơn 50 milimét (mm) tính từ tường, người vận hành báo cáo Đúng và giữ nguyên vòng lặp while
  • Khi cách tường dưới 50 milimét (mm), người vận hành báo cáo Sai và thoát khỏi vòng lặpwhile.

Sơ đồ luồng dự án của vòng lặp while trong dự án ở trên. Vòng lặp while sẽ tiếp tục chạy khi khoảng cách từ tường lớn hơn 50mm và điều kiện đó được báo cáo là đúng, khiến robot tiến về phía trước. Khi khoảng cách từ tường không lớn hơn 50, điều kiện báo cáo là sai và dự án tồn tại vòng lặp while, khiến robot 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.