Parameter / Argument / Return

값으로 생성기 조절하기

매개변수에 값을 전달하고, return으로 결과를 받아 같은 규칙의 변주를 만듭니다.

색상과 크기 입력 조각을 파란 생성 틀에 바꾸어 넣고 세 결과를 만드는 6주차 2교시 이미지

함수의 입력을 바꾸고 생성된 이미지를 호출한 곳으로 돌려받기

형식
기본 50분 / 확장 60분 · + 10 MIN EXTENSION
핵심
매개변수, 인자, 지역 변수, return
연결
고정 함수 → 입력으로 조절하는 생성기

오늘의 학습 목표

  • 고정된 함수가 같은 결과만 만드는 이유를 설명하고 바꿀 요소를 입력 자리로 정할 수 있습니다.
  • 함수 정의에 적는 매개변수와 함수 호출에 전달하는 인자를 구분할 수 있습니다.
  • 위치 인자와 키워드 인자의 차이를 알고 여러 입력을 읽기 쉬운 방식으로 전달할 수 있습니다.
  • 함수 안에서 만든 지역 변수의 사용 범위를 설명할 수 있습니다.
  • return이 값을 출력하는 문장이 아니라 호출한 곳으로 결과를 전달하는 문장임을 설명할 수 있습니다.
  • 5주차 코드를 create_poster() 함수로 묶고 시드·도형 수·조건 기준·팔레트를 입력으로 전달할 수 있습니다.
  • 같은 입력은 같은 이미지를 재현하고 다른 입력은 같은 규칙의 변주를 만든다는 사실을 확인할 수 있습니다.

수업 운영: 기본 50분과 확장 60분

기본 50분에서는 매개변수와 인자의 구분, 위치·키워드 전달, 지역 변수, return, 완전한 이미지 생성 함수, 3교시 미션 계약까지 진행합니다. 각 개념은 숫자 함수에서 먼저 확인한 뒤 도형 함수와 포스터 함수로 확장합니다. 진도가 빠를 때만 50-60분 확장에서 하나의 함수에 세 입력 조합을 적용하고 어떤 값이 화면의 무엇을 바꾸었는지 기록합니다.

매개변수가 많은 함수를 읽는 순서

  1. 함수 이름으로 전체 작업을 확인합니다. create_poster는 포스터 한 장을 만드는 작업입니다.
  2. 정의 괄호의 매개변수를 왼쪽부터 읽습니다. 시드, 도형 수, 중간 기준, 큰 기준, 팔레트 순서입니다.
  3. 호출 괄호의 실제 값과 이름을 연결합니다. 키워드 인자를 사용하면 연결이 코드에 직접 보입니다.
  4. 함수 본문에서 각 입력이 쓰이는 위치를 한 곳씩 찾습니다. 모든 줄을 한꺼번에 이해하려 하지 않습니다.
  5. return 뒤의 값을 찾습니다. 그 값이 호출 결과로 함수 밖에 전달됩니다.

0-5분 · 입력이 없는 함수는 호출할 때 결과를 조절할 수 없다

1교시의 draw_fixed_motif()는 호출할 때마다 같은 좌표와 같은 색을 사용했습니다. 함수 본문 안에 모든 값이 고정되어 있고 괄호 안에는 외부에서 값을 받을 자리가 없기 때문입니다.

from PIL import Image, ImageDraw
from IPython.display import display

image = Image.new("RGB", (600, 400), (245, 240, 228))
draw = ImageDraw.Draw(image)

def draw_fixed_circle():
    draw.ellipse(
        (80, 100, 200, 220),
        fill=(48, 112, 166),
    )

draw_fixed_circle()
draw_fixed_circle()
display(image)

호출은 두 번이지만 두 원은 같은 위치에 포개집니다. 두 번째 원을 오른쪽으로 옮기려면 본문을 복사해 좌표를 고치는 대신, 호출할 때 x와 y를 전달할 수 있어야 합니다. 이처럼 함수마다 달라질 값을 받을 수 있도록 정의한 이름을 매개변수라고 합니다.

개별 회상 · 90초

호출할 때 바꾸고 싶은 값 찾기

위 함수의 숫자와 색상 가운데 두 번째 호출에서 바꾸고 싶은 항목 세 개를 선택합니다. 선택한 항목이 위치, 크기, 색상 가운데 무엇에 해당하는지도 적습니다.

바꿀 값의 기준 예시

x와 y는 위치, 120은 크기, RGB 튜플은 색상에 해당합니다. 다음 단계에서는 x, y, size, color라는 입력 자리를 정의해 호출마다 실제 값을 전달합니다.

5-16분 · 매개변수는 입력 자리이고 인자는 실제 값이다

다음 함수는 위치, 크기, 색상을 함수 밖에서 받습니다. 정의 괄호의 x, y, size, color가 매개변수입니다.

from PIL import Image, ImageDraw
from IPython.display import display

image = Image.new("RGB", (600, 400), (245, 240, 228))
draw = ImageDraw.Draw(image)

def draw_circle(x, y, size, color):
    circle_box = (x, y, x + size, y + size)
    draw.ellipse(circle_box, fill=color)

draw_circle(70, 90, 100, (48, 112, 166))
draw_circle(250, 150, 140, (230, 83, 72))
display(image)
1def draw_circle원을 그리는 함수를 정의합니다.
2x, y, size, color호출할 때 값을 받을 네 개의 매개변수입니다.
3circle_box = (x, y, x + size, y + size)전달받은 값으로 원의 경계 상자를 계산합니다.
4draw_circle(70, 90, 100, blue)첫 번째 호출은 실제 위치·크기·색상 인자를 전달합니다.
5draw_circle(250, 150, 140, coral)두 번째 호출은 같은 작업에 다른 인자를 전달합니다.
Parameter · 매개변수 def draw_circle(x, y, size, color):

함수를 정의할 때 만드는 입력 자리의 이름입니다. 아직 구체적인 위치와 색을 정하지 않습니다.

Argument · 인자 draw_circle(70, 90, 100, blue)

함수를 호출할 때 각 입력 자리에 전달하는 실제 값 또는 값이 담긴 변수입니다.

첫 번째 함수 호출에서 매개변수와 인자의 연결
정의의 매개변수호출의 인자함수 안에서 의미화면 결과
x70원의 왼쪽 좌표왼쪽에서 70픽셀
y90원의 위쪽 좌표위에서 90픽셀
size100가로와 세로의 크기100 × 100 원
color(48, 112, 166)원의 내부 RGB파란색 원

매개변수는 함수 안에서 변수처럼 사용됩니다. 호출이 시작되면 첫 번째 인자 70이 x, 두 번째 인자 90이 y에 연결됩니다. 호출이 끝난 뒤 두 번째 호출이 시작되면 같은 매개변수 이름에 새로운 값이 연결됩니다.

Call Ax=70 · y=90 · size=100
파란색 작은 원
Call Bx=250 · y=150 · size=140
산호색 큰 원
Shared bodydraw.ellipse(circle_box)
실행 절차는 동일
개별 연결 · 2분

세 번째 호출의 화면 결과 예측하기

draw_circle(400, 50, 80, (92, 150, 118))을 추가하면 원의 왼쪽, 위쪽, 크기, 색이 어떻게 되는지 적습니다.

세 번째 호출 예측 답안

왼쪽 좌표는 400, 위쪽 좌표는 50, 크기는 80 × 80이며 RGB (92, 150, 118)의 초록색 원이 만들어집니다. 오른쪽과 아래쪽 좌표는 함수 안에서 각각 480과 130으로 계산됩니다.

16-27분 · 위치로 전달할 수도 있고 이름으로 전달할 수도 있다

기본 함수에서는 인자를 매개변수의 순서대로 전달할 수 있습니다. 이를 위치 인자라고 합니다. 값이 적을 때에는 간결하지만 숫자가 많아지면 각 숫자의 의미를 다시 정의에서 찾아야 합니다.

draw_circle(70, 90, 100, (48, 112, 166))

각 값 앞에 매개변수 이름을 적는 키워드 인자를 사용할 수도 있습니다. 코드가 길어지지만 어떤 값이 어떤 역할을 하는지 호출문 자체에서 확인할 수 있습니다.

draw_circle(
    x=70,
    y=90,
    size=100,
    color=(48, 112, 166),
)
위치 인자와 키워드 인자의 비교
구분연결 기준장점주의점
위치 인자왼쪽부터 매개변수 순서짧고 간단함x·y·size처럼 숫자가 많으면 순서를 바꾸기 쉬움
키워드 인자이름=값의 이름각 값의 역할이 호출문에 보임매개변수 이름을 정확히 작성해야 함

이번 주의 create_poster()에는 다섯 입력이 있으므로 호출문에서는 키워드 인자를 사용합니다. 키워드 인자의 순서는 바꿀 수 있지만, 수업 예제에서는 함수 정의와 같은 순서를 유지해 비교하기 쉽게 만듭니다.

호출 오류는 정의와 호출의 입력 목록을 나란히 비교한다

TypeError가 발생하는 대표 원인
잘못된 호출원인확인할 기준
draw_circle(70, 90, 100)color 인자 누락정의에는 네 매개변수, 호출에는 세 인자
draw_circle(70, 90, 100, blue, 4)인자 한 개 초과정의보다 호출 값이 많음
draw_circle(width=100, x=70, y=90, color=blue)width라는 매개변수가 없음정의의 이름은 size
draw_circle(70, y=90, 100, color=blue)키워드 인자 뒤에 위치 인자를 사용위치 인자를 먼저 쓰거나 모두 키워드로 작성
TypeError: missing 1 required positional argument: 'color'가 나오면?

함수 정의에는 color 매개변수가 있지만 호출할 때 실제 색상 인자를 전달하지 않았다는 뜻입니다. 정의 괄호와 호출 괄호를 나란히 놓고 누락된 역할을 찾은 뒤 RGB 튜플 또는 색상 변수를 전달합니다.

기본값 매개변수는 이번 기본 수업에서 사용하지 않는다

Python은 인자를 생략했을 때 사용할 기본값을 정의할 수 있지만, 이번 시간에는 모든 입력을 호출문에 명시합니다. 먼저 매개변수와 인자의 일대일 연결을 정확히 이해한 뒤 기본값은 이후 확장에서 다룹니다.

27-38분 · return은 함수 안의 결과를 호출한 곳으로 전달한다

다음 함수는 x, y, size를 받아 Pillow 도형에 사용할 경계 상자를 계산합니다. return circle_box가 실행되면 계산된 튜플이 호출한 곳으로 전달되고 first_box에 저장됩니다.

def make_circle_box(x, y, size):
    circle_box = (x, y, x + size, y + size)
    return circle_box

first_box = make_circle_box(70, 90, 100)
print(first_box)
OUTPUT

(70, 90, 170, 190)

1 / Arguments값 전달

70, 90, 100이 x, y, size에 연결됩니다.

2 / Local work안에서 계산

함수 본문이 circle_box 튜플을 만듭니다.

3 / Return결과 전달

튜플이 호출 자리로 돌아와 first_box에 저장됩니다.

return, print, display, save는 목적이 다르다

함수 결과를 다루는 네 가지 동작
동작주요 목적호출한 곳에서 값 사용이번 생성기에서 위치
return image함수의 결과값 전달가능함수 본문의 마지막
print(value)문자나 숫자를 출력 영역에 표시표시만으로는 전달되지 않음검사와 설명에 사용
display(image)노트북에 이미지를 시각적으로 표시표시만으로는 전달되지 않음함수 호출 뒤 사용
image.save(filename)이미지를 파일로 저장파일이 생성됨결과 선택 뒤 사용

return은 화면에 자동으로 설명을 출력하는 명령이 아닙니다. 함수가 만든 값을 다른 변수에 저장하거나, 다른 함수에 전달하거나, 나중에 저장할 수 있도록 호출 위치로 돌려주는 명령입니다. 함수가 return 없이 끝나면 Python은 None을 돌려줍니다.

def make_title():
    title = "CONTROLLED CHANCE"
    print(title)

returned_value = make_title()
print("돌려받은 값:", returned_value)
OUTPUT

CONTROLLED CHANCE
돌려받은 값: None

첫 줄은 함수 안의 print()가 표시한 문자열이고, 둘째 줄의 None은 함수가 별도의 값을 반환하지 않았다는 뜻입니다. 이미지 생성 함수에서 return image를 빠뜨리면 호출 결과 변수에도 None이 저장되어 이후 display()save() 작업을 이어가기 어렵습니다.

함수 안에서 만든 변수는 기본적으로 함수 안에서 사용한다

make_circle_box() 안에서 만든 circle_box는 함수가 실행되는 동안 사용하는 지역 변수입니다. 함수 밖에서는 그 이름을 직접 사용하지 않고, return으로 받은 값을 새로운 변수에 저장합니다.

def make_circle_box(x, y, size):
    circle_box = (x, y, x + size, y + size)
    return circle_box

returned_box = make_circle_box(70, 90, 100)
print(returned_box)
Inside function circle_box

함수 본문에서 계산에 사용하는 지역 변수입니다. 함수의 작업 과정을 설명합니다.

Outside function returned_box

호출이 돌려준 값을 함수 밖에서 새로 저장한 변수입니다. 이후 도형 명령에 사용할 수 있습니다.

함수 밖에서 circle_box를 출력하면 왜 NameError가 나는가?

circle_box는 함수 호출 중 함수 안에서 만들어진 지역 변수이기 때문입니다. 함수 밖에서는 return으로 받은 returned_box를 사용합니다. 이번 수업에서는 global로 내부 변수를 억지로 밖에 노출하지 않습니다.

개별 판정 · 2분

화면 표시와 결과 반환 구분하기

“함수 안에서 이미지를 보여주었다”와 “함수 호출 결과로 이미지를 돌려받았다”가 같은 말인지 판단하고, 반환된 이미지로 할 수 있는 작업 두 가지를 적습니다.

표시와 반환 판정 답안

두 문장은 다릅니다. display(image)는 노트북 화면에 이미지를 보여주고, return image는 호출한 곳에 이미지 객체를 전달합니다. 반환된 이미지는 변수에 저장하고, 다시 표시하고, PNG로 저장하거나 다음 주의 자르기·합성 작업에 전달할 수 있습니다.

38-47분 · 5주차 코드를 create_poster 함수로 묶기

다음 코드는 5주차의 반복, 난수, 조건, Pillow 도형을 하나의 함수로 묶은 완전한 예제입니다. 한 번에 모든 줄을 외우지 않습니다. 함수 이름, 다섯 입력, 고정 규칙, 반복 생성, 반환 결과의 다섯 묶음으로 읽습니다.

from PIL import Image, ImageDraw
from IPython.display import display
import random

def create_poster(
    seed_number,
    shape_count,
    medium_threshold,
    large_threshold,
    palette,
):
    canvas_width = 600
    canvas_height = 600
    min_size = 20
    max_size = 80
    margin = 40

    background_color = palette[0]
    primary_color = palette[1]
    secondary_color = palette[2]
    accent_color = palette[3]
    outline_color = palette[4]
    base_palette = [primary_color, secondary_color, accent_color]

    random.seed(seed_number)
    image = Image.new(
        "RGB",
        (canvas_width, canvas_height),
        background_color,
    )
    draw = ImageDraw.Draw(image)

    for shape_number in range(shape_count):
        size = random.randint(min_size, max_size)
        x = random.randint(
            margin,
            canvas_width - margin - size,
        )
        y = random.randint(
            margin,
            canvas_height - margin - size,
        )
        base_color = random.choice(base_palette)

        if size >= large_threshold:
            draw.rectangle(
                (x, y, x + size, y + size),
                fill=accent_color,
                outline=outline_color,
                width=3,
            )
        elif size >= medium_threshold:
            draw.ellipse(
                (x, y, x + size, y + size),
                fill=base_color,
            )
        else:
            draw.ellipse(
                (x, y, x + size, y + size),
                fill=background_color,
                outline=base_color,
                width=4,
            )

    return image

calm_palette = [
    (235, 241, 250),
    (48, 112, 166),
    (92, 150, 118),
    (230, 83, 72),
    (35, 42, 55),
]

poster_a = create_poster(
    seed_number=73,
    shape_count=56,
    medium_threshold=42,
    large_threshold=64,
    palette=calm_palette,
)

display(poster_a)
poster_a.save("week06_poster_a.png")
create_poster 함수에서 바꿀 수 있는 입력과 고정된 규칙
구분설계 이유
매개변수시드, 도형 수, 중간 기준, 큰 기준, 팔레트호출마다 의미 있는 시각적 변화를 만들 수 있음
함수 안 고정값600 × 600 캔버스, 크기 20~80, 여백 40모든 변주가 같은 형식과 안전 범위를 공유함
공통 절차난수 선택, 반복, 세 조건 분기, 도형 그리기결과가 달라도 같은 생성 시스템으로 보이게 함
반환값완성된 image호출 뒤 표시·비교·저장할 수 있음

모든 숫자를 매개변수로 만들 필요는 없습니다. 캔버스 크기와 안전 여백까지 호출마다 바꾸게 하면 비교 기준이 흐려지고 좌표 오류가 늘어날 수 있습니다. 제작자가 자주 조절할 요소만 입력으로 열고, 시스템의 정체성과 안전을 지키는 값은 함수 안에 고정합니다.

같은 함수를 다른 인자로 호출해 세 변주 만들기

다음 두 호출은 위의 함수 정의와 calm_palette를 실행한 뒤 이어서 실행합니다. 함수 본문은 수정하지 않고 호출값만 바꿉니다.

bold_palette = [
    (247, 239, 216),
    (56, 90, 124),
    (183, 94, 120),
    (229, 168, 57),
    (32, 43, 56),
]

soft_palette = [
    (241, 234, 246),
    (98, 81, 139),
    (49, 142, 136),
    (233, 130, 69),
    (48, 42, 60),
]

poster_b = create_poster(
    seed_number=91,
    shape_count=72,
    medium_threshold=38,
    large_threshold=60,
    palette=bold_palette,
)

poster_c = create_poster(
    seed_number=127,
    shape_count=48,
    medium_threshold=48,
    large_threshold=68,
    palette=soft_palette,
)

display(poster_b)
display(poster_c)
poster_b.save("week06_poster_b.png")
poster_c.save("week06_poster_c.png")
같은 생성 함수에 서로 다른 시드, 도형 수, 조건 기준, 팔레트를 전달해 만든 파란색 계열, 노란색 계열, 보라색 계열의 포스터 세 장과 각 입력 조절 상태를 나타내는 표시
수업용 개념도. 세 패널은 같은 생성 함수를 공유하지만 시드, 밀도, 두 조건 기준, 팔레트가 다릅니다. 아래의 점·막대·경계 표시는 각 호출에 전달된 입력 조합이 다름을 나타냅니다.

한 함수의 정체성은 유지되고 호출의 인자가 변주를 만든다

세 결과는 모두 600 × 600 캔버스, 40픽셀 여백, 20~80 크기 범위, 같은 세 조건 분기, 같은 Pillow 도형 명령을 사용합니다. 달라진 것은 함수의 입력입니다. 따라서 세 이미지는 서로 다르지만 하나의 규칙을 공유하는 시리즈로 읽힙니다.

같은 입력은 같은 결과를 다시 만든다

random.seed(seed_number)가 함수 안에서 각 호출의 시작에 실행되므로, 같은 인자 조합을 다시 전달하면 같은 난수 선택 순서를 얻습니다.

poster_a_again = create_poster(
    seed_number=73,
    shape_count=56,
    medium_threshold=42,
    large_threshold=64,
    palette=calm_palette,
)

same_result = poster_a.tobytes() == poster_a_again.tobytes()
print("같은 입력의 결과가 같은가?", same_result)
OUTPUT

같은 입력의 결과가 같은가? True

tobytes()는 자동 검사에서 두 이미지의 픽셀 데이터를 비교하기 위해 사용합니다. 학생이 이 메서드를 외울 필요는 없습니다. 기억할 핵심은 같은 함수에 같은 입력을 전달하면 같은 결과를 다시 확인할 수 있다는 점입니다.

시드를 함수 밖에서 한 번만 설정하면 왜 호출 결과가 달라질 수 있는가?

첫 호출이 난수 값을 사용한 뒤 난수 선택 위치가 앞으로 이동하기 때문입니다. 두 번째 호출은 이어진 위치에서 선택을 시작합니다. 각 포스터를 같은 입력으로 독립적으로 재현하려면 함수 안에서 이미지 생성 전에 random.seed(seed_number)를 실행합니다.

이미지 생성 함수의 대표 오류

전체 생성기에서 확인할 오류와 원인
증상가능한 원인수정 위치
필수 인자가 없다는 TypeError호출에서 다섯 입력 중 하나를 생략호출문의 키워드 이름과 값 확인
NoneType 관련 오류함수 마지막의 return image 누락함수 본문의 들여쓰기 안 마지막 줄 확인
두 호출이 예상과 다르게 같음새 인자를 작성했지만 호출 셀을 다시 실행하지 않음수정한 호출 셀 재실행
같은 입력인데 결과가 달라짐random.seed(seed_number)가 함수 밖에 있음함수 안에서 이미지 생성 전에 시드 설정
IndexError팔레트에 다섯 역할이 모두 없음배경·주조·보조·강조·윤곽 순서로 다섯 RGB 확인
도형이 화면 밖으로 잘림x·y의 최대 범위에서 size를 빼지 않음난수 좌표 두 줄의 - margin - size 확인

함수 오류는 정의와 호출을 구분해 고친다

모든 호출에서 같은 오류가 나면 함수 정의의 공통 절차를 먼저 확인합니다. 특정 호출에서만 오류가 나면 그 호출의 인자 수, 이름, 범위, 팔레트 구조를 확인합니다. 정의와 호출을 동시에 여러 곳 수정하면 원인을 구분하기 어려워집니다.

47-50분 · 3교시 연결: 세 변주 이미지 생성기

3교시는 빈 화면에서 긴 함수를 외워 작성하는 시간이 아닙니다. 제공된 create_poster() 템플릿에서 정해진 빈칸을 완성하고, 서로 다른 입력 조합 세 개를 설계해 하나의 생성 시스템을 증명합니다.

3교시 고정 미션 계약
항목필수 완료 조건검사 목적
함수 정의create_poster(seed_number, shape_count, medium_threshold, large_threshold, palette)다섯 입력 자리가 유지되는지 확인
함수 결과600 × 600 RGB 이미지를 return image로 전달화면 출력이 아니라 값 반환을 확인
세 번 호출A·B·C에서 서로 다른 매개변수 조합 사용한 함수가 여러 변주를 만드는지 확인
재현 검사A와 같은 입력을 다시 호출해 같은 픽셀 결과 확인시드가 함수 안에서 작동하는지 확인
비교 이미지세 결과를 한 장에 배치한 3안 비교 PNG 생성입력 변화와 화면 변화를 함께 비교
귀가 조건자동 검사 PASS와 `.ipynb + .png` 제출남은 시간과 관계없이 완료를 증명

자동 검사는 디자인 취향을 평가하지 않는다

검사 대상은 함수 정의, 입력 연결, 안전한 범위, 반환 이미지, 세 호출의 차이, 같은 입력의 재현, PNG 저장입니다. 특정 팔레트가 더 아름다운지 또는 어느 배치가 더 좋은지는 자동 검사와 귀가 조건에 포함하지 않습니다.

3교시 사전 설계 · 2분

A·B·C에서 바꿀 입력 정하기

A는 기준안, B는 밀도가 높은 안, C는 큰 도형이 드문 안으로 설정합니다. 각 안에서 시드, 도형 수, 중간 기준, 큰 기준, 팔레트 가운데 무엇을 바꿀지 표에 적습니다.

세 변주 설계의 기준 예시

A는 시드 73과 도형 수 56, B는 시드 91과 도형 수 72로 밀도를 높일 수 있습니다. C는 큰 기준을 68처럼 높여 큰 사각형이 나타나는 범위를 줄이고 새로운 팔레트를 사용할 수 있습니다. 각 안의 숫자는 달라도 작은·중간·큰 구간과 안전한 좌표 범위는 유지해야 합니다.

2교시 핵심 문장

매개변수는 함수가 받을 입력의 자리이고, 인자는 호출할 때 전달하는 실제 값이며, return은 함수가 만든 결과를 호출한 곳으로 돌려줍니다.

수업 후 개별 복습

이번 시간에 다루지 않는 함수 문법

기본값 매개변수, *args, **kwargs, 람다 함수, 재귀, 데코레이터, 클래스, global, nonlocal은 이번 기본 수업에서 사용하지 않습니다. 3교시 미션에는 다섯 개의 일반 매개변수, 키워드 인자, 지역 변수, 하나의 return image만 필요합니다.

50-60분 · 한 함수로 세 가지 통제 실험하기

확장 시간에는 함수 본문을 수정하지 않습니다. 기준 호출 A를 복사한 뒤 한 번에 입력 하나만 바꾸어 화면 변화의 원인을 분리합니다.

50-60분 확장 운영
시간변경할 입력관찰할 화면 변화
50-53분시드만 73에서 91로 변경같은 밀도와 규칙에서 배치가 달라지는지 확인
53-56분도형 수만 56에서 72로 변경밀도와 겹침이 증가하는지 확인
56-59분큰 기준만 64에서 70으로 변경강조 사각형 수가 줄어드는지 확인
59-60분세 결과의 차이를 입력과 연결“어떤 입력이 무엇을 바꾸었다” 문장 세 개

짧은 무작위 실행에서는 경향과 실제 개수가 정확히 일치하지 않을 수 있습니다. 예를 들어 큰 기준을 높이면 큰 도형이 나올 수 있는 크기 구간은 줄어들지만, 특정 시드의 실제 사각형 수가 매번 같은 비율로 줄어든다고 보장되지는 않습니다.

시드와 도형 수를 동시에 바꾸면 원인을 설명하기 어려운 이유

배치와 밀도가 함께 달라져 어느 입력이 특정 차이를 만들었는지 분리하기 어렵기 때문입니다. 입력과 결과의 관계를 학습할 때에는 하나만 바꾸고 나머지를 유지합니다. 최종 작품에서는 관계를 이해한 뒤 여러 입력을 함께 설계할 수 있습니다.

참고 자료