Programming/Python

[코딩도장-파이썬] 터틀 그래픽스

Supreme_YS 2020. 11. 17. 23:03

script 모드에서 코드를 좌라락 쓰고 돌려보면 AttributeError가 발생할 때가 있습니다. 그 이유는 스크립트 명이 호출할 모듈명과 같아서 생기는 문제입니다. 저 또한 turtle.py로 저장하고 shell 상에서 작업하고 있었는데 script 모드에서 자꾸 AttributeError가 발생하길래 구글링해서 찾았습니다. 즉, 호출한 모듈명과 파일명이 같으면 안된다는 것! 즉, turtle 이라는 모듈을 호출하고 있는데 파일명이 turtle.py 라서 conflict 가 발생하는 것입니다. 정확히 왜 충돌이 발생하는지는 모르겠지만.. 참고하시길 바랍니다.


●  터틀 그래픽스(Turtle graphics) 모듈을 사용해서 간단한 그림그리기. 터틀은 어린이 및 초보자가 파이썬을 쉽게 배울 수 있도록 만든 모듈인데, 거북이가 기어가는 모양대로 그림을 그린다고 해서 터틀이라고 한다.

 

● 사각형 그리기

import turtle as t  #turtle 모듈을 불러옴 t로 사용한다

t.shape('turtle') #turtle 모듈의 shape 함수 사용

 

t.forward(100) #앞으로 100픽셀

t.right(90) #오른쪽으로 90도 꺾기
t.forward(100) 
t.rt(90) #오른쪽으로 90도 꺾기
t.forward(100) 
t.rt(90) 
t.forward(100)

 

● 오각형 그리기

다각형에서 외각의 합은 항상 360도다. 그래서 사각형은 90도가 4개 들어있다.(90 * 4 = 360). 오각형은 360을 5로 나누면 외각을 구할 수 있다.

import turtle as t

t.shape('turtle')

for i in range(5):
    t.forward(100)
    t.rt(360 / 5)

 

● 사용자가 원하는 다각형 그리기

프로그래밍은 이런 방식으로 소스 코드를 일반화해 나가는 과정이다. 처음에는 for i in range(4):와 t.right(360 / 4)처럼 숫자 4를 지정해서 사각형을 그렸다. 이때는 사각형만 그릴 수 있었다. 그 다음에는 4를 5로 바꿔서 오각형을 그렸다. 마지막에는 숫자 대신 n을 사용하여 원하는 모양의 다각형을 그릴 수 있었다. 즉, 공통된 부분을 일반화해서 원하는 결과를 얻어내는 과정이 프로그래밍이며 컴퓨테이셔널 씽킹이다.

#사용자가 원하는 다각형 그리기
import turtle as t

n = int(input()) # 사용자 입력 값 : 8 입력

t.shape('turtle')

for i in range(n):
    t.forward(100)
    t.right(360 / n) # 360을 n으로 나누어 외각을 구함

 

● 다각형에 색칠하기

import turtle as t
n = 12
t.shape('turtle')

t.color('red') # 빨간색 채우기

t.begin_fill() # 채우기 시작

for i in range(n):
    t.forward(100)
    t.right(360 / n) # 360을 n으로 나누어 외각을 구함

t.end_fill() # 채우기 끝

※ color에 색깔을 지정할 때 'red', 'green', 'blue', 'yellow', 'purple', 'brown', 'gray' 등 영어로 색 이름을 지정합니다. 하지만 색 이름만으로는 다양한 색상을 표현하기가 힘듭니다. 이때는 웹 색상(web color)을 사용하면 됩니다.

웹 색상은 #으로 시작하며 빨강(R), 초록(G), 파랑(B)에 해당하는 두 자리 16진수 세 쌍으로 구성되어 있습니다.

#000000: 검정

#FF0000: 빨강

#00FF00: 초록

#0000FF: 파랑

색상의 범위는 00부터 FF까지 사용할 수 있으며 빨강, 초록, 파랑을 조합해서 색상을 만듭니다.

 

● 복잡한 도형 그리기

원 그리기

import turtle as t

t.shape('turtle')
t.circle(120) #반지름이 120인 원 그리기

import turtle as t
 
n = 120    # 원을 60번 그림
t.shape('turtle')
t.speed('fastest')      # 거북이 속도를 가장 빠르게 설정
for i in range(n):
    t.circle(120)       # 반지름이 120인 원을 그림
    t.right(360 / n)    # 오른쪽으로 6도 회전

speed는 거북이의 속도를 설정합니다. 속도는 다음과 같이 문자열 또는 숫자로 설정할 수 있습니다(숫자는 0.5부터 10까지 설정할 수 있습니다). 여기서는 'fastest'를 지정해서 가장 빠른 속도로 그렸습니다.

  • 'fastest': 0
  • 'fast': 10
  • 'normal': 6
  • 'slow': 3
  • 'slowest': 1

선을 이용한 복잡한 도형 만들기

import turtle as t
 
t.shape('turtle')
t.speed('fastest')      # 거북이 속도를 가장 빠르게 설정
for i in range(300):    # 300번 반복
    t.forward(i)        # i만큼 앞으로 이동. 반복할 때마다 선이 길어짐
    t.right(91)         # 오른쪽으로 91도 회전

참고 | 터틀 모양 설정하기

터틀의 shape에는 'arrow', 'turtle', 'circle', 'square', 'triangle', 'classic' 등을 지정하여 여러 가지 터틀 모양을 사용할 수 있습니다. 특히, t.shape()와 같이 shape를 그대로 호출하면 현재 모양을 알아낼 수 있습니다.