Page 4 - 파이썬으로 배우는 컴퓨팅사고 도서 미리보기
P. 4
이 책의 구성
PART 2의 각 장(Chapter)은 본문 > 프로그램 실습(1단계 - 문제 분석 > 2단계 - 알고리즘 설계 > 3 단계 - 코딩 > 4 단
계 - 테스트/디버깅 > Thinking! > 5 단계 - 프로그램 코딩을 위한 관련 학습 > 잠깐! Coding) > Coding? Program-
ming!의 단계적인 학습으로 진행됩니다.
10C H A P T E R
공학(Engineering)
학습 목표 학습목표
각 장에서 학습할 중요 학습 목표를 소개합니다.
? 로봇 청소기에 대하여 이해하고 로봇 청소기의 이동과 귀환 방법에 응용한다. 관련학습
? ISBN 코드를 통한 도서 번호를 검증하는 방법에 대하여 이해하고 응용한다. 각 장에서 추가적으로 학습할 관련 학습을 소개합니다.
관련 학습 ? 문자열 선언 이론
? 문자열의 특정 위치 문자 얻기 학습 목표에 부합되는 필수적인 이론 내용을 설명하며, 관련
? 리스트의 원소 추가, 삭제 예제와 프로그램, 그림 등을 활용하여 내용을 살펴봅니다.
? 서식 문자
? 문자열 관련 예약어와 함수 프로그램
본문의 이론 내용과 연관된 프로그램을 제시합니다.
240 PART 2 파이썬으로 익히는 STEAM 코딩
1단계 - 문제 분석
10.1 ?로봇?청소기의?이동과?귀환하기 제시된 프로그램을 분석하여 함수, 입력, 출력, 변수를
파악합니다.
진공 청소기는 팬을 강하게 회전시켜 호스 속의 공기를 밖으로 뽑아내어 청소기의 내부를
진공 상태로 만드는 것이다. 기계 안의 압력이 줄어들면 흡입력이 생기는데, 대기의 무게 2단계 - 알고리즘 설계
때문에 생기는 바깥쪽의 공기 압력은 기계 안의 공기 압력 보다 높기 때문에 먼지가 공기와 문제 분석을 통한 함수, 입력, 출력 등에 대한 알고리즘을
함께 대기압이 낮은 호스 쪽으로 빨려 들어가게 된다. 자연어로 표현합니다.
로봇 청소기의 청소 이동 모드는 제조 회사마다 조금씩 다른 방식으로 되어 있지만, 보통 3단계 - 코딩
알고리즘 설계를 이용하여 프로그램을 코딩합니다.
자동 모드와 수동 모드로 나누게 된다. 자동 모드는 구석 모드, 자유 모드, 집중 모드 등 미
리 정해진 청소 이동 모드에 따라 자종으로 경로를 정하여 이동하면서 청소를 하며, 수동
모드는 사용자가 임의의 지점을 지정하면 해당 지점을 청소한다.
로봇 청소기는 진공 청소기와 자율 주행하는 로봇이 결합된 청소기이다. 로봇 청소기는 초
음파 센서 등을 이용하여 장애물을 피하도록 되어 있으며, 청소를 시작하면 정해진 청소 이
동 모드프에로그따램라 전p체10-공01간을로빠봇 짐청소없기이의돌이동면과서귀청환하소기한다. 그리고 청소가 모두 끝나면 자동
으로 충전기로 돌아가 충전을 스스로 한다. 키를 누르면 저장된 클CH릭AP순TE서R대10로 경공학로(를Eng이in동ee해ring) 224319
마우스를 클릭한 곳을 순서대로 저장하고, 스페이스
보자. BackSpace 키를 누르면 해당 경로 역순으로 귀환하고, s 키를 누르면 처음 위치에서 마지막 위치
로 최단 거리를 이동하고, r 키를 누르면 마지막 위치에서 처음 위치로 최단 거리로 귀환한다. e 키를 누
르면 저장된?경 ke로y_를s()모 : 두최단지 거운리다로. 마지막 지점으로 이동하기 위해 move_robot(2) 함수 호출
? key_r() : 최단 거리로 처음 지점으로 복귀하기 위해 move_robot(3) 함수 호출
? key_e() : 저장된 모든 지점을 지우기 위해 list_clear() 함수 호출
? SP(스페이스) 키 : key_SP() 콜백 함수 호출
1 문제 분석? BS(백스페이스) 키 : key_BS() 콜백 함수 호출
터틀입력스크린?의 s 키지 :점 ke들y_s을() 콜연백속 함적수으 호로출 클릭하면 해당 지점들을 순서대로 저장한다. 키보드의
? r 키 : key_r() 콜백 함수 호출
스페이스 키?, eB 키ac :k kSepy_aec()e 콜키백, 함s수키 호,출r 키, e 키를 누르면 해당 키에 대한 이동이나 복귀 동작
등을 실행한?다 청.소기 이미지(robotic_vacuum.gif)
출력
? 청소기의 이동과 복귀 동작
? rmoobvoet_frno b: o청t(소) :기 인 이수미 값지에(r o따b라ot i저c_장va된cu 모um든.g 지if)점에 대해 다음 동작을 수행함
? 0rx :, 순ry서 : 대클릭로한 이 x동, ,y 1 좌 : 표역 순저서장대로 복귀, 2 : 최단거리 이동, 3 : 최단거리 복귀
변수 ? mcliocvke_dc(n) t: :클 클릭릭된한 지 횟점수들을 저장함
함수 ? tli s: t터_c틀lear() : 저장된 모든 지점을 지움
? ske :y 터_S틀P( 스) :크 저린장된 지점들의 순서대로 이동하기 위해 move_robot(0) 함수 호출
? key_BS() : 저장된 지점들의 역순으로 복귀하기 위해 move_robot(1) 함수 호출
2 ?알고리즘?설계
문제 분석에서의 함수와 입력, 출력에 대한 알고리즘을 자연어로 표현하면 다음과 같다.
action : 0(이동), 1(복귀), 반환 없음
인수
2(최단이동), 3(최단복귀)
move_robot() 1. 이전에 표시한 터틀 흔적을 모두 지움
2. 만약 action==0이면
2.1 0부터 move_cnt-1까지 반복하면서 rx[i], ry[i]로 이동
그렇지 않으면 만약 action==1이면
2.1 move_cnt-1부터 0까지 반복하면서 rx[i], ry[i]로 이동
그렇지 않으면 만약 action==2면
2.1 rx[move_cnt-1], ry[move_cnt-1]로 이동
그렇지 않으면 만약 action==3이면
2.1 rx[0], ry[0]로 이동
3. 터틀 펜을 올림
clicked() x : x 좌표 반환 없음
인수 CHAPTER 10 공학(Engineering)
243
y : y 좌표
1. move_cnt의 값을 1 증가
2. rx에 x 좌표 값을 추가
3. ry에 y 좌표 값을 추가
3 ?코딩
알고리즘 설계를 이용하여 파이썬 프로그램을 코딩하면 다음과 같다.
1 import turtle as t
2
3 robot_fn = “robotic_vacuum.gif”
4 rx = []
5 ry = []
6 move_cnt = 0
7
8 def move_robot(action):
9 t.clear()
10 if action == 0:
11 for i in range(move_cnt):
12 t.goto(rx[i], ry[i])
13 elif action == 1:
14 for i in range(move_cnt-1, -1, -1):
15 t.goto(rx[i], ry[i])
16 elif action == 2:
17 t.goto(rx[move_cnt-1], ry[move_cnt-1])
18 elif action == 3:
19 t.goto(rx[0], ry[0])
20 t.penup()
21