Skip to main content

2과: 프로젝트 빌드 및 테스트

프로젝트 계속 구축 

  • 이제 if else문의 조건을 설정해야 합니다. 거리 센서를 사용하여 성을 감지하려면 found_object명령을 사용할 수 있습니다. 조건에 found_object명령을 추가합니다. 이제 프로젝트는 다음과 같이 보일 것입니다.

    def main():
    	# 거리 센서가 성을 감지했나요?
    	
    	if front_distance.found_object():
    		# 거리 센서가 감지한 충돌 성
    		패스
    		
    	else:
    		# 거리 센서를 사용하여 성을 찾기 위해 돌아서기
    		패스
  • 거리 센서가 물체를 찾으면, VR 로봇은 앞으로 달려가 성을 무너뜨려야 합니다. if else 문의 'if' 분기에 drive명령을 추가하고 VR 로봇을 전진시키도록 매개변수를 설정합니다. (이 명령은 '패스'를으로 대체해야 합니다). 

    def main():
    	# 거리 센서가 성을 감지했나요?
    	
    	if front_distance.found_object():
    		# 거리 센서가 감지한 충돌 캐슬
    		drivetrain.drive(FORWARD)
    		
    	else:
    		# 거리 센서를 사용하여 성을 찾기 위해 회전
    		pass
  • found_object 명령이 False를 보고하면 'else' 분기가 실행되므로 VR 로봇은 놀이터에서 성을 찾기 위해 방향을 바꿔야 합니다. 'else' 분기 안에 turn 명령을 추가하고 VR 로봇을 오른쪽으로 회전하도록 매개변수를 설정합니다. 

    def main():
    	# 거리 센서가 성을 감지했나요?
    	
    	if front_distance.found_object():
    		# 거리 센서가 감지한 충돌 성
    		drivetrain.drive(FORWARD)
    		
    	else:
    		# 거리 센서를 사용하여 성을 찾기 위해 회전
    		drivetrain.turn(RIGHT)

귀하의 정보를 위해

if else문의 'else' 분기는 프로젝트 내에서if else문의 일부로만 기능합니다. if문은 독립적으로 사용할 수 있지만 VEXcode VR Python에는 'else' 문이 없습니다. 'if' 분기의 조건이 충족되지 않으면 'else' 분기가 실행됩니다. 정의된 조건(if 분기)이 없으면 'else' 분기는 실행되지 않습니다. 파이썬에서 조건문을 보여주는 세 개의 코드 조각으로, 각각 조건이 있는 if 문 뒤에 pass 키워드가 붙습니다. 처음 두 개의 스니펫 위에는 녹색 체크 표시가 있어 올바르게 사용되었음을 나타냅니다. 첫 번째 스니펫에는 if 문만 포함되어 있는 반면, 두 번째 스니펫에는 if 문과 else 문이 모두 포함되어 있으며 각각에 pass 키워드가 있습니다. 빨간색 십자가로 표시된 세 번째 스니펫은 pass가 포함된 else 문으로만 구성되어 있어 잘못된 사용법을 나타냅니다. else 문은 if 문 뒤에 나와야 합니다.

루프를 추가하고 프로젝트 테스트

  • 프로젝트를 테스트하기 전에 하나의 명령을 더 추가해야 합니다. If else 명령문은 명령문 외부의 다음 명령으로 넘어가기 전에 조건을 한 번만 확인합니다. 7단원에서는 VR 로봇이 다운 아이 센서의 상태를 반복적으로 확인하도록 지시하기 위해 무한while 루프를 프로젝트에 추가했습니다. 거리 센서 조건이으로 확인되는지 확인하려면 무한 while 를 드래그하거나 입력한 다음, 무한 루프인while 안에if else문을 복사합니다. 이제 프로젝트는 다음과 같이 보일 것입니다.
    • 루프에 명령을 복사하여 붙여넣을 때 들여쓰기에 유의하세요. 그렇지 않으면 프로젝트가 실행될 때 의도한 대로 작동할 것입니다. 

      def main():
      
      	while True:
      		# 거리 센서가 성을 감지했나요?
      	
      		if front_distance.found_object():
      			# 거리 센서가 감지한 충돌 성
      			drivetrain.drive(FORWARD)
      		
      		else:
      			# 거리 센서를 사용하여 성을 찾기 위해 회전
      			drivetrain.turn(RIGHT)
      		
      		wait(5, MSEC)
  • 놀이터 창이 아직 열려 있지 않으면 엽니다. Dynamic Castle Crasher Playground이 열리고 프로젝트를 실행하세요. Dynamic Castle Crasher 놀이터를 위에서 내려다본 모습. 일부 성만 무너진 것을 보여줍니다. VR 로봇은 놀이터를 돌아다닌 후 놀이터 오른쪽 상단에 있습니다.
  • VR 로봇이 최소 두 개의 성을 무너뜨리면 놀이터를 다시 로드하고 Dynamic Castle Crasher 놀이터의 다른 레이아웃에서 프로젝트를 실행합니다. 놀이터 인터페이스가 있는 Dynamic Castle Crasher의 위에서 내려다본 모습. 놀이터 인터페이스의 왼쪽 하단에 있는 재설정 버튼은 빨간색 상자로 강조 표시됩니다.
  • 프로젝트를 실행할 때마다 VR 로봇은 거리 센서가 성을 감지할 때까지 회전한 다음 해당 건물을 향해 주행하여 성을 쓰러뜨립니다.Dynamic Castle Crasher 놀이터의 각도에서 본 모습. VR 로봇이 성의 일부를 빨간색 경계선 너머로 밀어 놀이터 가장자리에서 떨어뜨리는 모습이 보입니다.
  • 프로젝트가 진행되는 동안 VR 로봇이 성의 조각을 가장자리까지 밀어내 놀이터에서 떨어질 수도 있습니다. 이는 found_object명령이 여전히 VR 로봇 앞에 물체가 있다고 보고하기 때문입니다. 이 명령이 True로 보고되면 VR 로봇이 앞으로 이동하여 놀이터에서 떨어집니다.

If Else 문장을 사용한 프로젝트 흐름

VR 로봇이 결정을 내릴 수 있도록 if else 명령문이 사용됩니다. 부울 조건이 참이면 'if' 분기 내의 명령이 실행됩니다. 부울 조건이 False이면 'else' 분기 내부의 명령이 실행됩니다.

예를 들어, Dynamic Castle Crasher Playground의 이 반복에서 프로젝트가 시작될 때 거리 센서가 객체를 감지하면found_object명령의 조건이 True로 보고됩니다. 이제 프로젝트의 'if'분기가 실행되고 VR 로봇이 앞으로 나아갈 것입니다. VR 로봇은 프로젝트의 'else' 분기를 건너뜁니다.왼쪽은 프로젝트의 현재 코드 조각입니다. 오른쪽은 Dynamic Castle Crasher 놀이터의 위에서 내려다본 모습으로 놀이터 인터페이스가 보입니다. 놀이터 인터페이스의 거리 센서 측정값은 568mm이며 빨간색 상자로 강조 표시되어 있습니다. 이는 놀이터 중앙에 있는 성과 VR 로봇 사이의 거리가 568mm임을 보여줍니다.

  • 거리 센서 데이터도 대시보드에 보고됩니다. 물체가 감지되면 거리 값이 표시됩니다.

하지만 Dynamic Castle Crasher Playground의 이 버전에서는 프로젝트가 시작될 때 거리 센서가 객체를 감지하지 못합니다.found_object 명령의 조건이 False로 보고됩니다. 이제 VR 로봇은 프로젝트의 'if' 분기를 건너뛰고, 프로젝트의 'else' 분기를 실행하므로 VR 로봇은 오른쪽으로 회전합니다.왼쪽은 프로젝트의 현재 코드 조각입니다. 오른쪽은 Dynamic Castle Crasher 놀이터의 위에서 내려다본 모습으로 놀이터 인터페이스가 보입니다. 놀이터 인터페이스의 거리 센서 측정값은 1354mm이며 빨간색 상자로 강조 표시되어 있습니다. 이는 놀이터 꼭대기에 있는 성과 VR 로봇 사이의 거리가 1354mm임을 보여줍니다.

  • 대시보드에서 거리 센서 값이 > 3000mm로 보고되는 것을 확인하세요. 거리 센서는 3000 밀리미터(mm) 범위 내의 물체를 감지할 수 있으므로 물체가 감지되지 않으면 값이 (>)3000mm보다 큰 것으로 보고됩니다. 

if else 문은 무한 while 루프 안에 있기 때문에 프로젝트는 무한while 루프의 맨 위로 돌아가서 if else 문의 조건을 반복적으로 확인합니다. 이 루프는 영원히 계속되며 VR 로봇에게 초당 수백 번씩 if else조건을 지속적으로 확인하도록 지시합니다.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.

  • if else문 내부의 driveturn 명령은 대기 명령이 아닙니다. 대기하지 않는 명령은 실행 중인 프로젝트의 흐름을 멈추지 않습니다.  if else 문에서 실행되는 대기하지 않는 동작(예: '객체가 감지되면 전진')은 조건이 확인되는 동안 계속되고, 조건이 변경될 때만 변경됩니다.

귀하의 정보를 위해

if else문은 조건이 검사될 때 프로젝트에서 단 하나의 분기만 실행되도록 하는 데 사용됩니다. 한 번에 하나의 인스턴스나 조건만 참일 수 있습니다. 이렇게 하면 프로젝트의 효율성이 높아집니다.

if 및 else 문을 가리키는 화살표가 있는 Python 프로젝트 코드입니다. 화살표 위쪽에는 Checks condition of Distance Sensor라는 문구가 적혀 있으며, 문장이 조건을 확인하면 distance.found_object가 표시됩니다. 객체가 감지되면 if 문 아래의 명령이 실행되고, 객체가 감지되지 않으면 else 문 아래의 명령이 실행됩니다.

현재 프로젝트를 7단원에서 만든 프로젝트와 비교해보세요.  7단원 프로젝트에서는 if 문장을 4개 사용합니다.

전체 코드를 둘러싼 큰 주황색 화살표가 있는 Unit 7의 프로젝트 코드는 while True 문에서 시작하여 끝납니다. 주황색 화살표의 메모에는 무한 while 루프에 포함된 If 문이 반복적으로 검사된다는 내용이 있습니다. while True 문 내부의 녹색 화살표는 프로젝트의 흐름을 보여줍니다. 특정 색상이 보이는 경우 개별 if 문에서 시작하여 그에 따라 수행해야 할 동작이 표시됩니다. 즉, 동작을 수행하거나 모든 것이 다시 한 번 반복될 때까지 다음 if 문으로 넘어갑니다.

여러 개의 if 명령문이 있는 프로젝트를 실행할 때 프로젝트가 무한 while 루프에서 명령을 실행하면서 여러 조건이 True(또는 False)로 보고될 수 있습니다. 이런 갈등으로 인해 프로젝트가 중단되거나 더 느리게 진행될 수 있습니다. 

다시 말해, 프로젝트에서 if문장이 여러 개 있는 것은 여러 개의 출구 램프가 있는 도로를 따라 여행하는 것과 같습니다. 어디로 가려는지에 따라 방향을 바꾸어야 할 곳이 달라집니다. 예를 들어,이 학교에 가는 길이왼쪽으로 돌고, 상점에 가는 길이라면 오른쪽으로 돌면 됩니다. 하지만 학교나 가게에 가지 않는다면 어떨까요? 두 조건 모두 False로 보고되고 직선 경로를 유지하게 됩니다. 아니면 학교와 가게에 모두 다닌다면 어떨까요? 두 조건 모두 True로 보고되지만, 동시에 두 위치에서 회전할 수는 없습니다. 세 개의 방향 화살표가 있는 회색 T자 모양 교차로를 보여주는 다이어그램입니다. 하나는 왼쪽을, 하나는 똑바로 위를, 하나는 오른쪽을 가리킵니다. 교차로 중앙에는 VR 로봇이 있습니다. 다이어그램의 오른쪽에는 코드 형식의 두 가지 조건문이 있습니다. 학교에 가는 경우: 좌회전, 가게에 가는 경우: 우회전. if 문은 검은색과 파란색 텍스트로 작성되었으며, if는 파란색, 방향 지시는 파란색으로 작성되었습니다.

 

비유를 계속하자면, if else이라는 문장은 길이 갈라지는 곳으로 가는 것과 같습니다. 즉, 결정을 내리도록 강요하는 것입니다. 만약학교에 간다면 왼쪽으로 돌고, 오른쪽으로 돌세요. 어디로 가든지 좌회전이나 우회전만 하면 됩니다. if else문을 사용하면 위와 같은 버그를 피할 수 있습니다. 주어진 순간에 참일 수 있는 조건이 하나뿐이므로 결정을 내리도록 강요하기 때문입니다.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.

질문

아래 링크를 선택하여 수업 퀴즈에 참여하세요.

Google 문서 / .docx / .pdf