Newspaper delivery
이번 시간에는 지난 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-