크리스 로피 지음 | 유형목 옮김
옮긴이
유형목
리눅스가 보급되던 초기에 (인터넷이 아니라 PC통신으로 대화를 나누던 때에) 나우콤 리눅스 동호회 알짜리눅스제작팀, 하이텔 리눅스 동호회 대표시샵으로 활동했습니다. 미지리서치(현 윈드리버 코리아)와 엠텍비젼에서 근무한 바 있으며, 현재는 주식회사 인시그널에서 안드로이드 포 팅 강의를 주로 하고 있습니다. 인터넷에서는 AESOP 임베디드 포럼에서 2007년부터 운영진으로 활동하고 있습니다.
코딩 클럽 LV1. 모두를 위한 파이썬 기초 : 저는 코딩도 파이썬도 처음인데요 초판발행 2015년 09월 01일 지은이 크리스 로피 / 옮긴이 유형목 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부 전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124 등록 1999년 6월 24일 제10 – 1779호 / ISBN 978–89–6848-216-8 13000 총괄 배용석 / 책임편집 최현우 / 기획 조희진 / 편집 조경숙 디자인 표지&내지 김미현, 조판 이경숙 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석 / 제작 박성우 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr
Coding Club Level 1 Python Basics by Chris Roffey ©2012 All rights reserved. Korean translation copyright ©2015 by Hanbit Media, Inc. Published in agreement with Cambridge University Press through Danny Hong Agency. 이책의 한국어판 저작권은 대니홍 에이전시를 통한 저작권사와의 독점 계약으로 한빚미디어(주)에 있습니다. 저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전재와 복제를 금합니다.
지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
One factor was the availability of a computer that any child could sa
or get such as for thetheir Raspberry Pi from www.raspberrypi.org . save up for One factor was the availability of a computer that any child couldbirthday, birthday, such as the Raspberry Pi from www.raspberrypi.org .
Introduction
Why was this book written? This book is the fi rst in a series of books for anyone with little or no knowledge of computer programming but who would like to give it a go.
Who is this book for?
One factor was the availability of a computer that any child could save up for or get for their birthday, such as the Raspberry Pi from www.raspberrypi.org .
Introduction
Why was this book written?
This book is the fi rst in a series of books for a programming but who would like to give it a g
Introduction
n? Why was this book writte
of computer with little or no knowledge series of books for anyone This book is the fi rst in a go. ld like to give it a programming but who wou
Who is this book for?
get for their child could save up for or y of a computer that any One factor was the availabilit g . pi.or berry .rasp www berry Pi from birthday, such as the Rasp
Who is this book for?
One factor was the availability of a computer birthday, such as the Raspberry Pi from www
noitcudortnI
?nettirw koob siht saw yhW
retupmoc fo egdelwonk on ro elttil htiw enoyna rof skoob fo se ires a ni tsr fi eht si koob sihT .og a ti evig ot ekil dluow ohw tub gnimmargorp
?rof koob siht si ohW
rieht rof teg ro rof pu evas dluoc dlihc yna taht retupmoc a fo y tilibaliava eht saw rotcaf enO . gro.ipyrrebpsar.www morf iP yrrebpsaR eht sa hcus ,yadhtrib 크리스 로피 지음 | 유형목 옮김
옮긴이의 말 프로그래머라는 이름으로 살아간 지 어느새 20년이 됐습니다. 남들보다 늦게 대학교를 졸업하며 컴퓨터 학원의 문을 두드렸던 시절이 문득 생각납니다. 저는 컴퓨터 학원에서 유닉스와 C 언어를 배웠었는데 그 때 배운 지식이 20년이 다 되어가는 지금도 참 유용합니다. 유닉스와 C 언어가 최고의 무기였던 그 시절 과 다르게 최근에는 다양한 언어가 생겼고 파이썬 또한 그런 언어 중 하나입니다. 사실 저처럼 C 컴파일러를 주로 사용하는 몇몇 프로그래머는 파이썬 같은 언어를 보면 “C로도 다 되는데 굳이 인터프리터 언어는 뭐하러?”라는 생각을 하곤 합니다. 그러나 컴퓨터 프로그램 세상은 너무나 빨리 바뀌고 있습니다. 게다가 아두이노나 라즈베리파이처럼 작고도 쉽게 접할 수 있는 하드웨어 제품이 1년에 도 수십 개씩 나오고 있습니다. 소프트웨어의 성능이 중요하던 과거와는 달리 이제는 컴퓨터로 이런 걸 했 으면 좋겠다고 상상만 했던 일을 얼마나 빠르게 구현하느냐가 더 중요해지고 있습니다. 그런 측면에서 파이썬은 아주 적절한 언어입니다. C 언어보다는 배우기가 쉽고, 빠르게 구현할 수 있으며,
written?
특히 프로그래밍을 처음 배우는 이들에게 아주 좋은 프로그래밍 언어라고 할 수 있습니다. 다만 파이썬을 처음 배우는 친구들에게 코딩 방법을 배우는 것도 중요하지만, 컴퓨터의 기본 원리를 익히는 것도 매우 중
s of books for anyone with little or no싶습니다. knowledge of배울 computer 요하다는 점을 언급하고 한자를 때 기본 생성 원리를 알면 새 한자를 익히기 쉬운 것처럼 ke to give it a go.
프로그래밍도 비슷한 원리가 적용됩니다. 컴퓨터의 기본 원리를 알고 코딩을 하는 것과 모른 채 코딩을 하
or?
는 것은 큰 차이가 있습니다.
물론 컴퓨터의 동작 원리를 컴퓨터를 of a computer that any child could save몰라도 up for or get사용하는 for their데는 큰 지장이 없습니다. 그러나 여러분이 세상의 y Pi from www.raspberrypi.org . 중심이 될 미래에는 아마 컴퓨터와 프로그래밍이 지금보다 더 가까워질 겁니다. 무엇을 공부하고 어떤 일 을 하느냐와 더불어 컴퓨터를 얼마나 더 효율적으로 활용해서 일을 처리하느냐 또한 필요한 능력이 되리 라 생각합니다. 사실 이미 지금도 이런 능력을 필요로 하고 있습니다. 모쪼록 제 노력이 여러분에게 조금이나마 도움이 될 수 있기를 바랍니다.
코딩클럽에 오신 것을 환영합니다.
004
2015년 무더운 8월의 어느 날 유형목 드림
신나는 프로그래밍!
책 소개 왜 이 책을 썼을까요? 이 책은 프로그래밍에 대한 지식이 없거나 혹은 조금만 있는, 하지만 한번 해보기를 원하는 사람들을 위한 <코딩 클럽> 시리즈의 첫 책입니다.
누구를 위한 책인가요? 시작은 라즈베리파이(www.raspberrypi.org)였습니다. 이 작은 컴퓨터가 얼마나 유용한지, 아이들이 그걸 사기 위해 용돈을 모으고 선물 받기를 원한다는 사실이 저를 자극했습니다. 하지만 프로그래밍 책, 그것도 아주 쉬운 책을 짧게 쓰고 싶었던 소망은 훨씬 이전부터 있었습니다. 제가 어릴 때 사용했던 컴퓨터는 여러분이 사용하는 컴퓨터와 사뭇 달랐습니다. 지금처럼 컬러도 아니었고 검 은색 바탕에 녹색 글씨가 찍히고 게임을 하려면 때로는 책 한 권을 입력해야 하는 그런 시절이었죠. 불편 했지만 반면에 나만의 명령어를 만들어 뭔가를 실행할 수 있었다는 장점이 있었습니다. 제가 처음 만든 게 임은 베이직 언어로 만든 텍스트 기반의 게임인데 스마트폰으로도 그래픽 게임을 하는 여러분은 상상도 안 될 겁니다. 하지만 그건 그리 오래된 일은 아니랍니다. 나중에 조금 더 현대적인 언어, 자바를 배웠습니다. 네댓 권의 책을 읽으며 배웠는데 언제나 마지막에는 도대체 뭘 해야 할지 모르는 상황에 놓이곤 했습니다. 아이디어는 이것저것 있어서 뭔가 만들고 싶었지만, 어떻게 시작해야 하는지는 몰랐던 시절이었죠. 그래서 저는 이 책을 재미있는 프로젝트를 만드는 방식으 로 구성했습니다. 이런 방식은 상상할 수 있는 어떠한 프로그램이든 간단한 프로그램부터 점점 기능을 향 상할 수 있게 도와주리라 기대합니다.
왜 이 책으로 배워야 하죠? 오랜 시간의 조사 끝에, 저는 제가 원하는 책을 찾았습니다. 대학생을 위한 자바 책이었는데 이 책을 접하 고 왜 우리가 그러한 일을 해야 했는지, 복잡한 프로그램을 디자인하는 걸 어떻게 시작해야 하는지 이해했 습니다. 처음부터 이 책으로 시작했어야 하는데 하는 아쉬움도 들었습니다.
005
이 책의 활용법!
저는 여러분이 이 책에서 프로그램을 어떻게 만드는지 뿐만 아니라 어떻게 본인만의 프로그램을 설계할 수 있는지도 배울 수 있기를 바랍니다. 저는 될 수 있으면 친절하게 설명하며 여러분이 프로그래밍에 흥미 를 보일 수 있게 도와주려 합니다. 그리고 이왕이면 좋은 프로그래밍 습관을 익혀 나중에 여러분들이 멋진 개발자가 되는 걸 돕고 싶습니다. 습관을 바꾼다는 건 어려운 일이거든요.
무엇이 필요한가요? 이왕이면 이 부분을 도와줄 어른이 주변에 있으면 좋겠습니다. 부록에 간단히 적긴 했습니다. 파이썬 버전 은 3.x대를 사용하려 합니다. 혹시 라즈베리파이를 써서 프로그래밍을 배우려고 한다면, 여러분들이 필요 한 모든 것이 이미 설치되어 제공되는 것을 준비하는 게 쉬울 겁니다. 파이썬을 실행하기 위해 꼭 라즈베 리파이를 쓰지 않아도 됩니다. 윈도우, 애플 맥과 리눅스를 사용할 수 있습니다.
<코딩 클럽> 활용법 책을 꼼꼼히 읽으며 주요 프로젝트를 모두 순서대로 빌드하세요. 장의 마지막엔 늘 프로젝트를 발전시킬 수 있는 아이디어와 퀴즈를 적어두었습니다. 어떤 독자는 문제를 하나하나 풀어가며 이해하는 방식으로 책을 읽을 테고, 또 어떤 독자는 무조건 끝까지 진도를 빼는 데 집중할 겁니다. 어느 쪽이든 여러분이 좋아 하고 편한 방식이 좋은 방법입니다. 조언해줄 사람이 주변에 있다면 될 수 있는 대로 자주 묻고 의견을 구 하는 것 또한 도움이 될 겁니다. 여러분이 좀 더 쉽게 익힐 수 있게 네 가지 방법으로 학습을 도우려 합니다.
1 코드 입력하기 눈으로만 보지 말고 한 번에 한 줄씩 입력하다 보면 나중에 자세한 내용을 기억하는 데 도움이 됩니다.
2 오류 찾기와 수정하기 파이썬에서 오류 메시지는 잘못된 것에 대한 몇 가지 단서를 제공합니다. 스스로 이러한 문제를 해결하면 더 나은 프로그래머가 될 수 있습니다. 하지만 어렵다면 웹사이트에서 코드를 내려받아 비교해봅시다.
006
3 실험하기 코드를 자유롭게 작성하고 실행해보고 무엇을 할 수 있는지 살펴보길 바랍니다. 도전할 수 있는 모든 퍼즐 과 아이디어, 코드를 가지고 놀아보길 권합니다. 이 과정을 통해 전문가처럼 코드를 작성하는 방법을 배우 게 될 것입니다.
4 코드 빌드하기 마지막으로, 책에서는 작고 멋진 프로젝트를 빌드할 수 있는 코드를 제공할 뿐만 아니라 프로그램을 어떻 게 설계하는지에 대해서도 가르쳐줄 겁니다. 그런 다음 여러분이 직접 설계한 프로그램을 빌드하기 위해 같은 방법을 사용할 수 있습니다.
조심하세요! 아마도 귀찮게 코드를 직접 입력하지 않고 손쉽게 웹사이트에서 내려받고 싶은 유혹을 느낄 겁니다. 그런 데 이렇게 코드를 내려받아서 사용하면 나중에 다시 코드를 입력하려고 할 때 어떻게 작성했는지 방법이 쉽게 기억나지 않습니다. 책에서 실습하는 코드는 작은 단위이니 꼭 직접 입력하길 권장합니다. 코드를 입 력하는 일은 각 프로그램의 세부 사항을 이해하는 데 도움이 될 겁니다. 더불어 책을 보면서 코드를 입력하다 보면 점점 입력 속도가 빨라질 겁니다. 빠르게 입력하는 건 생각보다 요즘 꽤 유용한 기술입니다. 타자 연습을 한다고 생각하며 직접 입력하길 권합니다.
코드 내려받기 •원서 웹사이트
http://www.codingclub.co.uk
•번역된 코드 내려받기 http://www.hanbit.co.kr/exam/2216
007
차례
옮긴이의 말 • 004 책 소개 • 005
1장 파이썬, IDLE과 첫 번째 프로그램 코딩이란? • 012 프로그래밍 언어 • 012 파이썬 • 013 IDLE • 013 Hello World! • 015 실수를 했다면 • 017 요점 정리 • 018
2장 몇 개의 문장, 계산과 반복문 들어가기 문자열 • 020 수학 계산 • 022 문자와 수학 결합하기 • 023 반복문 • 024 요점 정리 • 028
008
3장 읽을 수 있는 코드와 MyMagic8Ball 게임 스크립트 모드 • 032 코드를 깔끔하게 작성하기 • 034 사용자 입력 받기 • 038 random 모듈 사용하기 • 039 3장의 코드 정리 • 043 요점 정리 • 045
4장 함수 함수 • 048
noitcudortnI
?nettirw koob siht saw yhW
re무작위 tupm구구단? oc fo eg• d049 elwonk on ro elttil htiw enoyna rof skoob fo seires a ni tsr fi eht si koob sihT .og a ti evig ot ekil dluow ohw tub gnimmargorp 숫자 맞추기 게임 • 052 retupmoc fo 요점 정리 • 055
?rof koob siht si ohW
rieht rof teg ro rof pu evas dluoc dlihc yna taht retupmoc a fo ytilibaliava eht saw rotcaf enO . gro.ipyrrebpsar.www morf iP yrrebpsaR eht sa hcus ,yadhtrib rieht rof teg
5장 MyEtchASketch tkinter 라이브러리 • 058 계획 • 060 좌표 • 060
정리된 코드 유지하기 • 061
신나는 프로그래밍!
키보드 콘트롤 추가하기 • 066 마무리 • 067 요점 정리 • 069
009
부록 A 윈도우에서 파이썬 설치하기 • 071 B 자료 정리 • 081 C 용어 정리 • 085 D 퀴즈 정답 • 089
감사의 글 • 091
roduction
y was this book written?
ok is the fi rst in a series of books for anyone with little or no knowledge of computer mming but who would like to give it a go.
o is this book for?
ctor was the availability of a computer that any child could save up for or get for their y, such as the Raspberry Pi from www.raspberrypi.org . 파이썬이라고!
010
Why was this book written?
1장
This book is the fi rst in a series of books for anyone with little programming but who would like to give it a go.
Who is this book for? 파이썬, One factor was the availability of a computer that any child co IDLE과 첫 번째 프로그램 birthday, such as the Raspberry Pi from www.raspberrypi.org 1장에서 배울 내용을 미리 살펴볼까요? • 컴퓨터 프로그래밍 언어와 우리가 사용하는 언어의 차이점을 알아봅시다. • 파이썬 프로그래밍 언어를 만나봅니다. • IDLE이 무엇인지 알고 어디에 얼마나 유용한지 알아봅시다. 그리고 쉽게 프로그램을 실행하는 방법도 배웁시다. • 내 컴퓨터의 설정을 살펴봅시다. • 우리의 첫 번째 프로그램을 작성하고 실행합니다.
IDLE? 게으른? 나태한? 이름부터 잠이 와…
코딩이란? 코딩이란 컴퓨터가 일하는 절차를 적는 행위입니다. 코딩으로 완성된 문장을 코드 라고 합니다. 코드는 컴퓨터가 이해할 수 있는 형태여야 하기에, 더 공식적으로 말 하면 컴퓨터 프로그래밍이라고 합니다. 컴퓨터와 코딩이라는 말이 등장한 지는 오래되지 않았지만, 그 기간 동안 아주 재미 있는 발자취를 남긴 것만은 확실합니다. 당시에는 이런 놀라운 발전을 예상하지 못 했겠지만, 오늘날 컴퓨터에서 사용하는 처리 절차를 저장하는 첫 번째 기계는 1801 년에 발명된 자카드 직조기와 비슷했습니다. 종이에 구멍을 뽕뽕 뚫는 천공 카드를 사용했죠. 컴퓨터의 원형을 1837년 찰스 배비지가 고안한 기계에서 찾곤 하지만, 사실 우리가 아는 진짜 컴퓨터는 그 후로 100년이 지나도록 만들지 못했습니다. 우 리가 배울 파이썬은 귀도 반 로섬이 1989년에 만들기 시작한 언어인데, BBC의 코 미디 프로그램인 ‘몬티 파이튼의 비행 서커스’에서 이름을 따왔습니다.
프로그래밍 언어 전 세계에 코딩하는 사람은 엄청나게 많은데 그 수만큼 프로그래밍 언어의 종류도 많습니다. 물론 언어의 특성별로 주로 사용하는 분야가 다릅니다. • 포트란: 높은 정밀도가 필요한 계산에 매우 좋습니다. 과학기술언어라고도 불립니다. • SQL : 데이터베이스에서 무언가를 하고 싶을 때 유용합니다. 전화번호부를 예로 들 수 있겠네요. • 파이썬: 빠르게 프로그램을 작성하거나, 실험적인 프로그램을 구동하거나, 게임을 포함한 대규모 의 프로그램을 작성할 때 훌륭합니다. 만능이죠!
이전에 스크래치 프로그래밍을 해봤다면, 파이썬을 배우기가 훨씬 쉬울 겁니다. 스 크래치는 게임을 만들거나 프로그래머처럼 생각하는 방법을 익히기에 아주 좋은 교 육용 프로그램입니다. 스크래치를 몰라도 상관없습니다. 새로운 프로그래밍 언어를 익히는 능력은 프로그래머에게 매우 중요하니 파이썬으로 시도해보면 되죠. 해보면
012 코딩 클럽 LV1. 모두를 위한 파이썬 기초
ho would like to give it a go.
book for?
availability of a computer that any child could save up for or get for their e Raspberry Pi from www.raspberrypi.org .
요점 정리
재밌나? 아무래도 재밌어야 배울 맛이 날 텐데.
5장에서 배운 내용은? • tkinter 라이브러리를 사용하는 방법 • MyEtchASketch 게임을 작성하는 방법 • Windows에서 프로그램을 배치하는 방법 • 키보드 입력을 함수에 추가하는 방법 • ‘복사하기와 붙여넣기’는 더 좋은 해결 방법이 있다는 걸 알려주는 힌트입니다. • 캔버스를 지우는 방법(코드를 입력했을 때, 추가적으로 erase_all(event) 함수를 슬쩍 호출한 다는 걸 눈치챘나요?). 키보드에서 u키를 누르면 화면을 지웁니다.
이번 장에서 아마 여러 아이디어를 얻었을 겁니다. 코드를 잘 정리해뒀다면 다음 아 이디어는 파일의 시작 부분에서 변수를 몇 개 간단히 조정하는 것만으로도 쉽게 달 성할 수 있습니다. 아이디어
•line_length를 더 길게 그리고 무슨 일이 벌어지는지 알 수 있도록 만들어보세요. •색깔을 몇 번 바꿔보고, tkinter가 어떤 이름의 색깔을 지원하는지 찾아보세요. •네모의 크기를 좋아하는 크기로 바꿔보세요. •만족스럽다고 생각될 때까지 코드 안의 모든 변수를 바꿔보세요.
퍼즐 5.1
복사하기와 붙여넣기에서 더 발전할 필요가 있다고 말한 걸 기억하나요? 이 퍼즐은 더 나은 코드를 작성할 수 있게 도와 줄 겁니다. p1_move(x, y)라는 새로운 함수를 만들어 네 가지 움직임을 다음처럼 간단히 정리합니다.
def p1_move_N(event): p1_move(0, -line_length) 이걸 처리하는 방법에는 여러 가지가 있을 수 있습니다. 답의 예는 웹사이트에서 찾을 수 있습니다.
5장 MyEtchASketch 069
uction
웹사이트에는 플레이어가 두 명인 ourEtchASketch.py 코드도 있습니다. 좀 더 배울 의지가 있다면 직접 한 번 코드를 실행해보세요. 그렇게 어렵지 않고 앞선 퍼 즐보다 더 코드를 잘 활용할 수 있을 겁니다. 1명보다 2명의 게임이 더 재미있는데 그건 두 가지 색깔로 그릴 수가 있기 때문입니다. 아울러 이 코드는 아마 다른 게임
에 대한 영감을 더 많이 주리라 믿습니다. this book written?
fi rst in a series of books for anyone with little or no knowledge of computer .py를 내려받아 색색의 무언가를 그려보세요. t who would•ourEtchASketch like to give it a go. 추가적인 아이디어
•코드를 살펴보고, 플레이어가 2명인 게임이 얼마나 쉽게 구현되는지 알아보세요.
s book for?
•협력하여 그리는 게임을 친구와 함께 시도해보세요. • 끝에 가서 누가 더 많이 네모를 그렸는지 시간제한을 두고 경쟁을 해보세요. 목표는 상대보다 가능한 한 더 많이 그리는 겁
the availability of게임인 a computer that child 충돌이 could save for합니다. or get for 무엇 their • 특이한 트론을 해보세요. 충돌 감지any 기능이 없으므로, 발생하면 알아서up 정리해야 (힌트: 트론이 the Raspberry Pi from www.raspberrypi.org . 인지 모르겠다면, 어른에게 물어보세요.) 니다. (힌트: 사각형을 더 크게 만들수록 유리합니다.)
•화면 상단까지 얇고 긴 캔버스를 만들어 친구와 경쟁해보세요. • 몇 가지 장애물을 만들어 넣어서, 게임을 더 재미있게 만들어보세요. (힌트: 키보드를 결합하는 코드 앞에다가 화면 일부에 임의의 크기와 색깔을 가지는 선을 그려 넣으면 됩니다.) •또 다른 게임을 만들어보세요.
좋아, 이거 정말 재밌구나.
070 코딩 클럽 LV1. 모두를 위한 파이썬 기초
부록A 윈도우에서 파이썬 설치하기
5장 MyEtchASketch 071
파이썬 설치하기 대부분 실습환경이 MS 윈도우라 생각해서 이 책의 부록으로 윈도우에서 파이썬을 설치하는 방법을 추가합니다. 윈도우에서 웹브라우저를 실행한 다음 http://www.python.org 홈페이지에 접 속합니다.
Downloads 메뉴를 클릭하면 다음처럼 윈도우용 Python 설치파일을 내려받을 수 있습니다. 그림 A.1 파이썬 홈페이지의 다운로드 페이지
072 코딩 클럽 LV1. 모두를 위한 파이썬 기초