콘텐츠로 이동

D. 거북이로 막대 그래프 그리기


🎯 학습 목표

이 강의를 마치면 다음을 할 수 있어요:

  • ○ 거북이로 막대(사각형)를 그릴 수 있다
  • 함수로 막대 그리기를 재사용할 수 있다
  • ○ 여러 개의 막대를 나란히 그릴 수 있다

핵심 개념

막대 그래프란?

막대 그래프는 데이터를 막대의 높이로 표현합니다.

📊 비유: 블록 쌓기

레고 블록을 쌓는 것처럼, 숫자가 크면 블록을 더 많이 쌓아요!

  • 숫자 3 → 블록 3개
  • 숫자 5 → 블록 5개
  • 어느 쪽이 높은지 바로 알 수 있죠!

막대 하나 그리기

막대는 사각형입니다. 거북이로 사각형을 그려봅시다!

# 막대 하나 그리기 (높이 100)
t.forward(100)    # 위로
t.right(90)
t.forward(30)     # 오른쪽으로 (막대 너비)
t.right(90)
t.forward(100)    # 아래로
t.right(90)
t.forward(30)     # 왼쪽으로

막대 높이 = 데이터 값

과목 점수 막대 높이
국어 80 80픽셀
수학 95 95픽셀
영어 70 70픽셀

함수로 막대 그리기

같은 코드를 여러 번 쓰지 말고, 함수로 만들어서 재사용합시다!

def draw_bar(t, height, width=40):
    """막대 하나를 그리는 함수"""
    for _ in range(2):
        t.forward(height)
        t.right(90)
        t.forward(width)
        t.right(90)

💡 함수의 장점

  • 재사용: 한 번 만들면 여러 번 사용 가능
  • 깔끔함: 코드가 짧고 읽기 쉬움
  • 수정 용이: 함수만 고치면 전체가 바뀜

비쥬얼 코딩 해보기

거북이로 막대 하나를 그려봅시다!

🎯 미션
거북이 시작 블록을 추가하세요
앞으로/오른쪽 블록으로 사각형을 그려보세요
# 블록을 추가하면 Python 코드가 여기에 표시됩니다...
블록을 추가하면 흐름도가 여기에 표시됩니다...
100 100 90 90 4


예제 코드

함수로 막대 하나 그리기

import turtle

def draw_bar(t, height, width=40):
    """막대 하나를 그리는 함수"""
    for _ in range(2):
        t.forward(height)
        t.right(90)
        t.forward(width)
        t.right(90)

t = turtle.Turtle()
t.shape("turtle")
t.speed(3)

# 시작 위치로 이동
t.penup()
t.goto(-100, -100)
t.pendown()
t.left(90)  # 위를 바라봄

# 함수 호출로 막대 그리기!
draw_bar(t, 80)

실행 결과

높이가 80인 막대 하나가 그려집니다! 함수 덕분에 코드가 깔끔해졌어요.

함수로 막대 3개 그리기 (성적표)

import turtle

def draw_bar(t, height, width=40):
    """막대 하나를 그리는 함수"""
    for _ in range(2):
        t.forward(height)
        t.right(90)
        t.forward(width)
        t.right(90)

def move_to_next(t, width, gap=20):
    """다음 막대 위치로 이동하는 함수"""
    t.penup()
    t.right(90)
    t.forward(width + gap)
    t.left(90)
    t.pendown()

t = turtle.Turtle()
t.shape("turtle")
t.speed(5)

# 데이터: 국어, 수학, 영어 점수
scores = [80, 95, 70]
width = 40

t.penup()
t.goto(-100, -100)
t.pendown()
t.left(90)  # 위를 바라봄

# 함수를 사용해서 깔끔하게!
for score in scores:
    draw_bar(t, score, width)
    move_to_next(t, width)

실행 결과

세 과목의 점수가 막대 그래프로 표시됩니다! 함수 덕분에 반복문 안이 단 2줄로 깔끔해졌어요.


🎯 퀴즈

퀴즈: 막대 그래프
막대 그래프에서 데이터 값이 클수록 막대는 어떻게 되나요?
정답 보기

정답: A) 더 높아진다

막대 그래프는 데이터 값을 막대의 높이로 표현합니다. 값이 크면 막대가 높아지고, 값이 작으면 막대가 낮아집니다!

막대 그래프 함수 연습:

함수 정의: def (t, height, width):

함수 호출: draw_bar(t, , 40)

함수의 장점: 코드 가능


🎯 빈칸 채우기 미션

빈칸을 채워서 코드를 완성하세요!

정답 확인
def draw_bar(t, height, width=40):
    for _ in range(2):
        t.forward(height)
        t.right(90)
        t.forward(width)
        t.right(90)

⚠️ 실수해보기 (Let's Break It!)

다음 코드에서 막대가 이상하게 그려져요. 무엇이 문제일까요?

import turtle

def draw_bar(t, height, width=40):
    for _ in range(2):
        t.forward(height)
        t.right(90)
        t.forward(width)
        t.right(90)

t = turtle.Turtle()

# 막대 그리기
draw_bar(t, 80)  # 막대가 옆으로 누워있어요!
힌트 보기

거북이는 처음에 어느 방향을 바라보고 있나요?

정답 보기

거북이가 오른쪽을 보고 있어서 막대가 옆으로 그려집니다!

import turtle

def draw_bar(t, height, width=40):
    for _ in range(2):
        t.forward(height)
        t.right(90)
        t.forward(width)
        t.right(90)

t = turtle.Turtle()
t.left(90)  # ← 먼저 위를 바라보게!

draw_bar(t, 80)  # 이제 막대가 위로 그려져요!

거북이는 처음에 오른쪽을 바라봅니다. t.left(90)으로 를 바라보게 한 후 막대를 그려야 해요!


🔧 디버그 클리닉

문제: 막대가 옆으로 누워있어요!

❌ 잘못된 코드

t.forward(80)  # 거북이가 오른쪽을 보고 있어서 옆으로 그려짐

✅ 올바른 코드

t.left(90)      # 먼저 위를 바라보게!
t.forward(80)   # 이제 위로 그려짐
해결: 막대를 그리기 전에 left(90)으로 위를 바라보게 하세요!


직접 코딩해보기

함수로 막대 2개 그리기

draw_bar() 함수를 만들고, 두 과목의 점수를 막대 그래프로 그려보세요!

예시 답안
import turtle

def draw_bar(t, height, width=40):
    """막대 하나를 그리는 함수"""
    for _ in range(2):
        t.forward(height)
        t.right(90)
        t.forward(width)
        t.right(90)

t = turtle.Turtle()
t.shape('turtle')
t.speed(3)

scores = [70, 90]
width = 40

t.penup()
t.goto(-80, -100)
t.pendown()
t.left(90)

for score in scores:
    draw_bar(t, score, width)
    t.penup()
    t.right(90)
    t.forward(width + 20)
    t.left(90)
    t.pendown()

결과: 함수를 사용해서 깔끔하게 두 개의 막대가 그려집니다!


🧩 핵심 요약

이번 강의에서 배운 내용:

개념 설명
막대 그래프 데이터를 막대 높이로 표현
draw_bar() 함수 막대 그리기를 재사용 가능하게
함수의 장점 코드 재사용, 깔끔함, 수정 용이
여러 막대 반복문 + 함수로 효율적으로

복습 체크리스트

  • [ ] draw_bar() 함수를 만들 수 있나요?
  • [ ] 함수를 호출해서 막대를 그릴 수 있나요?
  • [ ] 반복문과 함수를 함께 사용할 수 있나요?