2011년 9월 21일 수요일

Hello, little turtles!

이 포스트에서 사용한 코드 중 별도 코멘트가 없는 것은 모두 아래 사이트 내 파이썬 코드를 이용 한 것임. 

http://openbookproject.net/thinkcs/python/english3e/hello_little_turtles.html

 

거북이 한 마리 샀다네.

어항도 준비했다네.

그 이름 alex라 했다네.

alex는 50 units 가더니 좌를 보더군, 그리고 이네 30 units 가더군.

 

1967년 Papert 교수와 동료들이 MIT에서 설계한 프로그래밍 언어 Logo 개발 후, 이 언어를 활용해 프로그래밍 언어 습득, 인공지능 연구, 그림, 애니메이션, 음악, 게임, 시뮬레이션 등을 수행 할 수 있는 “컴퓨터 기반 마이크로 월드”로 turtle 이다. turtle은 여러 프로그래밍 언어에 이식되었고, 파이썬도 turtle 모듈을 포함하고 있다.

파이썬에서 터틀을 사용하기 위해선

1. turtle.py 모듈을 임포트 후

2. turtle이 놀 수 있는 공간 생성

3. turtle 인스턴스 생성

4. 명령 수행(전후좌우 이동 및 회전 등)

5. 2에서 생성한 공간 실행(화면에 나타내기)

과정을 수행한다.

 

Code sample for using the turtle in a Python

위 코드 실행 결과는 아래와 같다.

터틀 코드 실행 결과

위 터틀 실행 결과 화면에서 wn으로 명명한 canvas는 turtle이 거주 할 수 있는 공간이며, alex는 turtle의 인스턴스이다.

다음과 같이 canvas와 turtle을 꾸밀 수도 있다. 이용 가능한 색상은 다음 웹 사이트에서 확인 가능하다. (http://www.tcl.tk/man/tcl8.4/TkCmd/colors.htm)

2011-09-21 오후 4-51-32

canvas의 인스턴스 wn을 생성 후, 배경 색상과 타이틀(윈도우 실행 시 타이틀 바에 나타낼 내용.)을 하고, turtle 인스턴스인 tess 생성 후 tess의 색상과 크기를 지정 했다. 이 후 tess를 움직이고 나서 canvas를 보이도록 했다. 위 코드 실행 결과는 아래와 같다.

* 주의 : 첫 코드 실행 후, 실행 결과 화면을 닫은 후 위 코드를 수정토록 한다.

2011-09-21 오후 4-51-44

canvas에 하나 혹은 그 이상의 turtle 인스턴스를 생성 할 수 있다. 아래 코드는 turtle 클래스의 인스턴스로 tess와 alex를 생성 한 후 각각 움직이도록 했다.

2011-09-21 오후 5-05-40

tess는 좌로 120도씩 회전하며 삼각형을, alex는 좌로 90도씩 회전하며 사각형을 그린다. 실행 결과는 아래와 같다.

2011-09-21 오후 5-05-48

첫 코드에 다음과 같이 turtle의 인스턴스에 shape과 speed를 설정 후 실행 해보자. 실행 결과는 아래와 같이 화살표 대신 거북이 모양으로 나오며 움직임도 빠르다.

2011-09-21 오후 5-15-39

2011-09-21 오후 5-15-29

이제까지는 turtle이 움직일 때마다 직선으로 이동 경로가 그어졌는데, penup() 메소드 호출 후 움직이면 이동 경로가 그어지지 않는다. 다시 이동 경로를 그리려면 pendown() 메소드를 호출하면 된다. 또 stamp() 메소드를 호출 하면, turtle이 위치한 곳에 흔적(도장)을 남기게 된다. 아래 코드를 보자.

2011-09-21 오후 5-24-49

이 코드는 30회 루프(range(30) 함수는 0부터 29까지 정수를 생성한다.) 시행하며 tess.stamp() 메소드 호출로 발 도장을 찍고, 이동 거리를 3 증가 후, 앞으로 이동 거리 만큼 이동 시키고 우측으로 24도 만큼 회전한다. 이 코드 실행 결과는 아래와 같다.

2011-09-21 오후 5-25-00

위 30회 반복 시행 코드를 100회 시행으로 수정 후 random을 적용하여 확률적으로 자국을 남기도록 수정했다. randint(1, 3) 함수를 통해 1, 2, 3 중에 하나가 임의로 생성되고 생성된 수를 2로 나눈 후 몫을 구해 짝수인 경우(즉, 2인 경우)에만 stamp() 메소드를 시행토록 했다. 아래는 수정한 코드와 그 실행한 결과이다.

2011-09-21 오후 5-39-31

2011-09-21 오후 5-42-12

위 코드와 같이 몇 가지 규칙(stamp를 찍을 지 여부를 확률적으로 판별하거나, 혹은 이동 경로를 설정하는 함수를 만들거나 - sine 파를 따라 움직이는 alex라던지)을 적용하고 turtle의 움직임을 통해 손쉽게 데이터 시각화를 수행할 수 있다. 물론 교육학적으로 봤을 때도, console에 열심히 Hello World를 출력하는 것보다 흥미 유발에 있어 더욱 효과적이지만.

 

다음 웹 사이트를 읽고, 또 다음 키워드에 대해 조사하면 재미있는 것을 많이 얻을 수 있다.

http://openbookproject.net/thinkcs/python/english3e/hello_little_turtles.html

키워드: Scratch, Logo, Scheme, Fractal, Genetic Algorithm, Game theory…

댓글 없음:

댓글 쓰기