소연의_개발일지
article thumbnail

1. 터틀 임포트 해 오기

import turtle

혹은 밑처럼 임포트 해 온다면 사용할 때마다 앞에 turtle를 붙일 필요가 없다. 

from turtle import *

터틀을 임포트 행 온다. 

import turtle as t

as를 붙여서 쓰면 ~로 부르겠다. 라는 의미이다. 밑에서는 turtle을 t로 줄여서 쓸 수 있다.

 

 

2. 터틀 객체 생성하기

tim = turtle.Turtle()

터틀을 사용할 객체를 가져와 준다. 나는 tim이라는 터틀을 만들 것이다. 

 

 

3. 터틀 모양 바꾸기

turtle.shape라는 파라메터를 사용한다.

터틀은 여러가지 모양이 있다. 

“arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”

 

적용방법

tim.shape("turtle")

 

터틀 색 바꾸기

tim.color('orange')

색 참고 사이트: https://trinket.io/docs/colors

화면 꺼질 때까지 유지시키기

screen = Screen()
screen.exitonclick()

 

터틀 정사각형 그리기

from turtle import *

tim = Turtle()
tim.shape("turtle")
tim.color('orange')
# screen = Screen()
# screen.exitonclick()

for i in range(4):
    tim.forward(100)
    tim.left(90)

터틀 점선 그리기

 

1번 방법 - for문

for i in range(30):  # for 문 사용하기
    tim.pendown()  # 그릴 준비를 한다.
    tim.forward(5)  # 움직이며 그린다.
    tim.penup()  # 움직일 때 그리지 않는다.
    tim.forward(5)  # 움직이며 그리지 않는다.

 

2번 방법 - while문

current_step = 0
steps = 30

while current_step < steps:
    tim.pendown()
    tim.forward(5)
    tim.penup()
    tim.forward(5)
    current_step += 1

 

 

터틀 여러가지 도형 그리기

def tim_forward(tim_color, num, angle):
    tim.color(tim_color)
    for i in range(num):
        tim.forward(100)
        tim.left(angle)
    # tim.forward(100)

# 삼각형
tim_forward('red', 3, 120)

# 사각형
tim_forward('orange', 4, 90)

#오각형
tim_forward('yellow', 5, 72)

#육각형
tim_forward('green', 6, 60)

#팔각형
tim_forward('blue', 8, 45)

#구각형
tim_forward('navy', 9, 40)

#십각형
tim_forward('purple', 10, 36)

 

 

터틀 random walk 그리기

import turtle
from turtle import *
import random

tim = Turtle()
tim.shape("turtle")
tim.color('red')

screen = Screen()

colors = ['red', 'orange', 'yellow', 'blue', 'navy', 'purple', 'green', 'turquoise', 'gold']
tim.width(4)  # 두께 수정
num = 0  # 변수 0으로 설정

while num < 30:  # 30이 될 때까지 while문 반복
    tim_color = random.randint(0, len(colors))  # 색 랜덤 지정
    tim.color(colors[tim_color - 1])  # 색 바꿔주기
    coin = random.randint(0, 1)  # 랜덤 이동지정
    if coin == 0:  # 0일때
        tim.right(90)  # 오른쪽으로 90도 돌고
    elif coin == 1:  # 1일때
        tim.left(90)  # 왼쪽으로 90도 돌고

    tim.forward(50)  # 앞으로 50 전진
    num += 1  # num에 1 더해주기

screen.exitonclick()

 

 

강사님 코드

import turtle
from turtle import *

tim = Turtle()
screen = Screen()

colours = ["CornflowerBlue", "DarkOrchid", "IndianRed", "DeepSkyBlue", "LightSeaGreen",
"wheat", "SlateGray", "SeaGreen"]
direction = [0, 90, 180, 270]

tim.pensize(20) #터틀의 굵기 변경
for i in range(200):
    tim.color(random.choice(colours))
    tim.forward(30)
    tim.setheading(random.choice(direction)) #setheading(각도)는 터틀을 각도만큼 회전시키게 함
    
screen.exitonclick()

터틀 속도 변경하기

(https://docs.python.org/3/library/turtle.html#turtle.speed)

  • “fastest”: 0
  • “fast”: 10
  • “normal”: 6
  • “slow”: 3
  • “slowest”: 1
tim.speed('slow')

터틀 객체에 문구나 숫자를 넣어주면 된다.

 

 

완전 랜덤한 터틀 색 변경하기

import turtle
from turtle import *


import random

tim = Turtle()
turtle.colormode(255) #컬러모드에 255까지 들어갈 수 있게 담아준다.
# tim.shape("turtle")
# tim.color('red')

screen = Screen()

def random_color():
    """r, g, b 색 반환 함수"""
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    return (r, g, b)


direction = [0, 90, 180, 270]
tim.speed(2)

tim.pensize(15)
for i in range(200):
    tim.pencolor(random_color())
    tim.forward(30)
    tim.setheading(random.choice(direction)) #setheading(각도)는 터틀을 각도만큼 회전시키게 함

 

 

 

터틀로 원 그리기

 

처음 작성한 코드

import turtle
import turtle as t

tim = t.Turtle()

screen = t.Screen()

r = 50
angle = 0
num = 0

tim.speed(6)

while num < 100:
    tim.circle(r)
    tim.setheading(angle)
    angle += 3.6
    num += 1

screen.exitonclick()

 

강의 보면서 수정한 코드

import turtle
import turtle as t
import random

tim = t.Turtle() #터틀 객체 생성

t.colormode(255)

def random_color():
    """r, g, b 색 반환 함수"""
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    return (r, g, b)


screen = t.Screen() #화면 생성
tim.speed('fastest') #터틀 속도: 가장 빠르게

def draw_the_circle(size_of_gap):
    """터틀이 원 그리는 함수"""
    for i in range(int(360 / size_of_gap)): #360도를 함수에 넣은 숫자로 나눈 만큼 반복
        tim.color(random_color()) #랜덤한 숫자 받아옴
        tim.circle(100) #반지름은 100 
        tim.setheading(tim.heading() + size_of_gap) #for문이 돌아갈 때마다 터틀의 각도 변경해줌

# 함수 호출
draw_the_circle(5)

screen.exitonclick() #클릭하기 전까지 켜져 있게 함

 

 

 

 

 

 

 

터틀로 점 찍기 그림그리기

import random

import colorgram
from turtle import *
import turtle as t

# 컬러그램으로 색 추출하기
# colors = colorgram.extract('image.jpg', 30) #색들을 30가지 추출하고
# color_palette = [] #이를 담을 빈 리스트 만들어 놓는다.
#
# for color in colors: #FOR문을 돌려서
#     r = color.rgb.r #RGB 각 값들을 뽑아
#     g = color.rgb.g
#     b = color.rgb.b
#     new_color = (r, g, b) #튜플로 담는다.
#     color_palette.append(new_color) #append한다.
#
# print(color_palette)
screen = t.Screen()  # 스크린 객체 만들어 놓는다. 창이 꺼질 때까지 닫히지 않는다.

# 컬러그램에서 담은 rgb 값들을 콘솔창에서 복사해 와서 가져온다.
colors = [(250, 247, 244), (248, 245, 246), (213, 154, 96), (52, 107, 132), (179, 77, 31), (202, 142, 31),
          (115, 155, 171), (124, 79, 99), (122, 175, 156), (229, 236, 239), (226, 198, 131), (242, 247, 244),
          (192, 87, 108), (11, 50, 64), (55, 38, 19), (45, 168, 126), (47, 127, 123), (200, 121, 143),
          (168, 21, 29), (228, 92, 77), (244, 162, 160), (38, 32, 35), (2, 25, 24), (78, 147, 171), (170, 23, 18),
          (19, 79, 90), (101, 126, 158), (235, 166, 171), (177, 204, 185), (49, 62, 84)]

# 20 원 간격은 50


tim = t.Turtle()  # 팀이라는 터틀 객체를 만든다.
tim.penup()  # 팀의 그림자를 가지 않게 한다.
t.colormode(255)  # 컬러모드 255색을 넣어준다.
tim.setheading(225)  # 터틀 머리 방향을 255각도로 해서 좌하 방향으로 내려가도록 한다.
tim.forward(250)  # 250만큼 움직이게 한다.
tim.setheading(0)  # 다시 터틀 방향을 0도로 만든다.

number_of_dots = 100 # 100개의 점을 찍는다

for dot_count in range(1, number_of_dots + 1): # 100번 반복한다
    tim.dot(20, random.choice(colors)) #터틀 객체의 색을 반복할 때마다 바꿔 준다.
    tim.forward(50) #점을 찍고 50씩 나아간다.

    if dot_count % 10 == 0: # 만약 10을 찍은 상태라면
        tim.setheading(90) #90도 각도를 틀고
        tim.forward(50) # 50만큼 전진
        tim.setheading(180) # 다시 180도 돌고
        tim.forward(500) # 온 만큼 돌아가서
        tim.setheading(0) # 초기값으로 각도 0으로 만들어준다.
tim.hideturtle() #for문이 끝난 후에는 터틀 객체를 숨겨주고
screen.exitonclick() #화면이 꺼질 때까지 화면이 닫히지 않게 함

 

 

 

gui를 터틀로 먼저 접했으면 더 재밌었을까...

더 공부해 봐야겠다.

 

 

 

 

profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!