'분류 전체보기'에 해당되는 글 9건

  1. 2015.10.22 티스토리 옮깁니다.
  2. 2015.10.19 Newspaper delivery
  3. 2015.10.18 #9. De Morgan's laws
  4. 2015.10.18 #8. Environment Setting
  5. 2015.10.14 #7. Short Circuit Evaluation
  6. 2015.10.14 #6. True or False
  7. 2015.10.02 Mystery Sign
  8. 2015.09.15 #4. Instruction
  9. 2015.09.13 #3. Top-down Design

티스토리 옮깁니다.

Etc/Log 2015. 10. 22. 01:26
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이 블로그는 폐쇄합니다.


최신 업데이트 되는 정보들을 보려면 cubistkang.tistory.com 으로 오세요 ㅎㅎ

Posted by CubePenguin
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

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

Posted by CubePenguin
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

드 모르간의 법칙 (Link) 에 대해 알아볼 것이다.
중학교 1학년, 고등학교 1학년 집합과 명제 단원에서 줄창 다루는 탓에 이미 많은 학생들이 익숙하다고는 하는데 True, False로 바꿔놓으니까 모르겠다는 사람들이 있어서 글을 쓴다.


조건들의 검사 결과들을 나타내는 원소들을 모두 가진 전체 집합 U를 가정한다.
조건 p를 참으로 만드는 원소들을 포함한 집합을 집합 A로, 조건 q를 참으로 만드는 원소들을 포함한 집합을 집합 B로 가정한다.
참고로 p를 거짓으로 만드는 원소들은 ~p (not p) 조건을 참으로 만드는 것이므로 집합 A의 여집합으로 나타낼 수 있으며 B의 경우도 마찬가지다.


벤 다이어그램으로 드 모르간 법칙을 나타낸 사진이다. 색칠 공부한다고 생각하면서 하나씩 알아보면 금방 와닿을 것이다.


이를 True, False (bool 대수)로 표현해보자.


p? 라는 질문에 True 결과를 뱉는 원소들이 집합 A에 속하고, q? 라는 질문에 True 결과를 뱉는 원소들이 집합 B에 속한다.
반대로 p?에 False 인 원소들은 A의 여집합에 속할 것이고, q?에 False 인 원소들은 B의 여집합에 속할 것이다.
즉 not p?에 True 인 원소들이 A의 여집합으로, not q?에 True인 원소들이 B의 여집합으로 표현된다.

또한 p? and q? 에 True인 원소는
 A∩B 에 속할 것이고, p? or q? 에 True인 원소는 A∪B 에 속할 것이다.


이제 복합적인 연산으로 not (p? or q?) 에 대해 알아보자.
p? or q?가 A∪B로 표현되는 것을 보았고 not 은 여집합으로 표현된다는 것을 보았다. 따라서 not (p? or q?)는 (A∪B)의 여집합에 해당된다. 위 사진에서 보면 A 여집합과 B 여집합의 교집합으로 표현되는 것도 알 수 있다. 이를 다시 옮겨적으면 not p? and not q? 가 된다.

not (p? and q?)에 대해서도 똑같다. not p? or not q? 로 쓸 수 있을 것이다.



부정의 부정, 즉 이중 부정의 경우로 표현하면 복잡한 식이 간단해지기도 한다.
이중 부정은 조건식의 결과에 전혀 영향을 주지 않는다. 참의 부정은 거짓이고 거짓의 부정은 참이므로 참의 부정의 부정은 참이고 거짓의 부정의 부정은 거짓이다. 따라서 검사 결과에 전혀 영향을 주지 않으므로 not not 연산을 이용해서 수식을 수정할 수 있을 것이다.
예를 들어, not p? and not q? 라는 검사가 있다고 하자. 이 검사에 not not 연산을 덧붙이면 not( not ( not p? and not q? ) ) 와 같다.
안쪽의 not을 드모르간 법칙을 사용해서 바꿔쓰면 not( (not( not p?)) or (not( not q?)) ) 가 된다.
not( not p?)는 p? 와 같고, not( not q?)는 q? 와 같다. 따라서 위 수식은 다시 not( p? and q?)로 바꿔쓸 수 있다. 되돌아보니 드모르간 법칙을 이용해 역으로 묶어내는 것과 동일한 결과가 나왔다.


주어진 숫자가 양수인가? 소수인가? 와 같이 True, False만을 내뱉는 어떤 질문들, 함수들(predicate)을 가지고 연산하다보면 not 연산들을 적절히 이용해서 수식을 간편히 바꿀 수 있는 경우가 많다.
혹은 제공되는 함수가 [양수인가?] 만을 검사할 수 있는데 음수들을 다루는 어떤 프로그램을 이용해야할 경우도 있다.
드 모르간 법칙을 이용해서 수식을 자유자재로 수정하다보면 논리 오류들을 찾아내기 쉬워질 수 있으니 익숙해지는 것이 좋다.


'Lecture (CS) > Introduction' 카테고리의 다른 글

#8. Environment Setting  (0) 2015.10.18
#7. Short Circuit Evaluation  (0) 2015.10.14
#6. True or False  (0) 2015.10.14
#4. Instruction  (0) 2015.09.15
#3. Top-down Design  (0) 2015.09.13
Posted by CubePenguin
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

생각해보니까 실습에 필요한 파일들을 공유하지 않았었다. 멍청하다.


python 코드들은 학생들을 위해 Otfried Cheong 교수님께서 수정 보완하시며 개발하셨다고 들었다.


실습에 쓰일 코드들은 windows에서만 사용하길 바란다. 맥이나 linux에서 쓸 수도 있긴 한데, interative mode에서 버그들이 있어서 추천하지 않는다.


python 2.7 버전은 인터넷에 많이 돌아다니니까 찾아서 받도록 하자. (10MB를 넘어가는 바람에 업로드가 안된다.)

실제 실습에선 이미지 라이브러리가 추가로 필요하다.


64bit 운영체제 사용시

PIL-1.1.7.win-amd64-py2.7.exe


32bit 운영체제 사용시

PIL-1.1.7.win32-py2.7.exe


자신의 컴퓨터가 32bit 체제인지, 64bit 체제인지에 따라 적절한걸 받아서 실행시키면 된다. 주의할 게 있다면, python이 먼저 깔려있어야 된다는 것이다. 꼭 python 을 먼저 깔고 PIL을 깔길 바란다.


실습에 필요한 코드들도 있다.


graphics 실습용

cs1graphics.py


media 실습용

cs1media.py


robot 실습용

cs1robots.py

cs1robots_images.py

easygui.py


위 코드들을 C드라이브 python27/Lib/site-package/ 디렉토리 안에 넣으면 된다. 

'Lecture (CS) > Introduction' 카테고리의 다른 글

#9. De Morgan's laws  (0) 2015.10.18
#7. Short Circuit Evaluation  (0) 2015.10.14
#6. True or False  (0) 2015.10.14
#4. Instruction  (0) 2015.09.15
#3. Top-down Design  (0) 2015.09.13
Posted by CubePenguin
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이번 글에서는 short circuit evaluation에 대해 알아볼 것이다.


(출처: 구글 이미지)

표에 나와 있는 숫자 중 0은 False를 뜻하고, 1은 True를 뜻한다.
이들 중 AND, OR 연산에 대해 집중적으로 알아볼 것이다.
python의 True, False 의 상수값들을 가지고 연산하게 될텐데 not, and, or 키워드들을 사용할 것이다.


1. not True == False

2. not False == True


3. True and True == True

4. True and False == False

5. False and True == False

6 False and False == False


7. True or True == True

8. True or False == True

9. False or True == True

10. False or False == False


위 연산결과들 중에 특별히 5,6,7,8 번을 주목할 필요가 있다.
이전 포스팅( #6. True or False )에서도 언급했었지만 and 검사를 하게 되면 두 조건 중 하나라도 False이면 최종 결과는 False이다. 그 말은 처음 검사한 조건부터 False이면 남은 조건을 검사할 필요없이 최종 결과가 False임을 알 수 있다. 남은 조건들까지 검사하면서 드는 시간들을 줄여서 프로그램의 성능을 높일 수 있다면 좋을 것이다. 다행히 python은 조건문 안에서 위처럼 논리적으로 문제가 없다고 판단되는 경우 남은 조건들을 더 검사하지 않고 곧장 다음 명령어들을 실행해버리게 돼있다. 


이와 같이 연산해버리는 과정을 short circuit evaluation( link )이라고 부른다. 


7,8번에서도 마찬가지로 or 검사의 경우 두 조건 중 하나라도 True 이면 최종 결과가 True 이므로 처음 만난 조건이 True 이면 두 번째 조건은 검사하지 않고 곧장 다음 문장으로 넘어가 버린다.


전부 다 해버리면 재미 없으니까 (...) XOR, NAND, NOR은 남겨둔다.


예시를 살펴보자.

다음 python 코드를 보고 실행되는 결과를 예상해보자.

def p():
    print 'p'
    return False
def q():
    print 'q'
    return True
def r():
    print 'r'
    return True

if True or p():
    q()
if p() and q():
    r()
if r() and p():
    q()
if False or q():
    p()



'Lecture (CS) > Introduction' 카테고리의 다른 글

#9. De Morgan's laws  (0) 2015.10.18
#8. Environment Setting  (0) 2015.10.18
#6. True or False  (0) 2015.10.14
#4. Instruction  (0) 2015.09.15
#3. Top-down Design  (0) 2015.09.13
Posted by CubePenguin
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

논리 문제를 다루게 될텐데, 이게 처음 접하는 사람들에겐 한참 헷갈리는 말이라고 하더라. 나는 개념상으로 헷갈려서 뭔가 막혔던 적은 없었어서 조건문이 헷갈리리라곤 상상도 못했는데 가르치다보니 학생들 사이에선 헷갈리는 일이 비일비재하더라.


참이냐 거짓이냐 그거시 문제로다!


python에는 여러가지 상수들이 있지만 True, False도 이런 상수들에 속한다.



위 사진과 같이 상수 취급되면서 bool이란 자료형을 가진다. True, False 를 따로 [bool 대수]라고 부른다.



이 상수값들을 이용해서 조건문을 검사할 수 있다.


잠시 삼천포로 빠졌다가 되돌아와야겠다. 아래 코드 예시들은 제대로된 코드가 아닌 의사코드(psudo code)이다.

조건문이란 if 키워드를 이용해서 프로그램 흐름의 갈래길을 만들어주는 것을 말한다. 주어진 조건 검사 결과가 참일때 실행할 명령어와 거짓일 때 실행할 명령어가 달라진다면 프로그램이 놓인 상황(상태)에 따라 다른 일을 하는 프로그램을 만들 수 있다.
실생활 예시를 보자. 일기 예보에서 비가 온다고 한다면 우산을 들고 나가고, 해가 쨍쨍하다면 우산을 두고 외출할 것이다. 배가 고프면 밥을 먹을 것이고 목이 마르면 물을 마실 것이고 졸리면 잠을 잘 것이다.
프로그램 상에서는 조건문 안에 조건을 넣어두면서 컴퓨터에게 질문한다고 생각하면 조금 쉽게 접근할 수 있다. "배가 고프냐?"라는 질문에 "yes"라고 답한다면 그 결과를 True (참)로 줄 것이고 밥을 챙겨먹는 행동을 하게 되는 식이다.
날씨를 예시로 보면 아래 코드로 나타낼 수 있다.

if is_it_rainy? :
    take_umbrella()

True, False를 조절하면서 조건문을 짜는 와중에 복합적인 조건들이 필요한 경우도 있다. 예를 들어 배가 고픈 동시에 짠 음식이 땡긴다면 부대찌개를 먹으러 가는 식이다. 두 조건에 대해 모두 적합한 경우 (참인 경우)에만 행동이 결정되는 것이다. 이것 외에 과학이 좋거나 수학이 좋다면 이과로 진학하는 식도 있다. 두 조건 중 하나만이라도 적합하다면 (참이라면) 행동이 결정되는 식이다. 

if hungry? and want_to_eat_salty_food? :
    eat_sausage_stew()
if do_you_like_science? or do_you_like_math? :
    study_in_이과 # 이과가 영어로 뭐죸ㅋㅋㅋㅋㅋ

물어보는 조건이 "배가 고프냐?" 처럼 한 종류 뿐이라면 "배가 안고프냐?"를 만들기 위해 질문을 뒤집을 수 있는 키워드도 있다. 질문 앞에 not을 붙여쓰는 것이다.

if not hungry? :
    do_nothing()



조건들이 복합적으로 엮일 때 학생들이 어려워하더라. ( 왜 그런진 모르겠지만.. )

논리를 따질때 각 조건들을 검사한 결과들을 전부 True, False로 바꿔보고 이것들의 and, or로 따진다고 생각하면 중1 집합 문제로 바뀌게 되어 훨씬 간단해진다. 복잡하게 생각할 필요없다.


전체 집합과 A, B집합을 벤다이어그램으로 나타낸 과녁이 있다고 생각해보자.
A집합은 조건 p에 대해 참인 원소들의 집합이고, B집합은 조건 q에 대해 참인 원소들의 집합이다.

이때 전체 집합에 속하는 어떤 원소(검사)가 주어져서 검사하는 과정을 과녁에 화살표 (다트)를 꽂는 과정으로 생각할 수 있다.

이 모델을 가지고 아래 글을 읽으면 이해가 쉬울 것이다.


p                q

True and True == True

True and False == False

False and True == False

False and False == False

and 검사의 경우 양쪽 결과 중 하나라도 False면 전체 결과는 False가 된다. 화살표가 A∩B 를 벗어나서 꽂힌다고 생각하면 쉽다. 집합A로부터 벗어난 곳에 꽂힌다면 검사결과가 조건 p에 대해 거짓이라는 뜻이 된다. 마찬가지로 A∩B 에서 벗어난 화살표는 A and B 검사에서 거짓이 되는 것이다. 따라서 False이다. 사람의 언어로 풀어쓰면 훨씬 받아들이기 쉬울 때도 있다. 헷갈리면 위에서 들었던 예시를 다시 한 번 보고 오길 바란다.


p                q

True or True == True

True or False == True

False or True == True

False or False == False

or 검사의 경우 양쪽 결과 중 하나라도 True이면 전체 결과는 True가 된다. A∪B 안에 어디든 꽂히는 화살표는 A or B 검사에서 참이 되는 것이다. 비록 A검사나 B검사 각각에 대해서는 거짓이 될 순 있지만 A∪B 안의 어딘가에 속하는 원소라면 검사 결과가 참으로 분류될 것이다. 마찬가지로 위에서 생활 예시를 들었던 것들을 다시 한 번 보면 도움될 것이다.



 And

True 

False 

True 

True 

False 

False 

False 

False 

 

 Or

True 

False 

True 

True 

True 

False 

True 

False 


위에서 4가지씩 들었던 True, False 들을 진리표로 나타낸 것이다.
And, Or과 같은 이항 연산자 (Binary Operator) 들을 특별히 논리 연산에 이용된다는 뜻에서 논리 연산자 (Logical Opertor)라고 불린다.


논리연산자에는 위 예시들처럼 이항 연산자만 있는 것은 아니다. 집합에서 여집합으로 나타내는 것과 같이 참, 거짓을 뒤집는 단항 연산자 not도 있다.

not True == False

not False == True

와 같이 나타낼 수 있다.



프로그램을 짜면서 조건문들에 따라 실행되는 명령어들을 조절하고 싶을때, 이러한 True, False 조건들을 잘 다룰 수 있어야한다. 익숙해지는데 그렇게 오래 걸리지도 않는다.

'Lecture (CS) > Introduction' 카테고리의 다른 글

#9. De Morgan's laws  (0) 2015.10.18
#8. Environment Setting  (0) 2015.10.18
#7. Short Circuit Evaluation  (0) 2015.10.14
#4. Instruction  (0) 2015.09.15
#3. Top-down Design  (0) 2015.09.13
Posted by CubePenguin
,

Mystery Sign

Programming/Etc.. 2015. 10. 2. 01:41
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


mystery_sign.py


카이스트 합창단( KAIST CHORUS )에서 요새 [더 지니어스 in CHORUS] 게임을 진행중이다.

5회전 게임의 데스매치로 미스터리 사인을 진행했는데 그때 썼던 코드를 공유한다.

사실 연산자( operator )는 더 준비했는데 결국 라운드는 9개만 진행했다.


코드 리뷰...를 진행할까 생각했지만 역시 귀찮다 ㅜㅜ


뭐 특별한게 있다면 함수 포인터와 같이 함수명 자체를 변수로 써서 list에 저장해두고 func라는 함수에 묶어두고 불러냈다는거? python 은 C언어의 switch case 같은게 없으니까 각 라운드별로 계산 결과를 따로 뽑아내는 구현을 어떡해야할지 고민 좀 했었다.


그러려니...


Posted by CubePenguin
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

명령어 ( instruction ) 에 대한 설명이 빠진 채로 글이 진행되고 있는 것 같아 추가한다.


컴퓨터와는 프로그래밍 언어로 소통할 것이다. 이러한 프로그래밍 언어는 다양한 명령어들의 집합으로 이뤄져 있다. 프로그램을 사람의 언어로 읽으려고 할 때 서술어에 관련된 부분을 명령어라고 생각하면 쉽다.

더하라 : add

종료하라 : exit

이러한 예시들이 있다. 각 프로그래밍 언어마다 기본적으로 제공하는 명령어의 종류와 기능은 조금씩 다를 수 있다. 따라서 해당 언어에서 제공되는 정확한 명령어를 숙지할 필요가 있다.


기본적으로 프로그램은 명령어들의 나열에 의해 짜여져 있다. 순차적으로 실행되는 명령어들이 각각 정해진 규칙에 의해 컴퓨터를 작동시키는 것이다. 결과적으로 동일할지라도 다른 명령어를 사용할 수도 있고, 명령어의 순서가 달라질 수도 있다. 더 빠른 프로그램이 될 수도 있고, 더 적은 메모리를 사용하는 프로그램(메모리 효율이 좋은 프로그램)이 될 수도 있다.


필요한 경우, 프로그래머가 명령어를 새로 정의해서 쓸 수 있다. 함수, 메소드 등의 이름으로 불리는 것들을 정의해서 새로운 명령어를 사용한다. 

hubo의 경우 움직임과 관련된 많은 메소드를 제공한다. move(), turn_left(), on_beeper(), facing_north(), carries_beepers(), 등이 있다. 자세한 메소드들은 [앞선 강의] 에 있다.


명령어 / 함수 / 메소드 등 혼란을 줄 수 있는 용어들을 구분없이 사용해서 헷갈릴 수 있지만 지금은 그냥 넘어가자. 지금은 그냥 컴퓨터가 알아들을 수 있도록 하는 단어/문장 정도로 이해하고 사용할 수 있으면 된다.


기능이 명확한 명령어들을 잘 정의해서 사용하면 동일한 동작으로 하는 프로그램일지라도 훨씬 간결명료하게 표현할 수 있다. 너무 많은 동작을 한 번에 묶으면, 다양한 문제들에서 사용하기 어렵다. 코드 재사용의 입장에서도 불리한 것이다. 동작과 기능을 적절히 분류 분리해서 프로그래밍하는 능력이 요구된다.




'Lecture (CS) > Introduction' 카테고리의 다른 글

#9. De Morgan's laws  (0) 2015.10.18
#8. Environment Setting  (0) 2015.10.18
#7. Short Circuit Evaluation  (0) 2015.10.14
#6. True or False  (0) 2015.10.14
#3. Top-down Design  (0) 2015.09.13
Posted by CubePenguin
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

하향식 설계 (top-down design) 는 문제가 주어졌을때 넓은 시야에서의 답으로부터 좁은 시야로 줄여나가며 문제를 해결하는 방식이다. 문제 해결의 틀을 잡아놓고 구체적인 방법을 찾아나가는 것이다.

그림을 그린다고 생각하면 쉽다. 구도를 먼저 잡고 디테일을 살려나가는 것이다. ( 아닐 때도 있지만... ) 인물화를 그리면서 발가락, 코, 팔꿈치를 그리고서 바디 라인을 연결하는 사람은 없다.


신문 배달을 예시로 하향식 설계를 설명하고자 한다.


상황 1: 신문 배달 시작




상황 2: 신문 배달 완료




상황 3: 복귀 완료


사진의 상황에 비춰볼 때 hubo는 아래와 같이 움직일 것이다. ( 본인이 신문 배달을 한다고 생각해보자 )


[ideation]

1: 출발

1->2: 4 계단을 올라간다.

2: 신문을 내려놓고 뒤로 돈다.

2->3: 4 계단을 내려온다.

3: 도착


[python code]

climb_up_4_stairs()

deliver_newspaper()

walkdown_4_stairs()


hubo가 가진 기본 명령어들에는 [4계단을 올라가라]는 식의 복잡한 명령어는 없다. 더 풀어쓸 필요가 있다. 따라서 아래와 같이 [1계단을 올라간다]라는 명령어를 4번 실행하는 방식을 생각해볼 수 있다.


[ideation]

1->2: 4계단을 올라간다.

1: 1 계단을 올라간다.

2: 1 계단을 올라간다.

3: 1 계단을 올라간다.

4: 1 계단을 올라간다.


[python code]

def climb_up_4_stairs():

for i in range(4):

climb_up_a_stair()


안타깝게도 [1 계단을 올라가라]는 명령어도 없다. 아직 복잡하다. 아래와 같이 더 풀어써보자. 1 계단을 오르는 행동을 5 단계로 나눌 수 있다.


[ideation]

1->2: 4계단을 올라간다.

1: 1 계단을 올라간다.

1: 앞으로 한 칸 이동한다.

2: 왼쪽으로 90도 돈다.

3: 앞으로 한 칸 이동한다.

4: 오른쪽으로 90도 돈다.

5: 앞으로 한 칸 이동한다.


[python code]

def climb_up_a_stair():

hubo.move()

hubo.turn_left()

hubo.move()

turn_right()

hubo.move()


위 5단계로 전개된 명령어들은 hubo가 알아들을 수 있는 기본 명령어로 제공된다. ( 하나만 빼고... )

이로써 4계단을 오르는 문제를 해결할 수 있다.

( 단계4에 있는 오른쪽으로 도는 명령어는 없지만, 연습 문제로 남겨둔다. )나머지 신문 배달 과정을 top-down으로 쪼개가는 과정은 생략한다.
무튼 위와 같이 문제 해결의 틀 (top) 을 잡은 뒤에 해결 가능한 단계의 작은 문제 (down) 로 쪼개가는 과정을 하향식 설계라고 부른다. 만물의 진리를 깨우치는 공부와 같이 이론으로부터 쌓아올리는 방식이 아닌 큰 틀을 잡아놓고 점점 줄여나가며 문제를 해결하는 것이다. 이 설계 방식은 프로그래밍 과정에서, 소프트웨어 기능 단계를 디자인할 때 매우 유용하다. Computational Thinking 에서 이 Top-down design이 매우 중요하다.


'Lecture (CS) > Introduction' 카테고리의 다른 글

#9. De Morgan's laws  (0) 2015.10.18
#8. Environment Setting  (0) 2015.10.18
#7. Short Circuit Evaluation  (0) 2015.10.14
#6. True or False  (0) 2015.10.14
#4. Instruction  (0) 2015.09.15
Posted by CubePenguin
,
이전 1 다음