색상과 크기 규칙에 따라 원 24개 배치하기
- 형식
- 목표 달성형 개인 실습
- 최대 시간
- 50분
- 완료 판정
- 자동 검사 + 두 파일 제출
- 제출물
- .ipynb + .png
실습 결과물
선택한 네 가지 색상으로 원 24개를 4행 6열로 배치한 PNG 이미지 한 장을 만듭니다. 팔레트의 순서에 따라 위쪽 행부터 색상을 지정하고, 각 행에서는 오른쪽으로 갈수록 원의 크기가 증가하도록 설정합니다. 이처럼 색상과 크기가 일정한 규칙에 따라 반복되는 이미지를 이번 수업에서는 리듬 그리드라고 부릅니다.
기본 완성 목표: 색상 네 가지, 열 여섯 개, 원 24개
- 기준 팔레트의 RGB 튜플을 두 개 이상 수정하고, 서로 다른 색상을 최소 세 가지 사용합니다.
columns = 6으로 설정하여 한 행에 원 여섯 개를 배치합니다.size_step을 4~10 사이의 정수로 설정하여, 오른쪽 열로 한 칸 이동할 때마다 원의 크기가 지정한 값만큼 증가하도록 합니다.- 1000 × 760픽셀 캔버스 안에 모든 원이 표시되며, 각 행의 첫 번째 원의 크기가 동일한지 확인합니다.
- 최종 PNG 이미지와 동일한 이미지를 다시 생성할 수 있는 노트북을 제출합니다. 노트북에는 실행 결과를 포함합니다.
기본 목표는 팔레트의 항목 수를 네 개로 유지하여 4행 6열 이미지를 완성하는 것입니다. 선택에 따라 항목 수를 다섯 개 또는 여섯 개로 늘릴 수 있습니다. 이 경우 각각 5행 6열의 원 30개 또는 6행 6열의 원 36개를 배치합니다. 열 수는 모두 6으로 유지합니다.
size_step = 6으로 설정했습니다. 각 행에서 왼쪽부터 원의 크기는 44·50·56·62·68·74픽셀입니다. 색상과 크기 증가량은 완료 조건에 맞게 직접 설정합니다. 아래쪽 여백도 최종 이미지의 일부입니다.기준 격자와 완성 목표 비교
| 항목 | 초기 실행 결과 | 완성 목표 |
|---|---|---|
| 팔레트 | 제공된 색상 네 가지 | 네 항목 중 두 개 이상의 RGB 값을 수정한 팔레트 |
| 행과 열 | 4행 × 5열 | 4행 × 6열 |
| 원의 개수 | 20개 | 24개 |
| 열별 크기 증가량 | size_step = 0, 모든 원의 크기가 같음 | size_step은 4~10 사이의 정수, 오른쪽으로 갈수록 원이 커짐 |
| 결과물 | 템플릿의 기준 이미지 | 최종 설정이 반영된 PNG 이미지와 실행 가능한 노트북 |
기준 격자를 실행하여 코드가 정상적으로 동작하는지 확인합니다. 원 20개가 표시되면 팔레트의 RGB 값을 수정하고, 열 수를 6으로 늘린 뒤, 크기 증가량을 설정합니다.
학습 내용과 실습의 연결
| 학습 내용 | 실습 적용 방법 | 결과 확인 기준 |
|---|---|---|
| 3주차: RGB와 Pillow 도형 | palette 안의 (R, G, B) 수정 | 선택한 색상이 원에 적용됨 |
| 1교시: for와 range() | columns = 6으로 안쪽 반복 횟수 설정 | 각 행의 원이 다섯 개에서 여섯 개로 늘어남 |
| 2교시: 리스트와 인덱스 | rows = len(palette), palette[row]의 역할 확인 | 리스트의 항목 수가 행 수를 결정하고, 항목 순서에 따라 각 행의 색상이 정해짐 |
| 2교시: 중첩 반복과 좌표 | 바깥 반복의 row와 안쪽 반복의 column 값 변화 확인 | 한 행의 여섯 칸에 원을 그린 뒤 다음 행의 첫 번째 칸부터 그리기를 반복함 |
| 1·2교시: 크기 변화와 변수 | 44 + column * size_step의 결과 예측 | 각 행에서 오른쪽으로 갈수록 원이 커지고, 다음 행의 첫 번째 원은 다시 44픽셀 크기로 그려짐 |
| 3주차: 저장과 재실행 | image.save(output_filename) 실행 | 저장된 PNG와 노트북의 최종 이미지가 일치함 |
2교시에서 학습한 리스트와 중첩 반복을 제공된 템플릿에 적용합니다. 템플릿에는 반복문과 좌표 계산 코드가 포함되어 있습니다. 팔레트 수정 → 열과 크기 설정 → 결과 비교 → 저장과 자동 검사 순서로 진행하며, 설정값의 변경이 이미지에 미치는 영향을 확인합니다.
실습 과정
- STEP 0기준 격자준비와 기준 결과 확인
- STEP 1제출 정보학번, 이름, 리듬 의도
- STEP 2팔레트RGB 색상 두 개 이상 변경
- STEP 3리듬6열과 크기 변화 설정
- STEP 4PNG 저장최종 이미지 저장
- STEP 5검사와 제출검사 통과 확인 및 파일 제출
완료 기준
- 노트북 파일명
week04_학번_이름.ipynb형식으로 변경했습니다. - 제출 정보학번, 이름 또는 별명, 색상과 크기의 변화 규칙, PNG 파일명을 작성했습니다.
- 색상 리스트4~6개의 RGB 튜플로 구성하고, 서로 다른 색상을 최소 세 가지 사용했습니다.
- 팔레트 수정기준 팔레트의 색상 리스트에서 최소 두 항목의 RGB 값을 변경했습니다.
- 원의 개수
columns = 6으로 설정했습니다. 팔레트의 항목 수가 4·5·6개이면 원의 개수는 각각 24·30·36개입니다. - 두 속성 변화행별로 팔레트의 색상을 적용하고, 오른쪽 열로 한 칸 이동할 때마다 원의 크기가 4~10픽셀씩 증가하도록 설정했습니다.
- 전체 재실행새 세션에서 모두 실행한 뒤, 완료 문구와 최종 설정이 반영된 PNG를 확인했습니다.
- 두 파일 제출실행 결과가 포함된
.ipynb와 최종.png를 제출했습니다.
자동 검사의 rows * columns >= 20은 원의 최소 개수 조건입니다. 팔레트 항목 수 4~6개와 열 수 6이라는 조건을 함께 충족하면, 완성 이미지의 원 개수는 24·30·36개 중 하나입니다.
자동 검사의 확인 범위
검사 셀은 제출 정보, RGB 값의 범위, 팔레트 변경 수, 행과 열의 개수, 크기 변화, PNG와 최종 이미지의 일치 여부, 전체 실행 순서를 확인합니다. 색상 조합이나 시각적 표현의 우열은 판정하지 않습니다.
완료와 귀가
자동 검사를 통과하고 두 파일의 제출을 확인하면 즉시 귀가할 수 있습니다. 공통 안내가 끝나면 각자의 속도로 실습을 진행합니다. 작업 속도와 남은 수업 시간은 평가에 반영하지 않습니다. 수정 횟수와 관계없이 동일한 완료 기준을 적용합니다.
실습 노트북 준비
페이지 상단의 Colab에서 시작 버튼으로 실습 템플릿을 엽니다. 템플릿에는 팔레트 미리보기, 중첩 반복, PNG 저장, 자동 검사 셀이 포함되어 있습니다. EDIT로 표시된 값만 수정합니다.
- 템플릿을 직접 열었거나 업로드했다면 파일 → Drive에 사본 저장을 선택합니다.
- 상단의 파일명을 선택하여
week04_학번_이름.ipynb로 변경합니다. EDIT로 표시된 값만 수정합니다.DO NOT EDIT영역과 FINAL CHECK 셀은 수정하지 않습니다.
노트북이 Colab에서 바로 열리지 않을 때
페이지 상단의 실습 노트북 받기 버튼으로 파일을 다운로드합니다. Colab 첫 화면의 업로드 탭 또는 열린 노트북의 파일 → 노트 업로드에서 다운로드한 .ipynb 파일을 선택합니다.
기준 격자 실행
초기 설정을 유지한 상태에서 노트북의 첫 번째 셀부터 STEP 3 격자 셀까지 순서대로 실행합니다. 같은 크기의 원 20개가 4행 5열로 표시되면 기본 동작이 정상임을 확인할 수 있습니다. 완성 목표와 비교하여 수정할 색상, 열 수, 크기 증가량을 확인합니다. FINAL CHECK는 최종 설정을 적용하고 이미지를 저장한 뒤 실행합니다.
팔레트 미리보기의 네 칸과 4행 5열의 원 20개가 모두 표시되는지 확인한 뒤 설정값을 수정합니다.
NameError가 발생하거나 격자가 표시되지 않는 경우
palette 또는 image가 정의되지 않았다는 메시지가 표시되면, 해당 변수를 정의한 셀을 실행했는지와 변수 이름의 철자가 정확한지 확인합니다. 첫 번째 준비 셀부터 순서대로 다시 실행합니다.
제출 정보
제출 정보 코드 셀에서 = 오른쪽 따옴표 안의 문자열을 본인의 정보로 수정합니다. 변수 이름, 등호, 따옴표는 유지합니다.
student_id = "20260000"
student_name = "김민지"
rhythm_intent = "각 행에 팔레트의 색상을 순서대로 적용하고, 오른쪽 열로 한 칸 이동할 때마다 원의 크기를 6픽셀씩 증가시킨다."
output_filename = "week04_20260000_김민지.png"| 변수 | 작성 내용 | 주의할 점 |
|---|---|---|
student_id | 자신의 학번 | 숫자만 있더라도 따옴표 안에 작성 |
student_name | 이름 또는 제출 확인이 가능한 별명 | 노트북과 PNG의 파일명에 동일하게 표기 |
rhythm_intent | 색상 순서, 크기가 증가하는 방향과 증가량 | 최종 이미지의 변화 규칙을 설명하는 15자 이상의 문장 |
output_filename | week04_학번_이름.png | 입력한 학번과 이름을 파일명에 정확히 반영 |
파일명 검사에 실패한 경우
student_id가 20260000이고 student_name이 김민지라면 PNG 파일명은 정확히 week04_20260000_김민지.png여야 합니다. 공백, 하이픈, 괄호를 추가하지 않습니다.
rhythm_intent에는 적용할 색상과 크기의 변화 규칙을 작성합니다. 이후 팔레트나 size_step을 변경하면, 설명도 최종 이미지와 일치하도록 수정한 뒤 노트북 전체를 다시 실행합니다.
팔레트 수정
팔레트 셀에는 RGB 튜플 네 개로 구성된 리스트가 있습니다. 먼저 두 항목의 RGB 값을 수정한 뒤 셀을 실행하여 팔레트 미리보기를 확인합니다. 각 튜플의 R, G, B 값은 모두 0~255 범위의 정수여야 합니다. 아래 예시에서는 기준 팔레트의 첫 번째와 두 번째 색상을 변경했습니다.
# EDIT: RGB 튜플 두 개 이상을 수정합니다.
palette = [
(42, 71, 92),
(126, 155, 133),
(211, 155, 42),
(201, 111, 93),
]- 리스트는 RGB 튜플 4~6개로 구성합니다.
- 서로 다른 색상을 최소 세 가지 사용하고, 도형에는 배경과 구분되는 색상을 지정합니다.
- 기준 팔레트와 비교했을 때 최소 두 항목의 RGB 값이 달라야 합니다.
- RGB 값을 수정할 때마다 셀을 다시 실행하여 미리보기에서 변화를 확인합니다.
셀 아래에 출력된 현재 변경한 팔레트 색상의 수가 2개 이상인지 확인합니다. 미리보기에서는 서로 다른 색상이 세 가지 이상 표시되는지 확인합니다.
리스트 또는 RGB 검사에 실패한 경우
리스트 전체를 대괄호 [ ]로, 각 RGB 튜플을 소괄호 ( )로 묶었는지 확인합니다. 각 튜플에는 쉼표로 구분한 정수 세 개를 입력합니다. 모든 값은 0~255 범위여야 하며, 숫자에 따옴표를 붙이지 않습니다.
변경한 색상 수가 0개 또는 1개로 표시되는 경우
변경한 색상 수는 기준 팔레트와 현재 팔레트의 같은 인덱스에 있는 RGB 값을 비교하여 계산합니다. 기준 팔레트의 두 항목 이상에서 RGB 값을 변경합니다. 서로 다른 두 색상의 순서를 바꾸어도 변경으로 계산되지만, 처음에는 RGB 값을 직접 조정하여 값과 색상의 관계를 확인합니다.
리듬 그리드 완성
격자 설정 셀에서는 columns와 size_step의 값을 수정합니다. columns를 6으로 설정하면 각 행의 원이 다섯 개에서 여섯 개로 늘어납니다. size_step을 4~10 사이의 정수로 설정하면, 오른쪽 열로 한 칸 이동할 때마다 원의 크기가 지정한 값만큼 증가합니다.
# EDIT: 오른쪽 숫자만 수정합니다.
columns = 6
size_step = 6
# 행 수는 팔레트의 항목 수로 자동 계산합니다.
rows = len(palette)팔레트의 항목이 네 개이면 rows는 4이고, 열 수는 6이므로 원의 개수는 rows * columns = 4 * 6 = 24입니다. 따라서 도형이 20개 이상이어야 한다는 조건을 충족합니다. 아래 중첩 반복 코드는 유지하고, 위의 두 설정값이 실행 결과에 미치는 영향을 확인합니다.
for row in range(rows):
color = palette[row]
for column in range(columns):
x = start_x + column * gap_x
y = start_y + row * gap_y
size = base_size + column * size_step
draw.ellipse((x, y, x + size, y + size), fill=color)| 코드 | 코드의 역할 | 이미지에서 확인할 결과 |
|---|---|---|
palette[row] | 현재 행에 적용할 색상 선택 | 팔레트 순서대로 각 행에 색상이 적용됨 |
columns = 6 | 한 행에 배치할 원의 개수 설정 | 각 행에 원 여섯 개가 배치됨 |
column * gap_x | 열 번호에 따른 가로 위치 계산 | 열마다 원을 그리는 시작 x좌표가 일정한 간격으로 증가함 |
row * gap_y | 행 번호에 따른 세로 위치 계산 | 행마다 원을 그리는 시작 y좌표가 일정한 간격으로 증가함 |
column * size_step | 기본 크기에 더할 증가량 계산 | 오른쪽으로 갈수록 원이 커짐 |
기본 목표는 4행 6열에 원 24개를 배치하는 것입니다. 팔레트 항목을 다섯 개 또는 여섯 개로 구성한 경우 원의 개수는 각각 30개 또는 36개입니다. 각 행에서 오른쪽으로 갈수록 원의 크기가 설정한 4~10픽셀씩 증가하고, 다음 행의 첫 번째 원은 다시 44픽셀 크기로 표시되는지 확인합니다.
설정값과 실행 결과의 관계 확인
완성한 이미지와 코드를 근거로 아래 세 질문에 답합니다. 학습 내용을 스스로 점검하는 활동으로, 답변을 별도로 제출할 필요는 없습니다.
- 변경한
palette의 두 항목은 이미지의 어느 행에 적용되는가? - 완성한 이미지의 원 개수가
len(palette) * 6인 이유는 무엇인가? - 설정한
size_step을 적용했을 때, 첫 번째 열과 마지막 열의 원 크기는 각각 몇 픽셀인가?
팔레트 항목이 네 개이고 size_step = 6인 경우
palette[0]과 palette[1]을 변경하면 첫 번째와 두 번째 행의 색상이 달라집니다. 원의 개수는 4 * 6 = 24개입니다. 첫 번째 열의 원 크기는 44픽셀이고, 마지막 열은 44 + 5 * 6 = 74픽셀입니다. 다음 행에서는 column이 다시 0부터 시작하므로 첫 번째 원의 크기도 44픽셀입니다.
모든 원의 크기가 같은 경우
size_step이 0이면 모든 원의 크기가 같습니다. 값을 4~10 사이의 정수로 변경한 뒤 격자 생성 셀을 다시 실행합니다. size_step = "6"처럼 숫자에 따옴표를 붙이지 않습니다.
중첩 반복 또는 원의 개수 검사에 실패한 경우
columns가 6인지, 팔레트의 항목 수가 4~6개인지 확인하고 조건에 맞게 수정합니다. for row, for column, drawn_shape_count가 포함된 DO NOT EDIT 영역은 들여쓰기를 포함하여 그대로 유지합니다.
PNG 저장
최종 이미지의 색상과 크기 변화를 확인한 뒤 저장 셀을 실행합니다. 저장 코드는 수정하지 않습니다.
image.save(output_filename)output_filename에는 제출 정보 셀에서 작성한 week04_학번_이름.png 형식의 파일명이 저장되어 있습니다. 저장 셀은 PNG 파일을 다시 불러와 출력합니다. 이 출력 결과를 격자 생성 셀의 최종 이미지와 비교하여 두 이미지가 일치하는지 확인합니다.
설정 변경 후 이미지 재생성과 저장
색상이나 크기를 수정한 뒤 격자 생성 셀만 실행하면 노트북의 출력만 갱신되고, 저장된 PNG 파일에는 이전 결과가 남을 수 있습니다. 최종 수정 후에는 격자 생성 셀과 저장 셀을 순서대로 실행합니다.
PNG가 파일 목록에 표시되지 않는 경우
저장 셀에 오류 메시지가 있는지 확인합니다. Colab 왼쪽의 폴더 아이콘을 선택하고 파일 목록을 새로고침합니다. 파일이 계속 표시되지 않으면 output_filename에 입력한 문자열의 따옴표와 .png 확장자를 확인한 뒤 저장 셀을 다시 실행합니다.
자동 검사 통과 확인
- 런타임 → 세션 다시 시작을 선택합니다.
- 런타임 → 모두 실행을 한 번 선택합니다.
- 마지막 FINAL CHECK 셀의 실행이 끝날 때까지 기다립니다.
- 오류 없이 실행되었으며, 아래 완료 문구가 모두 출력되었는지 확인합니다.
✅ 제출 정보와 리듬 의도 검사 통과
✅ 색상 리스트와 팔레트 변경 검사 통과
✅ 중첩 반복과 20개 이상 도형 검사 통과
✅ 색과 크기의 두 속성 변화 검사 통과
✅ PNG 저장과 새 런타임 전체 실행 검사 통과
🎉 WEEK 04 RHYTHM GRID COMPLETE
FINAL CHECK 셀의 사용 범위
검사 셀에는 아직 학습하지 않은 조건 검사와 파일 비교 코드가 포함되어 있습니다. 이 코드를 직접 작성하거나 해석하는 것은 이번 주 학습 범위에 포함되지 않습니다. 오류 메시지의 마지막에 표시되는 한국어 안내를 읽고, 안내에 따라 EDIT 값만 수정합니다. 검사 셀을 삭제하거나 내용을 수정하면 실습 완료로 인정하지 않습니다.
저장된 PNG와 최종 이미지가 일치하지 않는 경우
image에 저장된 이미지와 PNG 파일의 픽셀 값이 다르다는 뜻입니다. 격자 생성 셀과 저장 셀을 순서대로 실행합니다. 이후 세션을 다시 시작하고 모두 실행을 선택하여 최종 검사 결과를 확인합니다.
새 런타임 전체 실행 검사에 실패한 경우
셀의 실행 순서가 검사 조건과 일치하지 않는 상태입니다. 수정한 노트북을 저장한 뒤 세션을 다시 시작하고 모두 실행을 한 번 선택합니다. 전체 실행이 끝날 때까지 개별 셀의 실행 버튼을 누르지 않습니다.
두 파일 제출
- 마지막 셀에 WEEK 04 RHYTHM GRID COMPLETE가 출력되었는지 확인합니다.
- 파일 → 다운로드 → .ipynb 다운로드를 선택하여 실행 결과가 포함된 노트북을 다운로드합니다.
- Colab 왼쪽 파일 목록에서
week04_학번_이름.png를 찾아 다운로드합니다. - 제출함에
.ipynb와.png두 파일을 모두 업로드합니다. - 제출 완료 상태를 확인한 뒤 남은 시간과 관계없이 귀가할 수 있습니다.
완료 판정
자동 검사를 통과하고, 제출함에 실행 결과가 포함된 .ipynb와 최종 .png가 모두 등록되면 실습 완료로 인정합니다. 작업 속도와 남은 수업 시간은 평가에 반영하지 않습니다.
선택 확장
아래 활동은 선택 사항이며, 실습 완료 조건이나 평가 점수에 포함되지 않습니다. 선택 활동을 진행하려면 최종 제출 파일의 사본을 만들어 사용합니다.
- 항목이 네 개인 팔레트에 색상을 한두 개 추가하고, 4행·5행·6행 이미지의 구성을 비교합니다.
size_step을 4, 7, 10으로 각각 설정하여 원의 크기 증가 폭을 비교합니다.- 팔레트의 순서만 변경하여 색상 배치에 따른 시각적 무게 중심의 변화를 비교합니다.
- 다른 팔레트로 이미지를 한 장 더 만듭니다. 제출할 때는 최종 선택한 이미지 한 장과 해당 이미지를 생성하는 노트북을 제출합니다.
참고 자료
- Google Colab 공식 입문 노트북코드 셀 실행, 노트북 저장, 런타임 사용법을 확인할 수 있는 공식 자료
- Python 공식 튜토리얼: Lists대괄호, 순서, 0부터 시작하는 인덱스에 관한 공식 설명
- Python 공식 튜토리얼: for Statements리스트와 정수 범위를 순서대로 반복하는 문장의 공식 설명
- Pillow 공식 문서: ImageDraw타원의 좌표, 채우기 색상, 윤곽선을 지정하는 공식 사용법
- Pillow 공식 문서: Image.save()완성 이미지를 파일로 저장하는 메서드의 공식 설명