터틀(Turtle)은 파이썬의 독특하고 매력적인 기능 중 하나입니다. 터틀 모듈을 활용하면 마치 그림판에 그리듯 간단한 명령만으로 다양한 도형과 패턴을 화면에 손쉽게 그릴 수 있습니다.
사용 방법은 매우 간단합니다. 먼저 turtle 모듈을 임포트하고, 그래픽 창(윈도우)을 생성한 뒤, 거북이 객체를 만들어 터틀이 제공하는 메서드를 호출하면 됩니다.
터틀 주요 메서드 정리
| 메서드 | 매개변수 | 설명 |
|---|---|---|
| Turtle() | 없음 | 새로운 거북이 객체를 생성하여 반환합니다 |
| forward() | 거리(amount) | 지정한 거리만큼 거북이를 앞으로 이동시킵니다 |
| backward() | 거리(amount) | 지정한 거리만큼 거북이를 뒤로 이동시킵니다 |
| right() | 각도(angle) | 거북이를 시계 방향으로 회전시킵니다 |
| left() | 각도(angle) | 거북이를 반시계 방향으로 회전시킵니다 |
| penup() | 없음 | 거북이의 펜을 들어 올립니다 |
| pendown() | 없음 | 거북이의 펜을 내려놓습니다 |
| up() | 없음 | 펜을 들어 올립니다 |
| down() | 없음 | 펜을 내려놓습니다 |
| color() | 색상 이름 | 거북이 펜의 색상을 변경합니다 |
| fillcolor() | 색상 이름 | 다각형을 채울 때 사용할 색상을 변경합니다 |
| heading() | 없음 | 현재 진행 방향(헤딩)을 반환합니다 |
| position() | 없음 | 현재 위치를 반환합니다 |
| goto() | x, y | 거북이를 좌표 (x, y) 위치로 이동시킵니다 |
| begin_fill() | 없음 | 색을 채울 다각형의 시작점을 기억합니다 |
| end_fill() | 없음 | 다각형을 닫고 현재 설정된 채우기 색상으로 채웁니다 |
| dot() | 없음 | 현재 위치에 점(dot)을 남깁니다 |
| stamp() | 없음 | 현재 위치에 거북이 모양의 도장을 찍습니다 |
| shape() | shapename | 'arrow', 'classic', 'turtle', 'circle' 중 하나를 지정합니다 |
기본 사용 예제
아래 예제는 파란색 배경의 그래픽 창을 만들고, 흰색 굵은 선으로 선분을 그리는 기본적인 코드입니다.
# import turtle library
import turtle
my_window = turtle.Screen()
my_window.bgcolor("blue") # creates a graphics window
my_pen = turtle.Turtle()
my_pen.forward(150)
my_pen.left(90)
my_pen.forward(75)
my_pen.color("white")
my_pen.pensize(12)
실행 결과
사각형 그리기
반복문(for)을 활용하면 같은 동작을 여러 번 반복하는 도형을 간단하게 그릴 수 있습니다. 사각형은 앞으로 이동 후 90도씩 회전하는 동작을 4번 반복하면 완성됩니다.
# import turtle library import turtle my_pen = turtle.Turtle() for i in range(4): my_pen.forward(50) my_pen.right(90) turtle.done()
실행 결과
별 그리기
오각별을 그리려면 각 꼭짓점에서 144도씩 회전하면 됩니다. 아래 예제는 반복 횟수를 늘려 별 모양의 나선 패턴을 만들어냅니다.
# import turtle library import turtle my_pen = turtle.Turtle() for i in range(50): my_pen.forward(50) my_pen.right(144) turtle.done()
실행 결과
육각형 그리기
정다각형의 외각은 항상 360도이므로, 변의 개수로 360을 나누면 한 번에 회전해야 할 각도를 구할 수 있습니다. 육각형의 경우 360 ÷ 6 = 60도가 됩니다.
# import turtle library import turtle polygon = turtle.Turtle() my_num_sides = 6 my_side_length = 70 my_angle = 360.0 / my_num_sides for i in range(my_num_sides): polygon.forward(my_side_length) polygon.right(my_angle) turtle.done()
실행 결과
사각형 안에 사각형 그리기
함수를 정의하고 크기를 조금씩 줄여가며 여러 번 호출하면, 점점 작아지는 사각형이 겹쳐진 아름다운 패턴을 만들 수 있습니다.
# import turtle library
import turtle
my_wn = turtle.Screen()
my_wn.bgcolor("light blue")
my_wn.title("Turtle")
my_pen = turtle.Turtle()
my_pen.color("black")
def my_sqrfunc(size):
for i in range(4):
my_pen.fd(size)
my_pen.left(90)
size = size - 5
my_sqrfunc(146)
my_sqrfunc(126)
my_sqrfunc(106)
my_sqrfunc(86)
my_sqrfunc(66)
my_sqrfunc(46)
my_sqrfunc(26)
실행 결과
원을 이용한 패턴 그리기
circle() 메서드에 음수 값을 넣으면 반대 방향으로 원을 그립니다. 양방향 원을 반복적으로 그리고 회전시키면 입체감 있는 원형 패턴이 완성됩니다.
# import turtle library import turtle my_wn = turtle.Screen() turtle.speed(2) for i in range(30): turtle.circle(5*i) turtle.circle(-5*i) turtle.left(i) turtle.exitonclick()
실행 결과
컬러풀한 나선 패턴 그리기
색상 리스트와 나머지 연산(%)을 활용하면 여러 색상을 순환하며 사용할 수 있습니다. 선의 두께와 이동 거리를 점차 늘리면 화려한 나선 패턴이 탄생합니다.
# import turtle library
import turtle
colors = [ "red","purple","blue","green","orange","yellow"]
my_pen = turtle.Pen()
turtle.bgcolor("black")
for x in range(360):
my_pen.pencolor(colors[x % 6])
my_pen.width(x/100 + 1)
my_pen.forward(x)
my_pen.left(59)
실행 결과