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 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이 열리고 프로젝트를 실행하세요.

- 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 Playground의 이 버전에서는 프로젝트가 시작될 때 거리 센서가 객체를 감지하지 못합니다.found_object 명령의 조건이 False로 보고됩니다. 이제 VR 로봇은 프로젝트의 'if' 분기를 건너뛰고, 프로젝트의 'else' 분기를 실행하므로 VR 로봇은 오른쪽으로 회전합니다.
- 대시보드에서 거리 센서 값이 > 3000mm로 보고되는 것을 확인하세요. 거리 센서는 3000 밀리미터(mm) 범위 내의 물체를 감지할 수 있으므로 물체가 감지되지 않으면 값이 (>)3000mm보다 큰 것으로 보고됩니다.
if else 문은 무한 while 루프 안에 있기 때문에 프로젝트는 무한while 루프의 맨 위로 돌아가서 if else 문의 조건을 반복적으로 확인합니다. 이 루프는 영원히 계속되며 VR 로봇에게 초당 수백 번씩 if else조건을 지속적으로 확인하도록 지시합니다.
- if else문 내부의 drive 및 turn 명령은 대기 명령이 아닙니다. 대기하지 않는 명령은 실행 중인 프로젝트의 흐름을 멈추지 않습니다. if else 문에서 실행되는 대기하지 않는 동작(예: '객체가 감지되면 전진')은 조건이 확인되는 동안 계속되고, 조건이 변경될 때만 변경됩니다.
귀하의 정보를 위해
if else문은 조건이 검사될 때 프로젝트에서 단 하나의 분기만 실행되도록 하는 데 사용됩니다. 한 번에 하나의 인스턴스나 조건만 참일 수 있습니다. 이렇게 하면 프로젝트의 효율성이 높아집니다.

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

여러 개의 if 명령문이 있는 프로젝트를 실행할 때 프로젝트가 무한 while 루프에서 명령을 실행하면서 여러 조건이 True(또는 False)로 보고될 수 있습니다. 이런 갈등으로 인해 프로젝트가 중단되거나 더 느리게 진행될 수 있습니다.
다시 말해, 프로젝트에서 if문장이 여러 개 있는 것은 여러 개의 출구 램프가 있는 도로를 따라 여행하는 것과 같습니다. 어디로 가려는지에 따라 방향을 바꾸어야 할 곳이 달라집니다. 예를 들어,이 학교에 가는 길이왼쪽으로 돌고, 상점에 가는 길이라면 오른쪽으로 돌면 됩니다. 하지만 학교나 가게에 가지 않는다면 어떨까요? 두 조건 모두 False로 보고되고 직선 경로를 유지하게 됩니다. 아니면 학교와 가게에 모두 다닌다면 어떨까요? 두 조건 모두 True로 보고되지만, 동시에 두 위치에서 회전할 수는 없습니다. 
비유를 계속하자면, if else이라는 문장은 길이 갈라지는 곳으로 가는 것과 같습니다. 즉, 결정을 내리도록 강요하는 것입니다. 만약학교에 간다면 왼쪽으로 돌고, 오른쪽으로 돌세요. 어디로 가든지 좌회전이나 우회전만 하면 됩니다. if else문을 사용하면 위와 같은 버그를 피할 수 있습니다. 주어진 순간에 참일 수 있는 조건이 하나뿐이므로 결정을 내리도록 강요하기 때문입니다.