* Udemy의 PythonBootcamp 수업 내용을 참고하여 작성
파이썬 터틀 python turtle
파이썬 터틀은 스크린에 그래픽 그림을 그리게 할 수 있는 도구이다.
자세한 기능들은 모두 documentation에서 확인할 수 있다.
https://docs.python.org/3/library/turtle.html
가장 기본이 되는 화면 띄우기는 아래와 같이 할 수 있다. exitonclick()을 추가해 주어야만 스크린이 바로 사라지지 않고 클릭시에 종료될 수 있다.
from turtle import Turtle, Screen
timmy_the_turtle = Turtle()
screen = Screen()
screen.exitonclick()
기능 사용해보기
shape : 모양 변경
color : 터틀 컬러 변경 https://trinket.io/docs/colors
tkinter : 파이썬을 이용해 GUI (graphical user interface) 를 바꾸기
움직이기 : forward, backward, right (각도), left(각도), goto. ...
from turtle import Turtle, Screen
timmy_the_turtle = Turtle()
timmy_the_turtle.shape('turtle')
timmy_the_turtle.color('red')
timmy_the_turtle.forward(30) # 거리
timmy_the_turtle.right(30)
timmy_the_turtle.forward(30) # 거리
screen = Screen()
screen.exitonclick()
정사각형 그리기
from turtle import Turtle, Screen
timmy_the_turtle = Turtle()
for _ in range(4) :
timmy_the_turtle.forward(100) # 거리
timmy_the_turtle.right(90)
screen = Screen()
screen.exitonclick()
모듈 임포트 하기
모듈을 다양한 방법으로 임포트 해서 사용할 수 있다.
1) 기본 모듈 import
모듈이름.클래스 ()로 객체 생성 가능
import turtle
tim = turtle.Turtle()
2) from .. import 방법
클래스를 바로 import하는 방법. 모듈 이름을 쓰지 않아도 됨. 특히 여러개의 Turtle() 객체를 생성해야 할때 유용
from turtle import Turtle
tim = Turtle()
3) from .. import * 방법
모듈 안에 있는 모든 기능, 클래스 등을 import 하는 방법
from turtle import *
4) 모듈의 별칭 주기
import turtle as t
tim = t.Turtle()
5) 패키지를 설치해야 하는 경우
모듈이 기본 파이썬 라이브러리 패키지에 설치되어 있는 경우 별도 설치 필요 없지만, 그렇지 않은 경우 필요한 라이브러리를 별도 설치 필요
(turtle은 기본 라이브러리에 포함됨)
$ pip install heroes
import heroes
print(heroes.gen()) # 영웅 이름 생성
파이썬 터틀 모듈을 다양하게 활용해보기
이제 documentation을 찾아보면서 본격적으로 파이썬터틀을 이용해 다양한 문제를 풀어보자.
1. 점선 그리기
pen control, drawing control에 들어가서 penup( )을 활용
from turtle import Turtle, Screen
tim = Turtle()
for _ in range(15) :
tim.forward(10)
tim.penup() # 펜들기
tim.forward(10)
tim.pendown() # 펜내리기
screen = Screen()
screen.exitonclick()
2. 다양한 도형 그리기
삼각형부터 십각형까지 random 한색깔로 그려보자. random 모듈의 활용, 각도의 정의 (360/변의 수)에 주의
from turtle import Turtle, Screen
import random
tim = Turtle()
colors = ['midnight blue','aquamarine','firebrick','tomato','yellow','magenta']
def draw_shape(num_sides):
angle = 360 / num_sides
for _ in range(num_sides) :
tim.forward(100)
tim.right(angle)
for shape_side_n in range(3,11) :
tim.color(random.choice(colors))
draw_shape(shape_side_n)
screen = Screen()
screen.exitonclick()
3. 랜덤 워크 Random Walk 구현하기
랜덤 워크는 다양한 패턴을 모델링, 시각화 하는 데에 활용되는 개념 https://en.wikipedia.org/wiki/Random_walk
완전 랜덤한 방향, 색깔로 랜덤워크를 그려보자.
랜덤한 색상을 고를때는 RGB 컬러 튜플을 활용해서, 임의의 색깔을 정한 후 사용해보자.
https://www.w3schools.com/colors/colors_rgb.asp
import turtle as t
import random
tim = t.Turtle()
t.colormode(255)
def random_color():
r = random.randint(0,255)
g = random.randint(0,255)
b = random.randint(0,255)
random_color = (r,g,b)
return random_color
directions = [0, 90, 180, 270]
tim.pensize(5)
tim.speed(0) #fastest
for i in range(200):
tim.color(random_color())
tim.forward(20)
tim.setheading(random.choice(directions))
4. 스피로 그래프 Spirograph 그리기
반지름이 100인 원을 다수 그려서 원 그래프를 그려보자
import turtle as t
import random
tim = t.Turtle()
t.colormode(255)
def random_color():
r = random.randint(0,255)
g = random.randint(0,255)
b = random.randint(0,255)
random_color = (r,g,b)
return random_color
tim.speed(0)
def draw_spirograph(size_of_gap) :
for _ in range(int(360/ size_of_gap)):
tim.color(random_color())
tim.circle(100)
tim.setheading(tim.heading() + size_of_gap)
draw_spirograph(5)
screen = t.Screen()
screen.exitonclick()
5. 허스트의 스팟 페인팅 그리기
colorgram 라이브러리 패키지를 받아서 이미지로부터 추출된 색상 팔레트를 얻을 수 있다.
https://pypi.org/project/colorgram.py/
1) 색상 리스트 뽑기
$ pip3 install colorgram.py
import colorgram
import turtle as t
import random
colors = colorgram.extract('/Users/python-code/python100/day-18/hisrt-painting/hirst spot.png', 20)
rgb_colors = []
for color in colors :
r = color.rgb.r
g = color.rgb.g
b = color.rgb.b
new_colors = (r,g,b)
rgb_colors.append(new_colors)
print(rgb_colors)
2) 허스트 페인팅 그리기
import turtle as turtle_module
import random
tim = turtle_module.Turtle()
turtle_module.colormode(255)
color_list = [(250, 248, 245), (250, 246, 248), (242, 248, 245), (239, 244, 249), (235, 225, 80), (219, 162, 87), (202, 5, 69), (235, 51, 128), (107, 180, 218), (203, 75, 19), (36, 186, 120), (26, 105, 171), (212, 136, 175), (13, 24, 65), (15, 30, 174), (188, 161, 36), (17, 183, 212), (204, 30, 140), (229, 168, 196), (120, 191, 151)]
tim.speed(2)
tim.penup()
tim.hideturtle()
tim.setheading(225)
tim.forward(300)
tim.setheading(0)
# 허스트 작품처럼 그려보기
num_of_dots = 100
for dot_count in range(1, num_of_dots+1):
tim.dot(20,random.choice(color_list))
tim.forward(50)
if dot_count % 10 == 0 :
tim.setheading(90)
tim.forward(50)
tim.setheading(180)
tim.forward(500)
tim.setheading(0)
screen = turtle_module.Screen()
screen.exitonclick()
'Dev' 카테고리의 다른 글
[Python] 5. 뱀 게임 만들기 (1) (0) | 2024.05.04 |
---|---|
[Python] 4. 파이썬 고차 함수와 인스턴스 (feat.거북이 레이스) (0) | 2024.05.03 |
[Python] 2. 객체 지향 프로그래밍 (feat. OX 퀴즈 게임) (0) | 2024.05.03 |
[Python] 1. 기본 개발 프로그래밍 (feat. 커피머신 프로젝트) (0) | 2024.05.02 |
[DevOps] 1. DevOps 파이썬 핵심 - 3) 함수 (1) | 2024.04.26 |