Skip to main content

Bài 2: Xây dựng và kiểm tra dự án

Tiếp tục xây dựng dự án 

  • Bây giờ điều kiện của câu lệnh if elsecần được thiết lập. Để sử dụng Cảm biến khoảng cách để phát hiện lâu đài, có thể sử dụng lệnh found_object. Thêm lệnh found_objectvào điều kiện. Dự án của bạn bây giờ sẽ trông như thế này:

    def main():
    	# Cảm biến khoảng cách có phát hiện được lâu đài không?
    	
    	nếu front_distance.found_object():
    		# Lâu đài sụp đổ được phát hiện bằng Cảm biến khoảng cách
    		vượt qua
    		
    	khác:
    		# Quay lại để tìm lâu đài bằng cách sử dụng Cảm biến khoảng cách
    		lần vượt qua
  • Nếu Cảm biến khoảng cách tìm thấy vật thể, Robot VR sẽ tiến về phía trước để đánh đổ lâu đài. Thêm lệnh drivevào nhánh 'if' của câu lệnh if else và đặt tham số để điều khiển Robot VR tiến về phía trước. (Lệnh này sẽ thay thế lệnh 'pass'). 

    def main():
    	# Cảm biến khoảng cách có phát hiện được lâu đài không?
    	
    	nếu front_distance.found_object():
    		# Lâu đài va chạm được phát hiện bởi Cảm biến khoảng cách
    		drivetrain.drive(FORWARD)
    		
    	else:
    		# Quay lại để tìm lâu đài bằng cách sử dụng Cảm biến khoảng cách
    
  • Khi lệnh found_object báo cáo Sai, nhánh 'else' sẽ chạy, do đó VR Robot sẽ cần phải quay lại để tìm lâu đài trên Sân chơi. Thêm lệnh lượt vào nhánh 'else' và thiết lập các tham số để xoay Robot VR sang phải. 

    def main():
    	# Cảm biến khoảng cách có phát hiện được lâu đài không?
    	
    	if front_distance.found_object():
    		# Phát hiện lâu đài va chạm bằng Cảm biến khoảng cách
    		drivetrain.drive(FORWARD)
    		
    	else:
    		# Quay lại để tìm lâu đài bằng Cảm biến khoảng cách
    		drivetrain.turn(RIGHT)

Để bạn biết

Nhánh 'else' của câu lệnhif elsechỉ hoạt động trong một dự án như một phần của câu lệnhif else. Mặc dù bạn có thể có câu lệnhifđứng riêng, nhưng không có câu lệnh 'else' nào trong VEXcode VR Python. Nhánh 'else' được chạy khi điều kiện của nhánh 'if' không được đáp ứng. Nếu không có điều kiện xác định (nhánh 'if'), nhánh 'else' sẽ không bao giờ chạy. Ba đoạn mã minh họa các câu lệnh có điều kiện trong Python, mỗi câu lệnh có một câu lệnh if kèm theo một điều kiện theo sau là từ khóa pass. Hai đoạn trích đầu tiên có dấu kiểm màu xanh lá cây phía trên, cho biết cách sử dụng đúng. Đoạn mã đầu tiên chỉ bao gồm một câu lệnh if, trong khi đoạn mã thứ hai bao gồm cả câu lệnh if và else với từ khóa pass trong mỗi câu lệnh. Đoạn mã thứ ba, được đánh dấu bằng dấu chéo đỏ, chỉ bao gồm một câu lệnh else với pass, cho biết cách sử dụng không đúng, vì câu lệnh else phải theo sau câu lệnh if.

Thêm vòng lặp và kiểm tra dự án

  • Trước khi thử nghiệm dự án, cần thêm một lệnh nữa. Các câu lệnh If else sẽ chỉ kiểm tra điều kiện một lần trước khi chuyển sang lệnh tiếp theo bên ngoài câu lệnh. Trong Đơn vị 7, một vòng lặp vô hạnwhile đã được thêm vào dự án để hướng dẫn Robot VR kiểm tra nhiều lần tình trạng của Cảm biến mắt xuống. Để đảm bảo điều kiện Cảm biến khoảng cách được kiểm tra lặp lại, hãy kéo vào hoặc nhập vòng lặp vô hạn while , sau đó sao chép câu lệnhif elsevào bên trong vòng lặp vô hạnwhile. Dự án của bạn bây giờ sẽ trông như thế này:
    • Hãy nhớ chú ý đến việc thụt lề khi sao chép và dán lệnh vào vòng lặp để dự án hoạt động như mong muốn khi chạy. 

      def main():
      
      	while True:
      		# Cảm biến khoảng cách có phát hiện được lâu đài không?
      	
      		if front_distance.found_object():
      			# Lâu đài va chạm được phát hiện bởi Cảm biến khoảng cách
      			drivetrain.drive(FORWARD)
      		
      		else:
      			# Quay lại để tìm lâu đài bằng Cảm biến khoảng cách
      			drivetrain.turn(RIGHT)
      		
      		wait(5, MSEC)
  • Mở Cửa sổ Sân chơi nếu nó chưa mở. Hãy đảm bảo rằngDynamic Castle Crasher Playgroundmở ra và chạy dự án. Góc nhìn từ trên xuống của Sân chơi Dynamic Castle Crasher cho thấy chỉ có một số lâu đài bị đổ. Robot VR nằm ở góc trên bên phải của sân chơi sau khi di chuyển quanh sân chơi.
  • Sau khi VR Robot đã đánh đổ ít nhất hai lâu đài, hãy tải lại Sân chơi và chạy dự án trên một bố cục khác của Sân chơi Dynamic Castle Crasher. Góc nhìn từ trên xuống của Dynamic Castle Crasher với giao diện sân chơi. Nút đặt lại ở góc dưới bên trái của giao diện sân chơi được đánh dấu bằng hộp màu đỏ.
  • Trong mỗi lần chạy của dự án, Robot VR sẽ quay cho đến khi Cảm biến khoảng cách phát hiện ra một tòa lâu đài, sau đó lái về phía tòa nhà đó để đánh đổ nó.Góc nhìn từ sân chơi Dynamic Castle Crasher cho thấy Robot VR đang đẩy một mảnh lâu đài qua đường viền màu đỏ và ra khỏi mép sân chơi.
  • Trong quá trình thực hiện dự án, Robot VR có thể đẩy một mảnh lâu đài ra tận mép và rơi khỏi Sân chơi. Nguyên nhân là do lệnh found_objectvẫn báo cáo rằng có một vật thể ở phía trước Robot VR. Khi lệnh này báo cáo là Đúng, VR Robot sẽ tiến về phía trước, khiến VR Robot rơi khỏi Sân chơi.

Luồng dự án với câu lệnh If Else

Câu lệnh if else được sử dụng để VR Robot có thể đưa ra quyết định. Nếu điều kiện Boolean là Đúng, thì các lệnh bên trong nhánh 'if' sẽ chạy. Nếu điều kiện Boolean là False, thì các lệnh bên trong nhánh 'else' sẽ chạy.

Ví dụ, trong lần lặp lại này của Dynamic Castle Crasher Playground, khi dự án được bắt đầu, Cảm biến khoảng cách phát hiện một vật thể – điều kiện của lệnhfound_objectbáo cáo là Đúng. Bây giờ nhánh 'if'của dự án sẽ chạy và VR Robot sẽ tiến về phía trước. Robot VR sẽ bỏ qua nhánh 'else' của dự án.Bên trái là đoạn mã hiện tại của dự án. Bên phải là góc nhìn từ trên xuống của sân chơi Dynamic Castle Crasher với giao diện sân chơi có thể nhìn thấy được. Số đo của Cảm biến khoảng cách trên giao diện sân chơi là 568 mm và được đánh dấu bằng hộp màu đỏ. Điều này cho thấy lâu đài ở giữa sân chơi cách Robot VR 568 mm.

  • Lưu ý rằng dữ liệu Cảm biến khoảng cách cũng được báo cáo trong Bảng điều khiển. Khi phát hiện vật thể, giá trị khoảng cách sẽ được hiển thị.

Tuy nhiên, trong lần lặp lại này của Dynamic Castle Crasher Playground, khi dự án được bắt đầu, Cảm biến khoảng cách KHÔNG phát hiện ra vật thể – điều kiện của lệnhfound_object báo cáo là Sai. Bây giờ VR Robot sẽ bỏ qua nhánh 'if' của dự án và nhánh 'else' của dự án sẽ chạy, do đó VR Robot sẽ rẽ phải.Bên trái là đoạn mã hiện tại của dự án. Bên phải là góc nhìn từ trên xuống của sân chơi Dynamic Castle Crasher với giao diện sân chơi có thể nhìn thấy được. Số đo của Cảm biến khoảng cách trên giao diện sân chơi là 1354 mm và được đánh dấu bằng hộp màu đỏ. Điều này cho thấy lâu đài ở phía trên sân chơi cách Robot VR 1354 mm.

  • Lưu ý rằng giá trị Cảm biến khoảng cách trong Bảng điều khiển được báo cáo là > 3000 mm. Cảm biến khoảng cách có thể phát hiện các vật thể trong phạm vi 3000 mm, do đó khi không phát hiện thấy vật thể, giá trị sẽ được báo cáo là lớn hơn (>) 3000 mm. 

Vì câu lệnh if else nằm bên trong vòng lặp vô hạn while , nên dự án lặp lại đến đầu vòng lặp vô hạnwhile để kiểm tra điều kiện của câu lệnh if else nhiều lần. Vòng lặp này sẽ tiếp tục mãi mãi, hướng dẫn Robot VR liên tục kiểm tra điều kiện if elsehàng trăm lần mỗi giây.This is the project's code snippet surrounded by an orange arrow that begins and ends on the while True: statement at the top of the code snippet. There is a note on the arrow that says Loops continuously, showing that anything nested in the while True loop will repeat forever.

  • Lưu ý rằng các lệnh driveturn bên trong câu lệnh if elselà các lệnh không chờ. Các lệnh không chờ sẽ không dừng tiến trình của một dự án trong khi chúng đang chạy.  Hành vi không chờ đợi được thực hiện trong câu lệnh if else (chẳng hạn như 'tiến về phía trước nếu phát hiện thấy đối tượng') sẽ tiếp tục trong khi điều kiện được kiểm tra và chỉ thay đổi khi điều kiện thay đổi.

Để bạn biết

Câu lệnhif elseđược sử dụng để đảm bảo rằng chỉ có một nhánh trong dự án được chạy khi điều kiện được kiểm tra. Chỉ có một trường hợp hoặc điều kiện có thể đúng tại một thời điểm. Điều này làm cho dự án hiệu quả hơn.

Mã dự án Python với các mũi tên trỏ đến các câu lệnh if và else. Phần đầu của mũi tên có nội dung Kiểm tra điều kiện của Cảm biến khoảng cách để hiển thị câu lệnh distance.found_object nếu kiểm tra điều kiện. Nếu phát hiện được đối tượng, lệnh trong câu lệnh if sẽ được thực thi, nhưng nếu không phát hiện được đối tượng nào, lệnh trong câu lệnh else sẽ được thực thi.

So sánh dự án hiện tại với dự án được tạo ở Đơn vị 7.  Dự án Đơn vị 7 sử dụng bốn câu lệnh nếu

Mã dự án từ Đơn vị 7 với một mũi tên màu cam lớn bao quanh toàn bộ mã, bắt đầu và kết thúc tại câu lệnh while True. Một lưu ý trên mũi tên màu cam có nội dung Nếu các câu lệnh trong vòng lặp while vô hạn được kiểm tra nhiều lần. Các mũi tên màu xanh lá cây bên trong câu lệnh while True cho thấy luồng của dự án, bắt đầu với từng câu lệnh if về việc liệu một màu nhất định có được nhìn thấy hay không và hành vi cần thực hiện cho phù hợp, cho dù đó là thực hiện một hành vi hay chuyển sang câu lệnh if tiếp theo cho đến khi kết thúc, nơi mọi thứ lặp lại một lần nữa.

Khi chạy qua một dự án với nhiều câu lệnh if , có khả năng nhiều điều kiện sẽ báo cáo là Đúng (hoặc Sai) khi dự án chạy qua các lệnh trong vòng lặp vô hạn while. Những xung đột như thế này có thể khiến dự án ngừng hoạt động hoặc chạy chậm hơn. 

Nói cách khác, nhiều câu lệnh nếutrong một dự án giống như đi trên một con đường có nhiều lối ra. Tùy thuộc vào nơi bạn muốn đến, bạn sẽ rẽ ở những địa điểm khác nhau. Ví dụ,nếubạn đi đến trường, bạn sẽ rẽ trái; nếu bạn đi đến cửa hàng, bạn sẽ rẽ phải. Nhưng nếu bạn không đi học hoặc đi mua sắm thì sao? Cả hai điều kiện đều báo cáo là Sai và bạn sẽ vẫn đi đúng đường. Hoặc nếu bạn vừa đi học vừa đi đến cửa hàng thì sao? Cả hai điều kiện đều báo cáo là Đúng, nhưng bạn không thể rẽ ở hai địa điểm cùng một lúc. Sơ đồ hiển thị giao lộ hình chữ T màu xám có ba mũi tên chỉ hướng - một mũi tên chỉ sang trái, một mũi tên chỉ thẳng lên trên và một mũi tên chỉ sang phải. Ở giữa ngã tư là một Robot VR. Bên phải sơ đồ là hai câu lệnh điều kiện theo định dạng mã: nếu đi đến trường: Rẽ trái và nếu đi đến cửa hàng: Rẽ phải. Các câu lệnh if được viết bằng chữ đen và xanh, trong đó if màu xanh và các hướng dẫn định hướng màu xanh.

 

Để tiếp tục phép so sánh, câu lệnh if elsegiống như việc đi đến ngã ba đường – nó buộc bạn phải đưa ra quyết định. Nếubạn đi đến trường, rẽ trái; nếu không thìrẽ phải. Bất kể bạn đi đâu, bạn đều phải rẽ trái hoặc rẽ phải. Sử dụng câu lệnh if elsesẽ tránh được các lỗi như trên, vì nó sẽ buộc bạn phải đưa ra quyết định, vì chỉ có một điều kiện có thể là Đúng tại một thời điểm nhất định.A diagram showing a gray Y-shaped intersection with two directional paths - one leading left and one leading right. In the center of the intersection is the VR Robot. Above the diagram is code showing conditional statements in code format: if going to school: Turn left and else: Turn right. The if and else statements are written in black and blue text, with if and else in blue and the directional instructions in lighter blue.

Câu hỏi

Vui lòng chọn liên kết bên dưới để truy cập bài kiểm tra bài học.

Google Doc / .docx / .pdf