Lecture (CS)/Robots

Newspaper delivery

CubePenguin 2015. 10. 19. 10:23

이번 시간에는 지난 Top-down Design (Link) 시간에 설명했던 신문 배달 상황을 그대로 코딩해보고자 한다.
우선은 아래에 일부 코드는 이미 주어진채로 시작하자.


from cs1robots import *

load_world( 'worlds/newspaper.wld' )
hubo = Robot( color='yellow', beepers=1 )
hubo.set_trace( 'blue' )

# function definitions

def turn_around():
    for i in range(2):
        hubo.turn_left()

def turn_right():
    for i in range(3):
        hubo.turn_left()

목표는 다음 명령어들을 구현하는 것이다.

climb_up_four_stairs()    climb_down_four_stairs()


지난 디자인 시간에서 썼던 흐름 그대로를 가져올 것이다.
다음 4줄을 실행시키면 신문 배달이 완료된다.

# program starts

climb_up_four_stairs()
hubo.drop_beeper()
turn_around()
climb_down_four_stairs()


      


구현에 앞서 팁이 있다면, 명령어의 시작 상황종료 상황주의 깊게 살펴보길 바란다.


1줄에 있는 climb_up_four_stairs()는 함수 이름에서도 알 수 있듯이 계단 1개를 4번 오르는 과정이 들어가 있다.
계단 1개를 오르는 과정도 세분화해야한다.
hubo가 한 칸을 움직이고 왼쪽으로 돌고 다시 움직이고 오른쪽으로 돌고 한 칸 더 움직이게 된다.
캡쳐 사진들을 통해 흐름을 보자.




계단 1개를 오르는 과정을 묶어서 하나의 새로운 명령어로 만들면 코딩의 반복을 줄일 수 있다.


def one_stair():
    hubo.move()
    hubo.turn_left()
    hubo.move()
    turn_right()
    hubo.move()


무튼 이렇게 만든 명령어를 이용해 남은 계단 3개를 오르면 다음 사진의 상황이 된다.

def four_stairs():
    for i in range(4):
        one_stair()




이쯤에서 아까 언급한 팁이 도움이 될 것이라 생각된다.
2줄의 hubo.drop_beeper() 이전에 hubo가 한 칸 움직일 필요가 있다.
따라서 climb_up_four_stairs()의 마지막 명령어는 hubo.move()가 될 것이다.


def climb_up_four_stairs():
    four_stairs()
    hubo.move()

2줄은 그대로 쓰면 되고, 3줄도 크게 어렵지 않다. 그냥 뒤돌면 된다.



climb_down_four_stairs()는 1줄과 그 기능이 매우 유사하다.
다만, 한 칸 먼저 움직인 뒤, 4개의 계단을 내려와야한다는 차이가 있다.
사실상 climb_up_four_stairs()의 명령어들을 정확히 역순으로 돌리면 된다.

def climb_down_four_stairs():
    hubo.move()
    four_stairs()



    


# program starts

climb_up_four_stairs()
hubo.drop_beeper()
turn_around()
climb_down_four_stairs()


이러고 끝난다.

-The End-