turtle — 터틀 그래픽
turtle — 터틀 그래픽
터틀 그래픽(turtle graphics)은 1967년 Wally Feurzeig, Seymour Papert, Cynthia Solomon이 개발한 Logo에 도입된 인기 있는 기하학적 그리기 도구의 구현이에요.
이것은 선택적(optional) 모듈이에요.
본문
시작하기 (Get started)
x-y 평면의 (0, 0)에서 시작하는 로봇 터틀을 상상해보세요. import turtle 후 turtle.forward(15) 명령을 주면, 터틀은 마주한 방향으로 (화면에서!) 15픽셀 이동하며 이동하면서 선을 그려요. turtle.right(25) 명령을 주면 제자리에서 시계 방향으로 25도 회전해요.
Python에서 터틀 그래픽은 바닥의 종이에 그리는 "터틀"(펜이 달린 작은 로봇)의 표현을 제공해요. 즉각적이고 시각적인 피드백을 제공하므로, 학습자가 프로그래밍 개념과 소프트웨어 상호작용을 접하는 효과적이고 검증된 방법이에요. 또한 일반적인 그래픽 출력에 편리한 접근을 제공해요.
터틀 그리기는 원래 교사가 교실에서 사용하는 교육 도구로 만들어졌어요. 어떤 그래픽 출력을 만들어야 하는 프로그래머에게는 작업에 더 복잡하거나 외부적인 라이브러리를 도입하는 오버헤드 없이 그렇게 하는 방법이 될 수 있어요.
튜토리얼 (Tutorial)
새 사용자는 여기서 시작해야 해요. Python 셸에서 turtle 모듈의 모든 객체를 import해요:
from turtle import *
No module named '_tkinter' 오류가 발생하면 시스템에 Tk 인터페이스 패키지를 설치해야 해요.
기본 그리기
터틀을 100보 앞으로 보내요:
forward(100)
터틀의 방향을 바꿔 120도 왼쪽으로(반시계 방향) 회전시켜요:
left(120)
삼각형을 그려 계속해요:
forward(100)
left(120)
forward(100)
펜 제어 (Pen control)
color('blue') 같은 명령으로 색을, width(3)로 선 너비를 바꿔 다시 그려요. 이동 전에 펜을 들어 올려(up()) 그리지 않고 터틀을 움직일 수도 있고, down()으로 다시 그리기를 시작해요.
터틀 위치
home()으로 터틀을 출발점(터틀 화면의 중심)으로 되돌려요. x-y 좌표는 pos()로 얻을 수 있어요. clearscreen()으로 창을 지워 새로 시작할 수 있어요.
알고리즘 패턴 만들기
루프를 사용해 기하학적 패턴을 만들 수 있어요:
for steps in range(100):
for c in ('blue', 'red', 'green'):
color(c)
forward(steps)
right(30)
이 페이지 상단의 별 모양을 그려보아요. 빨간 선에 노란색 채우기를 원한다고 해요:
color('red')
fillcolor('yellow')
begin_fill()
up()/down()이 선을 그릴지 결정하는 것처럼, 채우기도 켜고 끌 수 있어요. end_fill() 명령을 줄 때만 채우기가 실제로 이루어져요.
Python 3.14부터는 begin_fill()/end_fill() 대신 fill() 컨텍스트 매니저를 사용해 채우기를 자동으로 시작하고 끝낼 수 있어요:
with fill():
for i in range(4):
forward(100)
right(90)
forward(200)
How to… (방법)
가능한 한 빨리 시작하기
turtle 모듈은 모든 기본 기능을 from turtle import *로 사용할 수 있는 함수로 노출해 가능하게 해요. 많은 터틀 명령에는 forward()에 대한 fd() 같은 더 간결한 동등 표현도 있어요. 시스템에 Tk 인터페이스 패키지가 설치되어 있어야 터틀 그래픽이 작동해요.
turtle 모듈 네임스페이스 사용
from turtle import *는 상당히 큰 객체 모음을 import하므로 이름 충돌의 위험이 있어요. 해결책은 import turtle을 사용하는 것이에요. fd()는 turtle.fd(), width()는 turtle.width() 등이 돼요.
스크립트에서 터틀 그래픽 사용
스크립트가 끝나는 즉시 Python이 터틀 창도 닫으므로, 스크립트 끝에 t.mainloop()을 추가해 창이 종료될 때까지 기다리게 해요.
객체 지향 터틀 그래픽 사용
아주 기본적인 소개 목적이 아니면, 객체 지향 방식을 사용하는 것이 더 흔하고 강력해요. 이렇게 하면 화면에 여러 터틀을 동시에 배치할 수 있어요. 각 터틀은 Turtle()로 만들어요:
from turtle import Turtle
from random import random
t = Turtle()
for i in range(100):
steps = int(random() * 100)
angle = int(random() * 360)
t.right(angle)
t.fd(steps)
t.screen.mainloop()
t.screen은 터틀 인스턴스가 존재하는 Screen의 인스턴스로, 터틀과 함께 자동으로 생성돼요.
터틀 그래픽 참조 (Turtle graphics reference)
터틀 메서드
- 터틀 이동(Turtle motion):
forward() | fd(),backward() | bk() | back(),right() | rt(),left() | lt(),goto() | setpos() | setposition(),teleport(),setx(),sety(),setheading() | seth(),home() - 상태 알기:
position() | pos(),towards(),xcor(),ycor(),heading(),distance() - 측정 설정:
degrees(),radians() - 펜 제어:
pendown() | pd() | down(),penup() | pu() | up(),pensize() | width(),pen(),isdown() - 그리기 상태:
fill(),begin_fill(),end_fill(),filling(),reset(),clear() - 색상 제어:
color(),pencolor(),fillcolor() - 채우기:
begin_fill(),end_fill() - 더 많은 그리기 제어:
dot(),stamp(),speed(),circle() - 터틀 상태:
showturtle() | st(),hideturtle() | ht(),isvisible() - 외관:
shape(),shapesize() | turtlesize(),setundobuffer(),undobufferentries() - 이벤트 사용:
onclick(),onrelease(),ondrag() - 특수 터틀 메서드:
begin_poly(),end_poly(),get_poly(),clone(),getturtle() | getpen(),getscreen(),setundobuffer(),undo(),speed()
TurtleScreen/Screen 메서드와 대응 함수
- 윈도우 제어:
bgcolor(),bgpic(),clear() | clearscreen(),reset() | resetscreen(),screensize(),setworldcoordinates(),title() - 애니메이션 제어:
delay(),tracer(),update() - 화면 이벤트 사용:
listen(),onkey(),onkeypress(),onkeyrelease(),onclick(),ontimer() - 입력 메서드:
textinput(),numinput() - 설정과 특수 메서드:
mode(),colormode(),getcanvas(),getshapes(),register_shape() | addshape(),turtles(),window_height(),window_width() - Screen 특유 메서드:
bye(),exitonclick(),setup(),title() - 공개 클래스:
Screen,Turtle,RawTurtle,RawPen,TurtleScreen,ScrolledCanvas - 예외:
Terminator
도움말과 설정 (Help and configuration)
- How to use help — 터틀 메서드의 docstring을 보여줌
- Translation of docstrings — docstring을 다른 언어로 번역
- How to configure Screen and Turtles —
turtle.cfg파일로 화면과 터틀을 구성
turtledemo 모듈은 데모 스크립트를 제공해요.