본문 바로가기

카테고리 없음

패스트캠퍼스 환급챌린지 5일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기

반응형

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

5일차 : Ch 5. 파이썬 라이브러리 활용으로 스킬업

 

이번 시간에는 파이썬의 터틀 라이브러리를 이용해서 그래픽을 생성하는 수업

 

터틀 라이브러리란?

터틀 라이브러리는 1960년대 로고(Logo) 프로그래밍 언어에서 시작된 개념을 파이썬으로 구현한 것입니다. 마치 종이 위에서 펜을 들고 그림을 그리는 것처럼, 가상의 거북이가 화면을 돌아다니며 그 경로를 따라 선을 그어 나갑니다. 이 직관적인 접근 방식은 프로그래밍 초보자도 쉽게 이해할 수 있게 해줍니다.

터틀의 핵심 개념은 상태(state)와 행동(action)입니다. 터틀은 현재 위치, 방향, 펜의 상태(올림/내림) 등의 정보를 가지고 있으며, 우리가 주는 명령에 따라 이동하고 회전하며 그림을 그립니다.

터틀을 사용하기 위해서는 먼저 라이브러리를 가져와야 합니다. 파이썬에 기본적으로 포함되어 있어서 별도 설치가 필요하지 않습니다.

import turtle

# 터틀 객체 생성
my_turtle = turtle.Turtle()

# 화면 설정
screen = turtle.Screen()
screen.bgcolor("white")  # 배경색을 흰색으로 설정
screen.title("나의 첫 번째 터틀 그래픽")

# 간단한 정사각형 그리기
for i in range(4):
    my_turtle.forward(100)  # 100 픽셀 앞으로 이동
    my_turtle.right(90)     # 시계방향으로 90도 회전

# 화면을 클릭하면 종료
screen.exitonclick()

 

터틀의 기본 명령어들

터틀을 제대로 활용하려면 주요 명령어들을 이해해야 합니다:

이동 관련 명령어:

  • forward(거리) 또는 fd(거리): 현재 방향으로 지정된 거리만큼 이동
  • backward(거리) 또는 bk(거리): 현재 방향의 반대로 이동
  • goto(x, y): 지정된 좌표로 직접 이동

회전 관련 명령어:

  • right(각도) 또는 rt(각도): 시계방향으로 회전
  • left(각도) 또는 lt(각도): 반시계방향으로 회전
  • setheading(각도): 절대 방향으로 회전 (0도가 동쪽)

펜 제어 명령어:

  • penup() 또는 pu(): 펜을 올림 (이동할 때 선이 그어지지 않음)
  • pendown() 또는 pd(): 펜을 내림 (이동할 때 선이 그어짐)
  • pencolor(색상): 펜 색상 변경
  • pensize(크기): 펜 두께 변경
  • speed(속도): 터틀의 이동 속도 설정 (0-10, 0이 가장 빠름)

펜 모양 제어 명령어:

  • shape(모양): 터틀의 모양 변경 ("arrow", "turtle", "circle", "square", "triangle", "classic")
  • shapesize(크기): 터틀 모양의 크기 변경
  • stamp(): 현재 위치에 터틀 모양을 찍기 (도장 효과)
  • clearstamp(stamp_id): 특정 도장 지우기
  • clearstamps(): 모든 도장 지우기

화면 및 배경 제어 명령어:

  • bgcolor(색상): 화면 배경색 변경
  • bgpic(이미지파일): 배경 이미지 설정
  • setup(너비, 높이): 화면 크기 설정
  • title(제목): 창 제목 설정
  • clear(): 화면의 모든 그림 지우기 (터틀 위치는 유지)
  • reset(): 화면 지우기 + 터틀을 원점으로 이동

이벤트 처리 및 프로그램 제어 명령어:

  • listen(): 키보드 입력을 감지할 수 있도록 설정
  • onkey(함수, 키): 특정 키를 눌렀을 때 실행할 함수 지정
  • onclick(함수): 마우스 클릭했을 때 실행할 함수 지정
  • mainloop() 또는 done(): 프로그램이 종료되지 않도록 대기 상태 유지
  • exitonclick(): 마우스 클릭하면 프로그램 종료
  • update(): 화면을 수동으로 업데이트 (tracer 사용시)
  • tracer(n): 화면 업데이트 속도 조절 (0이면 수동 업데이트)

 

다양한 기본 도형 그리기

이제 다양한 도형을 그려보겠습니다.

import turtle

# 터틀 설정
artist = turtle.Turtle()
artist.speed(5)  # 그리기 속도 조절 (1-10)

# 삼각형 그리기
def draw_triangle(size):
    """정삼각형을 그리는 함수"""
    for _ in range(3):
        artist.forward(size)
        artist.left(120)  # 외각은 360/3 = 120도

# 사각형 그리기
def draw_square(size):
    """정사각형을 그리는 함수"""
    for _ in range(4):
        artist.forward(size)
        artist.left(90)   # 외각은 360/4 = 90도

# 오각형 그리기
def draw_pentagon(size):
    """정오각형을 그리는 함수"""
    for _ in range(5):
        artist.forward(size)
        artist.left(72)   # 외각은 360/5 = 72도

# 원 그리기
def draw_circle(radius):
    """원을 그리는 함수"""
    artist.circle(radius)

# 여러 도형 그리기
artist.pencolor("red")
draw_triangle(100)

artist.penup()
artist.goto(-150, 0)
artist.pendown()
artist.pencolor("blue")
draw_square(80)

artist.penup()
artist.goto(150, 0)
artist.pendown()
artist.pencolor("green")
draw_pentagon(60)

artist.penup()
artist.goto(0, -100)
artist.pendown()
artist.pencolor("purple")
draw_circle(50)

turtle.done()

 

여기서 중요한 개념은 정다각형의 외각입니다. n각형의 외각은 항상 360/n도가 됩니다. 이는 터틀이 한 바퀴 돌면서 원래 방향으로 돌아와야 한다는 수학적 원리에 기반합니다.

반복문으로 만드는 복잡한 패턴

import turtle

# 다채로운 나선형 그리기
def draw_colorful_spiral():
    """색상이 변하는 나선형을 그리는 함수"""
    artist = turtle.Turtle()
    artist.speed(10)
    
    colors = ["red", "orange", "yellow", "green", "blue", "purple"]
    
    for i in range(100):
        artist.pencolor(colors[i % len(colors)])  # 색상을 순환
        artist.forward(i * 2)  # 점점 더 멀리 이동
        artist.left(91)        # 살짝 비틀어진 각도로 나선 효과

# 다각형 꽃 만들기
def draw_polygon_flower():
    """여러 다각형을 회전시켜 꽃 모양 만들기"""
    artist = turtle.Turtle()
    artist.speed(10)
    
    # 36개의 오각형을 10도씩 회전하며 그리기
    for angle in range(0, 360, 10):
        artist.setheading(angle)
        artist.pencolor("red")
        
        # 각 위치에서 작은 오각형 그리기
        for _ in range(5):
            artist.forward(50)
            artist.left(72)

# 프랙탈 나무 그리기
def draw_fractal_tree(branch_length, angle, depth):
    """재귀적으로 나뭇가지를 그리는 함수"""
    if depth == 0:
        return
    
    # 현재 가지 그리기
    artist.forward(branch_length)
    
    # 오른쪽 가지
    artist.right(angle)
    draw_fractal_tree(branch_length * 0.7, angle, depth - 1)
    
    # 왼쪽 가지
    artist.left(2 * angle)
    draw_fractal_tree(branch_length * 0.7, angle, depth - 1)
    
    # 원래 위치로 돌아가기
    artist.right(angle)
    artist.backward(branch_length)

# 실행
screen = turtle.Screen()
screen.bgcolor("black")

# 나선형 그리기
draw_colorful_spiral()

# 화면 초기화 후 꽃 그리기
screen.clear()
screen.bgcolor("black")
draw_polygon_flower()

# 화면 초기화 후 프랙탈 나무 그리기
screen.clear()
screen.bgcolor("lightblue")
artist = turtle.Turtle()
artist.color("brown")
artist.left(90)  # 위쪽을 향하도록
artist.penup()
artist.goto(0, -200)
artist.pendown()
draw_fractal_tree(100, 30, 5)

screen.exitonclick()

 

오늘의 실습

 

 

 

 

 

 

 

 

 

https://fastcampus.info/4n8ztzq

 

(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스

초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!

fastcampus.co.kr

 

반응형