목차

이전 항목

23. 단계적 정제: 1부

다음 항목

25. 단계적 정제: 3부

현재 문서

주의사항

해당 문서는 중요 변경 작업 중에 있습니다. 일부 문서에 텍스트가 빠져있거나, 불어로 플레이스홀더(placeholder) 자리차지만 되어 있을 수 있습니다.

24. 단계적 정제: 2부

1부의 마지막에 우리가 직면한 문제의 원인이 다음에 있다: 토큰을 내려놓는다. 앞으로 이동하기 전에 토큰이 있지 않은지를 확인하는 테스트를 한다. 토크에 있어서, while 루프 명령문에 들어갈 기회가 전혀 없다. 아마도 반복 명령문을 실행하기 전에 move() 명령문을 아래와 같이 추가하여 수정한다.

put()
move()
while not object_here():
    if front_is_clear():
        move()
    else:
        turn_left()

시도해 보기!

다음으로 넘어가기 전에, 상기 프로그램을 확인한다.

24.1. 그다지 단순하지 않는 세상

좀더 복잡한 Around 2 세상에 작성한 프로그램을 시도해 보자.

주석

다음을 포함하는 것을 잊지마세요:

from library import turn_right

프로그램을 실행하면, 결과는 우리가 원하는 것이 정확히 아니다: 리보그가 지름길을 택해서 가고, 벽을 따라 움직이지는 않는다. 문제는 리보그가 벽을 따라 움직일 때 단지 앞으로 전진만 하거나, 왼쪽으로만 회전하는 것을 가정했다: 리보그가 오른쪽으로 회전하는 상황에 대해서는 고려를 전혀 하지 않았다. 리보그에게 필요한 것은 첫째 오른쪽에 여전히 벽이 있는지를 확인하는 것이다. 만약 벽이 없다면, 리보그가 오른쪽으로 회전을 해야만 한다. 오른쪽으로 회전하려고 시도하는 수정된 프로그램이 있다:

put()
move()
while not object_here():
    if right_is_clear():
        turn_right()
    elif front_is_clear():
        move()
    else:
        turn_left()

여러분 차례!

정상적으로 잘 동작합니까? 결정을 내리기 위해서 주의 깊게 읽어보세요. 그리고 나서, 프로그램을 실행해서 여러분의 의견을 확인하기 위해 직접 시도해 보거나, 본인이 생각하는 적절한 변경을 한다.