파이썬 문법을 처음 배우면 함수, 반복문, 조건문, 딕셔너리를 각각 따로 외우기 쉽습니다. 하지만 실제 프로그램에서는 여러 문법을 조합해 현재 상태를 읽고 다음 행동을 결정합니다.
농사 과정도 같은 구조를 가집니다. 밭을 갈고 씨앗을 심은 뒤 물을 주며, 작물이 다 자랄 때까지 기다렸다가 수확합니다. 물이 부족하거나 밭이 어두우면 땅과 작물의 상태를 확인해 필요한 행동만 선택해야 합니다.
Codedash의 파이썬농장(Python Farm)은 이런 과정을 블록코딩과 파이썬 코드로 자동화하는 게임형 학습 환경입니다. 이 글에서는 다음 6개 레벨을 따라가며 기초 함수 호출부터 딕셔너리, 중첩 반복, 상태 기반 문제 해결까지 살펴보겠습니다.
| 레벨 | 게임 미션 | 핵심 문법 |
|---|---|---|
| Chapter 1-1 첫 수확 | 밀 5개 수확하기 | 함수 호출과 실행 순서 |
| Chapter 2-5 농부의 기본 | 경작부터 수확까지 자동화하기 | for, while, 함수 조합 |
| Chapter 3-5 기본기-양파농사 | 제한된 물로 양파 25개 키우기 | 땅 상태와 if/else |
| Chapter 4-1 성장 상태 보기 | 잘 익은 토마토 2개만 수확하기 | 딕셔너리 값 읽기 |
| Chapter 6-5 야간작업 | 표지판과 다른 작물 제거하기 | 딕셔너리, 조건문, 중첩 반복 |
| Chapter 8-3 64칸 전설 호박 | 8×8 병합 호박 완성하기 | 2차원 순회와 상태 제어 |
이 글의 코드는 각 레벨을 이해하기 위한 예시 풀이입니다. 같은 목표를 달성하는 다른 코드도 작성할 수 있습니다.
아래 블록 화면 중 일부는 예시 파이썬 코드를 블록코딩 탭에서 자동 변환해 비교한 결과입니다. 레벨 진행 단계에 따라 기본 블록 목록에서 직접 꺼낼 수 있는 블록의 범위는 달라질 수 있습니다.
Chapter 8-3은 최종 미션의 도전 경험을 위해 풀이 코드를 공개하지 않습니다. 완성된 64칸 전설 호박의 수확 직전 화면과 해결해야 할 조건만 소개합니다.
먼저 알아둘 파이썬 핵심 문법
게임 함수와 열거형
방향과 작물 종류를 함수에 전달해 농부의 행동을 실행합니다.
move(Dir.Down)
plant(Res.Tomato)
횟수 반복
같은 행동을 정해진 횟수만큼 실행합니다.
for i in range(5):
harvest()
조건 반복
작물이 준비될 때까지 기다리며 상태를 다시 확인합니다.
while not can_harvest():
wait(1)
if/else
땅이나 작물의 현재 상태에 따라 다른 행동을 선택합니다.
if ground == Ground.Tilled:
water()
else:
wait(1)
딕셔너리
키를 사용해 익은 정도나 표지판 메시지를 읽습니다.
status = get_res_status()
status['ripeness']
중첩 반복
행과 열의 반복을 조합해 넓은 밭을 순회합니다.
for row in range(4):
for column in range(5):
harvest()
move(), plant(), harvest() 같은 함수는 파이썬 내장 함수가 아니라 파이썬농장에서 제공하는 전용 게임 함수입니다. for, while, if/else, 딕셔너리와 들여쓰기는 실제 파이썬 문법입니다.
Chapter 1-1 첫 수확: 이동하고 수확하기
CHAPTER 1 · LEVEL 1
첫 레벨의 목표는 아래쪽 밭으로 이동한 뒤 익은 밀 5개를 수확하는 것입니다. 현재 칸에서 harvest()를 실행하고 다음 칸으로 이동하는 순서를 반복합니다.
블록으로 확인한 풀이
[코드 실행]
├─ [아래쪽 이동]
└─ [5번 반복]
├─ [수확]
└─ [i < 4라면 오른쪽 이동]
파이썬 코드 풀이
move(Dir.Down)
for i in range(5):
harvest()
if i < 4:
move(Dir.Right)
마지막 밀을 수확한 뒤에는 더 이동할 필요가 없으므로 i < 4일 때만 오른쪽으로 이동합니다. 이 레벨에서 함수 호출, 반복 횟수, 실행 순서를 함께 확인할 수 있습니다.
Chapter 2-5 농부의 기본: 경작부터 수확까지
CHAPTER 2 · LEVEL 5
Chapter 2-5에서는 빈 땅 5칸을 갈고 토마토 씨앗을 심은 뒤 물을 줘야 합니다. 작물이 바로 수확 가능한 상태가 되는 것은 아니므로 can_harvest()가 참이 될 때까지 기다린 다음 수확합니다.
블록으로 확인한 풀이
[5칸을 이동하며 반복]
├─ [밭 갈기]
├─ [토마토 심기]
└─ [물 주기]
[5칸을 되돌아가며 반복]
├─ [수확할 수 있을 때까지 대기]
└─ [수확]
파이썬 코드 풀이
move(Dir.Down)
for i in range(5):
till()
plant(Res.Tomato)
water()
if i < 4:
move(Dir.Right)
for i in range(5):
while not can_harvest():
wait(1)
harvest()
if i < 4:
move(Dir.Left)
첫 번째 for문은 각 칸의 작업 순서를 반복하고, 두 번째 for문은 반대 방향으로 이동하며 수확합니다. 안쪽 while문은 작물마다 성장 완료 시점을 확인합니다.
Chapter 3-5 기본기-양파농사: 제한된 물과 if/else
CHAPTER 3 · LEVEL 5
이 레벨은 5×5 밭에 양파 25개를 심고 수확하는 미션입니다. 물은 정확히 20개만 주어지지만, 시작할 때 대각선 5칸은 이미 물을 받은 상태입니다.
이미 젖은 땅에 다시 water()를 호출해도 물은 소비됩니다. 따라서 현재 땅이 Ground.Tilled인지 확인해 마른 칸에만 물을 줘야 25칸 전체를 완성할 수 있습니다. 밭에 있는 잡초도 파종 전에 제거해야 합니다.
블록으로 확인한 풀이
[5개 행을 지그재그로 순회]
├─ [잡초라면 제거]
├─ [ground = 땅 상태]
├─ [마른 경작지라면]
│ ├─ [양파 심기]
│ └─ [물 주기]
└─ [아니면 양파만 심기]
[같은 밭을 되돌아가며 수확]
파이썬 코드 풀이
move(Dir.Down)
for row in range(5):
step = Dir.Right if row % 2 == 0 else Dir.Left
for i in range(5):
if get_res_type() == Res.Weed:
clear()
ground = get_ground_type()
if ground == Ground.Tilled:
plant(Res.Onion)
water()
else:
plant(Res.Onion)
if i < 4:
move(step)
if row < 4:
move(Dir.Down)
for row in range(5):
step = Dir.Left if row % 2 == 0 else Dir.Right
for i in range(5):
while not can_harvest():
wait(1)
harvest()
if i < 4:
move(step)
if row < 4:
move(Dir.Up)
row % 2로 행의 짝수·홀수를 구분해 이동 방향을 바꾸면 넓은 밭을 지그재그로 순회할 수 있습니다. 조건문은 물의 개수와 땅의 상태를 연결해 불필요한 자원 소비를 막습니다.
Chapter 4-1 성장 상태 보기: 딕셔너리 값 읽기
CHAPTER 4 · LEVEL 1
밭에는 토마토 10개가 있지만 실행할 때마다 잘 익은 토마토의 위치가 달라집니다. 이 중 ripeness가 7 이상인 토마토 2개만 수확해야 하며, 덜 익은 토마토를 수확하면 실패합니다.
get_res_status()는 작물 상태를 딕셔너리로 돌려줍니다. 이 딕셔너리에서 ripeness 키의 값을 읽으면 화면의 색만 보고 위치를 외우지 않고 코드로 수확 대상을 결정할 수 있습니다.
ripeness 값을 읽고 7 이상인 토마토만 선택하는 과정을 확인할 수 있습니다.블록으로 확인한 풀이
[2개 행을 지그재그로 순회]
├─ [status = 자원 상태]
├─ [status가 있고 ripeness > 6이면 수확]
└─ [다음 칸으로 이동]
파이썬 코드 풀이
move(Dir.Down)
for row in range(2):
step = Dir.Right if row == 0 else Dir.Left
for i in range(5):
status = get_res_status()
if status and status['ripeness'] > 6:
harvest()
if i < 4:
move(step)
if row < 1:
move(Dir.Down)
딕셔너리는 관련된 여러 상태를 하나의 값으로 전달할 때 유용합니다. 이 레벨에서는 resource_type, growthstatus, ripeness, resource_state 중 필요한 ripeness만 선택해 사용합니다.
Chapter 6-5 야간작업: 작물 솎아내기
CHAPTER 6 · LEVEL 5
야간 밭은 농부 주변을 제외하면 어둡기 때문에 화면만 보고 모든 작물의 위치와 종류를 미리 외울 수 없습니다. 각 행의 표지판에는 남겨야 할 작물 종류와 개수가 실행할 때마다 정해집니다.
표지판의 message를 읽어 목표 작물을 찾고, 현재 칸의 get_res_type() 결과가 목표와 다를 때만 clear()를 실행해야 합니다. 네 개의 행과 각 행의 네 작물을 처리하기 위해 중첩 반복문을 사용합니다.
블록으로 확인한 풀이
[작물 이름과 Res 값을 딕셔너리로 연결]
[4개 행을 반복]
├─ [target = 표지판의 작물]
├─ [작물 칸으로 이동]
├─ [4개 작물을 반복]
│ └─ [target과 다르면 제거]
└─ [다음 행의 표지판으로 이동]
파이썬 코드 풀이
crops = {
'tomato': Res.Tomato,
'onion': Res.Onion,
'bellpepper': Res.Bellpepper,
'wheat': Res.Wheat,
}
move(Dir.Down)
for row in range(4):
target = crops[get_res_status()['message']]
move(Dir.Right)
for i in range(4):
crop = get_res_type()
if crop is not None and crop != target:
clear()
if i < 3:
move(Dir.Right)
if row < 3:
for i in range(4):
move(Dir.Left)
move(Dir.Down)
crops 딕셔너리는 표지판의 문자열과 실제 게임 자원을 연결하는 선택표 역할을 합니다. 하드코딩한 위치나 작물 종류에 의존하지 않고 실행 중 읽은 상태로 행동을 결정한다는 점이 핵심입니다.
Chapter 8-3 64칸 전설 호박: 최종 자동화 미션
CHAPTER 8 · LEVEL 3
최종 레벨은 8×8 밭의 64칸에 호박을 키워 하나의 전설 호박으로 병합하는 미션입니다. 준비된 호박이 빈틈없는 정사각형을 이루면 서로 합쳐지며, 8×8 전체가 정상적으로 성장해야 size 64 호박이 완성됩니다.
개별 호박은 성장 과정에서 썩을 수 있습니다. 썩은 호박은 병합 대상에서 제외되므로 자원 상태를 확인하고 문제가 생긴 칸을 골라 복구해야 합니다. 행과 열을 순회하는 중첩 반복, 성장 대기, 상태 확인, 예외 처리를 모두 조합해야 하는 최종 종합 문제입니다.
size 64 전설 호박이 완성된 모습을 확인할 수 있습니다.이 화면은 완성된 호박을 보여 주기 위해 수확하기 직전에 캡처했습니다. 최종 미션의 탐색과 시행착오를 남겨 두기 위해 블록 구성과 파이썬 풀이 코드는 제공하지 않습니다.
풀이 대신 확인할 도전 조건
- 8×8 밭의 64칸을 빠짐없이 순회해야 합니다.
- 각 칸에 호박을 심고 성장 상태를 확인해야 합니다.
- 썩은 호박은 병합 대상이 아니므로 문제 칸을 찾아 복구해야 합니다.
- 병합된 호박의 상태에서
size가 64인지 확인해야 합니다. - 실제 레벨은 완성된 전설 호박을 수확해야 클리어됩니다.
블록코딩과 파이썬 코드를 함께 보면 좋은 이유
실행 구조가 눈에 보입니다
경작, 파종, 물주기의 순서와 if/else의 두 실행 영역, 행과 열의 중첩 반복을 공간적으로 확인할 수 있습니다.
같은 농사 과정을 실제 문법으로 표현합니다
블록의 반복 구조가 for, while, range()와 들여쓰기로 바뀌는 과정을 비교할 수 있습니다.
문법을 사용할 이유가 생깁니다
반복문은 넓은 밭을 처리하고, 조건문은 물을 아끼며, 딕셔너리는 표지판과 작물 상태를 연결하는 도구가 됩니다.
실행 결과를 즉시 확인합니다
코드를 실행하면 농부의 이동과 작물 상태 변화가 화면에 나타나며 예상과 다르면 수정하고 다시 실행할 수 있습니다.
Codedash는 별도의 파이썬 실행 환경을 설치하지 않고 브라우저에서 실행됩니다. 블록으로 구조를 확인한 뒤 같은 문제를 파이썬 코드로 다시 표현하며 자동화 범위를 단계적으로 넓힐 수 있습니다.
수업에서는 클래스 기능을 활용할 수 있습니다
강사는 Codedash 클래스에서 학생별 현재 레벨과 클리어 진행도를 확인할 수 있습니다. 학생이 레벨을 클리어하기 전에 도움요청을 누르면 현재 코드가 제출되고, 레벨을 클리어하면 최종 코드가 제출됩니다. 강사는 이 코드를 열어보고 실행해 반복문의 이동 경로나 조건문의 상태 비교 중 어느 부분에서 막혔는지 확인하고 지도할 수 있습니다.
5칸 수확 구조를 먼저 설명한 뒤 같은 패턴을 5×5 밭으로 확장하거나, 학생마다 다른 표지판 결과를 읽어 해결한 코드를 비교하는 방식으로 수업을 진행할 수 있습니다.
지금 파이썬 핵심 문법을 농장에서 확인해 보세요
Chapter 1과 Chapter 2의 총 10개 레벨은 로그인이나 결제 없이 시작할 수 있습니다. 이동과 수확에서 출발해 경작, 파종, 물주기, 성장 대기까지 자동화 범위가 단계적으로 넓어집니다.
파이썬농장 Chapter 1 시작하기Chapter 2는 Chapter 1의 5개 레벨을 완료하면 열립니다.
이후 챕터도 바로 건너뛸 수 없고 앞 챕터를 완료해야 열립니다. 개인 이용자가 Chapter 3 이후를 직접 이용하려면 로그인 후 구매하거나 리딤코드로 이용 권한을 받아야 합니다. 직접 구매한 이용 권한은 결제일로부터 365일 동안 사용할 수 있습니다.
자주 묻는 질문
파이썬농장의 함수는 모두 파이썬 내장 함수인가요?
아닙니다. move(), harvest(), plant(), get_res_status() 등은 파이썬농장에서 제공하는 전용 게임 함수입니다. for, while, if/else, 딕셔너리와 같은 문법은 실제 파이썬 문법입니다.
블록코딩만으로 모든 레벨을 풀어야 하나요?
아닙니다. 파이썬농장에서는 블록코딩 탭과 파이선 탭을 전환할 수 있습니다. 블록으로 구조를 먼저 확인하거나 파이썬 코드를 직접 작성할 수 있습니다.
Chapter 3-5에서 모든 칸에 물을 주면 안 되나요?
안 됩니다. 물은 20개뿐이고 이미 물을 받은 칸이 5개 있습니다. 이미 젖은 칸에서 water()를 호출해도 물이 소비되므로 땅 상태를 확인해 마른 20칸에만 물을 줘야 합니다.
Chapter 8-3의 풀이 코드는 왜 없나요?
64칸 전설 호박은 앞에서 익힌 이동, 중첩 반복, 상태 확인, 예외 처리를 조합하는 최종 미션입니다. 완성 목표는 보여 주되 직접 알고리즘을 설계하는 도전 경험을 남기기 위해 풀이 코드는 공개하지 않았습니다.
Chapter 3 이후 레벨도 무료인가요?
아닙니다. 현재 Chapter 1과 Chapter 2는 로그인 없이 무료로 이용할 수 있습니다. 개인 이용자가 Chapter 3 이후 유료 챕터를 직접 이용하려면 로그인과 구매 또는 리딤으로 받은 이용 권한이 필요하며, 앞 챕터도 먼저 완료해야 합니다. 직접 구매한 이용 권한은 결제일로부터 365일 동안 사용할 수 있습니다.