저자소개천인국 ( 千仁國 ) 1983년서울대학교전자공학과공학사 1985년한국과학기술원전기및전자공학과공학석사 1993년한국과학기술원전기및전자공학과공학박사 1985~1988년삼성전자종합연구소주임연구원 1993년 ~ 현재순천향대학교컴퓨터공학과교수 2005년캐나다 UBC 방문

Similar documents
쉽게 풀어쓴 C 프로그래밍

Infinity(∞) Strategy

PowerPoint 프레젠테이션

윈도우즈프로그래밍(1)

PowerPoint 프레젠테이션

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Visual Basic 반복문

Microsoft PowerPoint - chap05-제어문.pptx

쉽게 풀어쓴 C 프로그래밍

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Presentation

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - Lesson6.pptx

Microsoft PowerPoint - chap-07.pptx

TEST BANK & SOLUTION

OCW_C언어 기초

쉽게 풀어쓴 C 프로그래밍

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

중간고사

PowerPoint Presentation

쉽게

Microsoft PowerPoint - logo_2-미해답.ppt [호환 모드]

untitled

쉽게 풀어쓴 C 프로그래밍

Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint Presentation

Microsoft PowerPoint - chap-06.pptx

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - gnu-w10-c-chap11

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구

슬라이드 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

11장 포인터

17장 클래스와 메소드

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

Microsoft Word - PLC제어응용-2차시.doc

Java ...

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - gnu-w06-python_[실습]_day13-turtle-shape

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap-03.pptx

<4D F736F F F696E74202D20C1A635C0E520BCF6BDC4B0FABFACBBEAC0DA>

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint Template

Microsoft PowerPoint - Lesson2.pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Chapter_06

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

슬라이드 1

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

로거 자료실

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

Microsoft PowerPoint - ch07 - 포인터 pm0415

와플-4년-2호-본문-15.ps

PowerPoint 프레젠테이션

윈도우시스템프로그래밍

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PHP & ASP

완벽한개념정립 _ 행렬의참, 거짓 수학전문가 NAMU 선생 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에

쉽게 풀어쓴 C 프로그래밍

Microsoft Word - Lab.4

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint 세션.ppt

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

설계란 무엇인가?

OCW_C언어 기초

PowerPoint 프레젠테이션

C++ Programming

PowerPoint Presentation

슬라이드 1

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

ch08

슬라이드 1

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - e pptx

PowerPoint Presentation

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

2015 개정교육과정에따른정보과평가기준개발연구 연구책임자 공동연구자 연구협력관

Microsoft PowerPoint - additional01.ppt [호환 모드]

2학년 1학기 1,2단원 1 차례 세 자리의 수 1-1 왜 몇 백을 배워야 하나요? 1-2 세 자리 수의 자릿값 알아보기와 크기 비교하기 1-3 뛰어 세기와 수 배열표에서 규칙 찾기 1단원 기본 평가 단원 창의 서술 논술형 평가 22 1단원 심화 수


Microsoft PowerPoint - gnu-w10-c-chap12

Transcription:

저자소개천인국 ( 千仁國 ) 1983년서울대학교전자공학과공학사 1985년한국과학기술원전기및전자공학과공학석사 1993년한국과학기술원전기및전자공학과공학박사 1985~1988년삼성전자종합연구소주임연구원 1993년 ~ 현재순천향대학교컴퓨터공학과교수 2005년캐나다 UBC 방문교수 E-mail: chunik@sch.ac.kr 두근두근파이썬 초판인쇄 2017년 1월 9일초판발행 2017년 1월 16일지은이천인국펴낸이김승기펴낸곳 ( 주 ) 생능출판사 / 주소경기도파주시광인사길 143 출판사등록일 2005년 1월 21일 / 신고번호제406-2005-000002호대표전화 (031)955-0761 / 팩스 (031)955-0768 홈페이지 www.booksr.co.kr 책임편집김민보 / 편집최일연, 신성민, 손정희, 이문영, 정하승 / 디자인유준범마케팅백승욱, 최복락, 김민수, 심수경, 최권혁, 백수정, 최태웅, 김범용, 김민정인쇄 제본 ( 주 ) 상지사P&B ISBN 978-89-7050-893-1 93000 정가 24,000원 이도서의국립중앙도서관출판예정도서목록 (CIP) 은서지정보유통지원시스템홈페이지 (http://seoji.nl.go.kr) 와국가자료공동목록시스템 (http://www.nl.go.kr/kolisnet) 에서이용하실수있습니다. (CIP 제어번호 : CIP2017000242) 이책의저작권은 ( 주 ) 생능출판사와지은이에게있습니다. 무단복제및전재를금합니다. 잘못된책은구입한서점에서교환해드립니다.

머리말 파이썬은입문자들에매우적합한언어이다. 무엇보다도간결하며짧고읽기쉽고, 직관적인코드를작성할수있다. 하지만성능은강력해서네트워킹, 과학계산, 웹프로그래밍분야에서널리사용되고있다. 최근에만들어진언어답게그래픽프로그램도터틀그래픽과 tkinter 를사용하여상당히쉽게작성이가능하다. 이책은생애최초로프로그래밍을하려는학생들을대상으로파이썬언어와 GUI 프로그래밍을소개한다. 프로그래밍을처음시작하는학습자도쉽게따라올수있도록변수, 조건문, 반복문, 함수등의기본적인프로그래밍개념을자세히설명하였다. 적절한그림을가능한많이사용하여더욱친숙하고, 지루하지않으며독자들이이해하기쉬운교재를만들려고노력하였다. 독자들이흥미를가질만한실습예제를간추려서 LAB으로제공하였다. LAB의끝에는도전문제를두어서독자들이주어진소스를개선할수있도록하였다. 터틀그래픽과 tkinter 기반의흥미로운예제와연습문제를제시하였다. 파이썬은수많은다양한활용분야를가지고있기에데이터베이스, 네트워크, 멀티미디어, 통계, 재무, 정보보안프로그래밍은관련책이나인터넷검색등을통하여추가로학습하기바란다. 이책이만들어지기까지많은도움이있었다. 항상새로운책에대하여적극적으로지원해주신생능출판사여러분께깊은감사를표한다. 또책의교정을도와준천명준군과기술교정을봐주신심규현박사님께심심한감사를표한다. 책이발간될때마다오류를지적해주시고격려해주시는많은분들께도깊은감사를드린다. 아무쪼록이책을통하여많은이들이컴퓨터프로그래밍을흥미진진한분야로생각한다면필자에게는큰보람이될것이다. 2016년 12월저자천인국 머리말 3

이책의구성과특징 3 이책의구성를수있도록다양한학습장치들을배치하였다. 이책은파이썬입문자들을위하여기술되었다. 입문자들이쉽게개념을이해하고실력을기 01 이번장에서만들프로그램 컴퓨터에서계산기능이중요한가요? 요즘은다른작업을더많이하는거같던데요? 파이썬에는다양한연산자가내장되어있다. 기본적인사칙연산인더하기, 빼기, 곱하기, 나누기연산자뿐만아니라대입 ( 할당 ), 나머지, 지수연산자도있다. 이번장에서이들연산자들에대하여학습한다. 이연산자들을이용하여실제적인응용프로그램을작성하여보자. (1) 사용자로부터화씨온도를받아서섭씨온도로변환하는프로그램을작성해보자. 화씨온 도는미국에서사용된다. 화씨 100 도는섭씨로몇도일까? 파이썬프로그램으로계산해 보자. 컴퓨터는본질적으로계산하는기계입니다. 컴퓨터에서모든것은계산으로처리됩니다. 이번장에서는다음과같은내용을학습합니다. 더하기, 빼기, 곱하기, 나누기등의산술연산자에대하여학습합니다. 나머지, 지수연산자에대하여학습합니다. 대입 ( 할당 ) 연산자와복합연산자를학습한다. 주석의개념을이해한다. 우선순위의개념을이해한다. 산술연산과관련된응응프로그램을작성해봅니다. (2) 사용자가입력하는 n의값에따라 n-각형을그려보자. 터틀그래픽을이용한다. (3) 자동판매기를시뮬레이션하는프로그램을작성해보자. 자동판매기는사용자로부터삽입한돈과물건값을입력받는다. 물건값은 100원단위이다. 프로그램은잔돈을동전으로계산하여출력한다. 동전은 500원, 100원짜리만있다고하자. 각장에서무엇을배워야하는지를제시하였다. 각장에서만들어볼프로그램을제시하였다. 파이썬은많이사용되는언어인가요? 그럼요. 최근에가장핫한언어라고감히말할수있겠네요. 입문자들이쉽게배울수있는언어입니다. NOTE 픽셀이란? 픽셀 (pixel) 은컴퓨터이미지를이루는가장작은단위인점을뜻한다. 픽셀은그림 (picture) 의원소 (element) 라는의미를가진다. 한자로는화소라고번역할수있다. 프로그램에서는한글자만잘못되어도오류라고하네요? 프로그램이스스로알아서고칠수없나요? 도전문제화살표를움직여서 6각형을그려보자. 회전하는각도를몇도로하여야하는가? 프로그래램은아주논리적으로엄밀해야합니다. 컴퓨터는프로그래머마음을읽을수없기때문에고치치않는것입니다. 본문에대한보충설명이나참고사항, 경고사항을박스로정리하였다. 카카오톡스타일을이용하여학습내용을정리하였다. 4 이책의구성과특징

Lab 화씨온도를섭씨온도로변환하기 실습시간우리나라에서는온도를나타낼때섭씨온도를사용하지만미국에서는화씨온도를사용한다. 화씨온도를받아서섭씨온도로바꾸는프로그램을작성해보자. C=(F-32)* 9 5 01 이번장에서만들프로그램반복 (iteration) 은동일한문장을여러번반복시키는구조이다. 인간은똑같은작업을반복하는것을싫어하고새롭고흥미로운것들을좋아한다. 하지만컴퓨터는인간과다르게반복적인작업을실수없이빠르게할수있다. 이것이컴퓨터의가장큰장점이다. 단순반복작업은컴퓨터가하는것이제격이다. 이번장에서는다음과같은프로그램을작성해볼것이다. (1) 터틀그래픽에서별을반복을이용해서그려보자. 화씨온도 : 100 섭씨온도 : 37.77777777777778 (2) 터틀그래픽의거북이를랜덤하게움직여보자. 여기를가리고먼저풀어보세요! 소스코드 ftemp = int(input(" 화씨온도 : ")) ctemp = (ftemp-32.0)*5.0/9.0 print(" 섭씨온도 :", ctemp) 다음과같이하여도된다. ftemp = int(input(" 화씨온도 : ")) ctemp = (ftemp-32)*5/9 print(" 섭씨온도 :", ctemp) (3) 터틀그래픽을이용하여스파이럴을그려보자. 파이썬에서나눗셈연산자 / 는항상실수로계산하기때문이다. 도전문제반대로섭씨온도를화씨온도로변환하는프로그램도작성해보자. 결과를보고프로그램을작성할수있는실습을최대한많이수록하였다. 실습문제는흥미로운것만을엄선하였다. 본문에서학습한내용을응용하여프로그램을작성할수도있도록하였다. 터틀그래픽을이용하여기초적인개념들을설명하였다. 이책의특징 파이썬을이용하여프로그래밍에입문하는독자들을위하여프로그래밍의기초적인개념부터자세히설명하였다. 적절한그림을통하여중요한개념들을빠르게학습할수있다. 터틀그래픽과 tkinter를사용하여독자들이그래픽을통하여각종개념을실습할수있도록하였다. 학습한내용을바탕으로독자가스스로프로그램을작성해볼수있는실습문제 (LAB) 를대폭수록하였다. 실습문제들은흥미로운주제들로엄선하였다. 실습문제는설명과함께자세한답안이제공된다. 컬러를사용하여빠르게이해되도록구성하였다. 이책의구성과특징 5

강의계획 강의계획 I(Minimum Track) 기초프로그래밍교육은다양한전공의학생들을대상으로하고학교마다강의시간이나학점이달라진다. 만약 2학점의강의이고수강생이인문계라면다음과같은진행을생각할수있다. 주 해당 chapter 학습주제 1 1장 파이썬소개 2 2장 변수 3 3장 계산기능 4 4장 자료의종류 5 5장 조건 I 6 6장 반복 I 7 6장 반복 II 8 중간고사 중간평가 9 7장 함수 I 10 7장 함수 II 11 8장 프로젝트 I 12 8장 프로젝트 I 13 9장 리스트와딕셔너리 I 14 9장 리스트와딕셔너리 II 15 기말프로젝트발표 16 기말고사 기말평가 기말프로젝트주제예시 애스터로이드게임완성하기 (8장참조 ) 앵그리터틀게임완성하기 (8장참조 ) 애니메이션작성하기 (8장참조 ) 6 강의계획

강의계획 II(Medium Track) 기초프로그래밍교육은다양한전공의학생들을대상으로하고학교마다강의시간이나학점이달라진다. 만약 3학점의강의이고수강생이자연계전공이라면다음과같은진행을생각할수있다. 주 해당 chapter 학습주제 1 1장 파이썬소개 2 2장 변수 3 3장 계산기능 4 4장 자료의종류 5 5장 조건 6 6장 반복 7 7장 함수 8 중간고사 중간평가 9 8장 프로젝트 I 10 9장 리스트와딕셔너리 I 11 10장 tkinter I 12 10장 tkinter II 13 11장 파일 I 14 11장 파일 II 15 기말프로젝트발표 16 기말고사 기말평가 기말프로젝트주제예시 애스터로이드게임완성하기 (8장참조 ) 앵그리터틀게임완성하기 (8장참조 ) 애니메이션작성하기 (8장참조 ) 계산기기능확장 (10장참조 ) MyPaint 프로그램기능확장 (10장참조 ) 메모장기능확장 (11장참조 ) 강의계획 7

강의계획 III(Maximum Track) 기초프로그래밍교육은다양한전공의학생들을대상으로하고학교마다강의시간이나학점이달라진다. 만약 3학점의강의이고수강생이이공계전공이라면다음과같은진행을생각할수있다. 주 해당 chapter 주제 1 1장 파이썬소개 2 2장 변수 3 3장 계산기능 4 4장 자료의종류 5 5장 조건 6 6장 반복 7 7장 함수 8 중간고사 중간평가및프로젝트제안서발표 9 8장 프로젝트 I 10 9장 리스트와딕셔너리 11 10장 tkinter 12 11장 파일 13 12장 라이브러리사용 14 13장 객체와클래스개요 15 14장 프로젝트 II 16 기말고사 기말평가및프로젝트결과발표 기말프로젝트주제예시 애스터로이드게임완성하기 (8장참조 ) 앵그리터틀게임완성하기 (8장참조 ) 애니메이션작성하기 (8장참조 ) 계산기기능확장 (10장참조 ) MyPaint 프로그램기능확장 (10장참조 ) 메모장기능확장 (11장참조 ) Pillow 라이브러리를이용한영상처리프로그램작성 (12장) 클래스를이용한간단한게임작성하기 (14장참조 ) 8 강의계획

차례 CHAPTER 1 파이썬을소개합니다 01 프로그래밍이란무엇인가? 22 02 프로그래밍이어디에도움이될까? 23 03 프로그래밍언어의종류 24 04 파이썬설치하기 #1 26 05 파이썬설치하기 #2 27 06 파이썬실행하기 28 07 파이썬쉘 29 08 계산하기 30 09 문자열출력하기 32 10 터틀그래픽 #1 33 11 터틀그래픽 #2 36 12 스크립트모드 37 13 소스파일다시열기 39 14 문법오류 40 15 실행시오류 41 16 파이썬 IDLE 종료하기 42 17 파이썬으로무엇을만들수있을까? 43 Lab print() 함수실습 44 Lab 터틀그래픽으로삼각형을그려보자 45 Lab 터틀그래픽으로원과다각형을그려보자 46 이번장에서배운것 47 연습문제 48 차례 9

CHAPTER 2 변수를소개합니다 01 이번장에서만들프로그램 52 02 변수 #1 53 03 변수 #2 54 04 변수는문자열도저장할수있다! 55 05 변수의이름은어떻게짓나요? 57 06 이런것도가능하다! 58 07 여러값을함께출력하기 59 Lab 변수는어디에유용할까? 60 08 사용자로부터정수입력받기 #1 61 09 사용자로부터정수입력받기 #2 62 10 사용자로부터문자열입력받기 63 Lab 집그리기 64 Lab 집그리기 Solution 65 Lab 로봇기자만들기 66 Lab 부동산광고만들기 67 이번장에서배운것 68 연습문제 69 CHAPTER 3 계산해볼까요? 01 이번장에서만들프로그램 74 02 수식은어디에나있다! 75 03 수식과연산자 76 04 나머지연산자 77 Lab 다각형그리기 78 Lab 커피가게매출계산하기 79 Lab 화씨온도를섭씨온도로변환하기 80 Lab BMI 계산하기 81 Lab 자동판매기프로그램 82 05 지수연산자 83 06 대입 ( 할당 ) 연산자 84 07 복합연산자 85 08 주석 86 10 차례

09 연산자의우선순위 87 Lab 평균구하기 89 이번장에서배운것 90 연습문제 91 CHAPTER 4 자료의종류에는어떤것들이있나요? 01 이번장에서만들프로그램 96 02 파이썬에서사용할수있는자료의종류 97 03 문자열이란? 98 04 문자열을만드는방법 99 05 문법적인오류 100 06 왜큰따옴표와작은따옴표를동시에사용할까? 101 07 100과 100 을구별해야한다 102 08 문자열을숫자로변환할수있다 103 09 오류가발생할수있다! 104 10 숫자를문자열로변환하려면? 105 11 파이썬은문자열처리에강한언어 106 12 문자열을반복해보자! 107 Lab 거북이와인사해보자. 108 Lab 거북이와인사해보자 Solution 109 13 문자열에서개별문자들을추출하려면? 110 14 특수문자열 111 Lab 친근하게대화하는프로그램 112 Lab 연, 월, 일을합하여출력하기 113 Lab 2050년에는몇살이될까? 114 15 리스트란? 115 16 리스트요소접근하기 116 Lab 친구들의리스트생성하기 117 Lab 리스트에저장된색상으로원그리기 118 Lab 리스트에저장된색상으로원그리기 Solution 119 이번장에서배운것 120 연습문제 121 차례 11

CHAPTER 5 조건을따져봅시다 01 이번장에서만들프로그램 126 02 3가지의기본제어구조 127 03 왜선택구조가필요한가? 129 04 관계연산자 130 05 if-else 문 132 06 if-else 문으로예제를작성해보자 133 07 블록 134 Lab 정수의부호에따라거북이를움직이자 135 Lab 정수의부호에따라거북이를움직이자 Solution 136 Lab 영화나이제한검사 137 08 논리연산자 138 Lab 거북이제어하기 139 Lab 거북이제어하기 Solution 140 Lab 윤년판단 141 Lab 윤년판단 Solution 142 Lab 동전던지기게임 143 Lab 동전던지기게임 ( 그래픽버전 ) 144 09 조건이거짓일때연속하여다른조건을검사 145 Lab 종달새가노래할까? 146 10 if-else 문안에 if-else 문넣기 147 Lab 로그인프로그램 148 Lab 축구게임 149 Lab 도형그리기 150 Lab 도형그리기 Solution 151 이번장에서배운것 152 연습문제 153 CHAPTER 6 반복해봅시다 01 이번장에서만들프로그램 158 02 왜반복이중요한가? 159 03 반복의종류 160 12 차례

04 횟수제어반복 #1 161 05 횟수제어반복 #2 163 06 횟수제어반복 #3 164 07 range() 함수 165 08 예제 : 6개의원그리기 167 Lab 반복을사용하여도형을그리자 168 Lab n-각형그리기 169 Lab 거북이를랜덤하게움직이게하자 170 Lab 거북이를랜덤하게움직이게하자 Solution 171 Lab 팩토리얼계산하기 172 09 조건제어반복 173 10 예제 : 로그인프로그램 174 11 추가예제 175 Lab 구구단출력 177 Lab 별그리기 178 Lab 스파이럴그리기 179 Lab 스파이럴그리기 Solution 180 Lab 사용자가입력하는숫자의합계산하기 181 Lab 사용자가입력하는숫자의합계산하기 Solution 182 Lab 숫자맞추기게임 183 Lab 숫자맞추기게임 Solution 184 Lab 초등생을위한산수문제발생기 185 Lab 모든샌드위치종류출력하기 186 12 무한루프와 break 187 Lab 시계그리기 188 Lab 점치는게임 189 Lab 점치는게임 Solution 190 이번장에서배운것 191 연습문제 192 CHAPTER 7 코드를함수로모아봅시다 01 이번장에서만들프로그램 198 02 함수란? 199 차례 13

03 함수작성하고호출하기 200 04 왜우리는함수를작성하는가? 201 05 함수에 1개의입력전달하기 202 06 값반환하기 203 07 함수에여러개의입력전달하기 205 Lab 사각형을그리는함수작성하기 206 Lab 사각형을그리는함수작성하기 Solution 207 Lab n-각형을그리는함수작성하기 208 08 변수의범위 209 09 함수안에서전역변수사용하기 210 10 디폴트인수 211 11 키워드인수 212 Lab 클릭하는곳에사각형그리기 214 Lab 클릭하는곳에사각형그리기 Solution 215 Lab 마우스로그림그리기 216 Lab 마우스로그림그리기 Solution 217 Lab 나무그리기 218 Lab 나무그리기 Solution 219 Lab 막대그래프그리기 220 Lab 터틀메이즈러너 221 Lab 터틀메이즈러너 Solution 222 이번장에서배운것 223 연습문제 224 CHAPTER 8 프로젝트 I 01 이번장에서만들프로그램 230 02 난수발생하기 231 03 거북이경주게임 #1 232 04 거북이경주게임 #2 233 05 거북이경주게임 #3 234 06 거북이경주게임 #4 235 07 애니메이션만들기 #1 236 08 애니메이션만들기 #2 237 14 차례

09 애스터로이드게임 #1 238 10 애스터로이드게임 #2 240 11 앵그리터틀게임 #1 241 12 앵그리터틀게임 #2 243 13 암호화와복호화 244 14 크리스마스카드를그려보자 #1 246 15 크리스마스카드를그려보자 #2 247 CHAPTER 9 리스트와딕셔너리 01 이번장에서만들프로그램 252 02 리스트 253 03 리스트생성하기 254 04 점 (.) 이의미하는것은? 255 05 리스트의항목접근하기 256 06 슬라이싱 257 07 항목변경하기 258 08 항목삭제하기 259 09 리스트탐색하기 261 10 리스트정렬하기 262 Lab 오늘의속담 264 Lab 오륜기그리기 265 Lab 애스터로이드게임업그레이드 266 Lab 애스터로이드게임업그레이드 Solution 267 11 딕셔너리 268 12 딕셔너리연산 #1 270 13 딕셔너리연산 #2 271 Lab 편의점재고관리 272 Lab 영한사전 273 Lab (ADVANCED) 이메일보내기 274 이번장에서배운것 275 연습문제 276 차례 15

CHAPTER 10 tkinter로 GUI 만들기 01 이번장에서만들프로그램 282 02 tkinter란? 283 03 tkinter의위젯들 284 04 단순위젯과컨테이너위젯 286 05 버튼이있는윈도우를생성해보자 287 06 엔트리와레이블위젯도사용해보자 288 07 배치관리자 289 08 격자배치관리자 290 09 버튼이벤트처리하기 #1 291 10 버튼이벤트처리하기 #2 292 11 버튼이벤트처리하기 #3 293 12 위젯의색상과폰트변경하기 294 13 절대위치배치관리자 295 14 이미지표시프로그램 296 15 MyPaint 프로그램 #1 297 16 MyPaint 프로그램 #2 298 17 MyPaint 프로그램 #3 299 18 (ADVANCED) 계산기프로그램 #1 300 19 (ADVANCED) 계산기프로그램 #2 301 20 (ADVANCED) 계산기프로그램 #3 302 21 (ADVANCED) 계산기프로그램 #4 303 22 (ADVANCED) 계산기프로그램 #5 304 23 (ADVANCED) 계산기프로그램 #6 305 24 (ADVANCED) 계산기프로그램 #7 306 25 (ADVANCED) 계산기프로그램 #8 307 26 (ADVANCED) 계산기프로그램 #9 309 27 (ADVANCED) 계산기프로그램 #10 310 이번장에서배운것 311 연습문제 312 16 차례

CHAPTER 11 파일을사용해봅시다 01 이번장에서만들프로그램 316 02 파일은왜필요한가? 317 03 파일에서데이터읽기 #1 318 04 파일에서데이터읽기 #2 319 05 파일에서전체데이터읽기 320 06 파일에서한줄씩읽기 321 07 파일에데이터쓰기 322 08 파일에데이터추가하기 324 09 파일에서단어읽기 325 Lab 파일복사하기 326 Lab 파일복사하기 Solution 327 Lab 행맨 328 Lab 행맨 Solution 329 10 객체출력 #1 330 11 객체출력 #2 332 12 객체출력 #3 333 13 파일대화상자 334 Lab 메모장 335 Lab 메모장 Solution 336 이번장에서배운것 337 연습문제 338 CHAPTER 12 다양한라이브러리를사용해봅시다 01 이번장에서만들프로그램 342 02 파이썬의외부라이브러리 343 03 필로우설치 #1 344 04 필로우설치 #2 345 05 필로우를이용한영상표시 346 06 필로우를이용한영상처리 : 영상회전 348 07 필로우를이용한영상처리 : 영상흐리게하기 349 08 메뉴만들기 350 09 영상처리기능을메뉴로연결 351 차례 17

CHAPTER 13 객체란무엇인가요? 01 이번장에서만들프로그램 356 02 객체지향프로그래밍 357 03 객체란? 358 04 우리는이미객체를사용해보았다! 359 05 객체생성하기 #1 360 06 객체생성하기 #2 362 07 객체를생성하면서초기화하기 363 08 하나의클래스로객체는많이만들수있다 364 09 str () 메소드 365 10 self는무엇인가? 366 Lab 터틀그래픽을다시보자 367 Lab 터틀그래픽을다시보자 Solution 368 11 Car 클래스 + Turtle 클래스 369 Lab Ball 클래스 370 Lab Ball 클래스 Solution 371 12 상속이란? 372 이번장에서배운것 373 연습문제 374 CHAPTER 14 프로젝트 II 01 이번장에서만들프로그램 378 02 공을클래스로표현하자 379 03 객체생성 380 04 다양한공을만들도록하자 381 05 tkinter를사용하여윈도우를생성해보자 382 06 Ball 클래스에서원그리기 383 07 공을움직여보자 384 08 이제까지작성된소스를실행해보자 385 09 공을화면에서반사시키자 386 10 움직이는볼을여러개만들어보자 388 11 소스 #1 389 18 차례

12 소스 #2 390 13 간단한게임작성 #1 391 14 간단한게임작성 #2 392 15 전체소스 #1 393 16 전체소스 #2 394 찾아보기 395 차례 19

6 CHAPTER 반복해봅시다 저는같은말도반복하기싫은데컴퓨터는쉽게반복하겠죠? 사실반복하는것은컴퓨터가문제를해결하는핵심적인기법이에요. 생각지도못한분야에서도반복을이용하여문제를해결하지요. 이번장에서는다음과같은내용을학습합니다. 반복문의필요성을이해합니다. while 문을사용하여조건으로반복하는방법을학습합니다. for문을사용하여정해진횟수만큼반복하는방법을학습합니다.

01 이번장에서만들프로그램 반복 (iteration) 은동일한문장을여러번반복시키는구조이다. 인간은똑같은작업을반복하는것을싫어하고새롭고흥미로운것들을좋아한다. 하지만컴퓨터는인간과다르게반복적인작업을실수없이빠르게할수있다. 이것이컴퓨터의가장큰장점이다. 단순반복작업은컴퓨터가하는것이제격이다. 이번장에서는다음과같은프로그램을작성해볼것이다. (1) 터틀그래픽에서별을반복을이용해서그려보자. (2) 터틀그래픽의거북이를랜덤하게움직여보자. (3) 터틀그래픽을이용하여스파이럴을그려보자. 158 두근두근파이썬

02 왜반복이중요한가? 반복은어떤단계를반복하게하는것으로반복구조를사용하면프로그램이간단하고빠르게된다. 예를들어서동일한작업을반복하기위하여똑같은문장을복사하여붙여넣기하는것보다반복구조를사용하는편이프로그램을간결하게만든다. 또프로그래밍에필요한시간도단축할수있다. 하나의예로화면에회사에중요한손님이오셔서대형전광판에 방문을환영합니다! 를 5번출력한다고하자. 방문을환영합니다! 방문을환영합니다! 방문을환영합니다! 방문을환영합니다! 방문을환영합니다! 반복구조를사용하지않는다면다음과같이동일한문장을 + 를사용하여복사한후에 + 로붙여넣기하여야한다. print(" 방문을환영합니다!") print(" 방문을환영합니다!") print(" 방문을환영합니다!") print(" 방문을환영합니다!") print(" 방문을환영합니다!") 물론반복횟수가몇번안되는경우에는위와같이 복사해서붙여넣기 하여도된다. 하지만 1000번반복해야한다면어떻게할것인가? 이런경우에 for 문을사용한다면다음과같이간단하게작성할수있다. for i in range(1000): print(" 방문을환영합니다!") CHAPTER 6 반복해봅시다 159

03 반복의종류 파이썬에서는 2 가지종류의반복이있다. 횟수제어반복 (for 문 ): 정해진횟수만큼반복한다. 조건제어반복 (while 문 ): 특정한조건이만족되면계속반복한다. 횟수제어반복은반복을시작하기전에반복의횟수를미리아는경우에사용한다. 예를들어서 환영합니다 문장을 10번번복하여출력한다면 for 문을사용할수있다. 파이썬에서는항목들을모아놓은시퀀스라는객체가있고여기에서항목을하나씩가져와서반복하게된다. 시퀀스에항목이더이상없으면반복이종료된다. 시퀀스에항목이있는가? 문장을실행한다. for 변수 in 시퀀스 : 문장 시퀀스의다음항목 시퀀스에더이상항목이없으면 조건제어반복은특정한조건이만족되는동안계속반복한다. 조건 조건이거짓이면 조건이참이면 문장을실행한다. NOTE 프로그래밍에서반복은흔히루프 (loop) 라고한다. 왜냐하면프로그램이반복할때이전단 계로되돌아가는데이것이동그라미를그리는것처럼보이기때문이다. 160 두근두근파이썬

04 횟수제어반복 #1 파이썬에서횟수제어반복은 for 루프라고도한다. 왜냐하면많은언어에서횟수제어반복을 키워드 for 를사용하여제공하고있기때문이다. print(" 방문을환영합니다!") 5 번반복하고빠져나가시오! 다음과같은코드를파일에입력하고실행해보자. for i in [1, 2, 3, 4, 5]: print(" 방문을환영합니다.") # 끝에 : 이있어야함 # 들여쓰기하여야함 반복되는문장은반드시들여쓰기하여야한다. 여기서 [...] 은리스트 (list) 라고한다. 리스트는여러가지값들을담을수있는컨테이너이다. [1, 2, 3, 4, 5] 안에는정수 1, 2, 3, 4, 5가담겨있다. 위의코드를실행하면다음과같은출력을얻을수있다. 방문을환영합니다! 방문을환영합니다! 방문을환영합니다! 방문을환영합니다! 방문을환영합니다! CHAPTER 6 반복해봅시다 161

print(...) 문장이리스트에있는숫자들의개수만큼반복된다. 1 첫번째반복에서변수 i의값은리스트의첫번째숫자인 1이되고 print(...) 문장이실행된다. 2 두번째반복에서변수 i의값은리스트의두번째숫자인 2가되고 print(...) 문장이실행된다. 3 세번째반복에서변수 i의값은리스트의세번째숫자인 3이되고 print(...) 문장이실행된다. 4 네번째반복에서변수 i의값은리스트의네번째숫자인 4가되고 print(...) 문장이실행된다. 5 다섯번째반복에서변수 i의값은리스트의다섯번째숫자인 5가되고 print(...) 문장이실행된다. NOTE 여기서반복되는문장들은반드시들여쓰기하여야한다. 들여쓰기는스페이스 4개로하는것이좋다. 만약 IDLE를사용하고있다면파이썬쉘이자동으로들여쓰기를해줄것이다. 파이썬에서들여쓰기하여서입력한문장들을묶어서블록 (block) 이라고한다. 블록에속하는문장들은운명공동체이다. 반대로들여쓰기되지않은문장은블록에속하지않는다. 반복을원하는않는문장은들여쓰기를하지않으면된다. 블록은함수를정의할때도요긴하게사용된다. 블록은문장들의묶음임을기억하자. 파이썬에서는들여쓰기로블록을생성한다. 162 두근두근파이썬

05 횟수제어반복 #2 앞페이지에서는변수 i의값을전혀이용하지않았다! 이번에는반복하면서변수 i의값을출력해보자. for i in [1, 2, 3, 4, 5]: print("i=", i) 위의코드를실행하면다음과같이출력된다. i= 1 i= 2 i= 3 i= 4 i= 5 이번에는구구단중에서 9 단중의일부를 for 루프를이용하여출력해보자. for i in [1, 2, 3, 4, 5]: print("9*", i, "=", 9*i) 9* 1 = 9 9* 2 = 18 9* 3 = 27 9* 4 = 36 9* 5 = 45 CHAPTER 6 반복해봅시다 163

06 횟수제어반복 #3 앞에서는리스트에정수들을저장해두고하나씩꺼내서반복하였다. 하지만반복횟수가 1,000번이라면이방법이불가능하다. 반복해야하는횟수가큰경우를대비하여 range() 함수를사용하는방법이준비되어있다. range() 함수로반복횟수를전달하면 range() 함수가자동으로정수들을생성해준다. 문법 6.1 for 문 0 에서 ( 종료값 -1) 까지의숫자를반환한다. for 변수 in range( 종료값 ) : 문장 반복되는문장으로들여쓰기하여야한다. 예를들어서 방문을환영합니다. 를 5 번출력하는문장을 for 문으로작성하면다음과같다. for i in range(5): # (1) print(" 방문을환영합니다!") # (2) 방문을환영합니다! 방문을환영합니다! 방문을환영합니다! 방문을환영합니다! 방문을환영합니다! (1) range(5) 는 0, 1, 2, 3, 4까지의값을반환한다. 반복할때마다변수 i에이값들을대입하면서문장을반복한다. 즉첫번째반복에서는 i는 0이고되고두번째반복에서는 1이된다. 마지막반복에서 i는 4가된다. (2) 반복되는문장은들여쓰기하여야한다. 들여쓰기가있는문장들만이반복된다. 파이썬쉘에서 range() 함수에 list() 함수를적용하면 range() 함수가생성하는정수들을볼수있다. >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 164 두근두근파이썬

07 range() 함수 range() 함수는숫자들을생산하는공장으로생각하면된다. range(5) 는 5개의정수를생성한다. 0, 1, 2, 3, 4가바로그것이다. for 루프 0 1 2 3 4 range(5) range() 함수의일반적인형식은다음과같다. range(start, stop, step) 이라고호출하면 start에서시작하여 (stop-1) 까지 step 간격으로정수들이생성된다. 여기서 start와 step이생략되면 start는 0으로간주되고 step은 1로간주된다. 문법 6.2 range() 함수 시작값이다. 종료값이지만 stop 은포함되지않는다. 한번에증가되는값이다. range(start=0, stop, step=1) 예를들어서 range(0, 5, 1) 이라고하면 0, 1, 2, 3, 4까지의정수가반환된다. range(5) 이라고하면 start와 step은생략된것으로 range(0, 5, 1) 와같다. 만약 1부터시작하여서 5까지반복하고싶다면어떻게하면될까? range(1, 6, 1) 을사용하면될것이다. 반복하면서변수 i의값을출력해보자. for i in range(1, 6, 1): print(i, end=" ") 1 2 3 4 5 end=" " 와같이지정하면줄이바뀌지않고한줄에전부출력됩니다. CHAPTER 6 반복해봅시다 165

만약 10부터시작하여서 1까지반복하고싶다면어떻게하면될까? range(10, 0, -1) 을사용하면될것이다. 반복하면서변수 i의값을출력해보자. for i in range(10, 0, -1): print(i, end=" ") 10 9 8 7 6 5 4 3 2 1 경고 range(10) 함수를사용할때가장혼동하는부분이 1에서 10까지의정수가생성된다고생각하는것이다. 반복횟수로생각하면 10번반복은맞다. 하지만생성되는정수는 0부터 9까지이다. 이것은컴퓨팅의오랜논쟁거리였다. 최근에는 0부터시작하는것이대세가되었다. 암튼 range(10) 하면 10번반복되고생성되는정수는 0부터 9까지이다. 만약 1부터 10까지의정수가필요하면 range(1, 11) 로하면된다. 166 두근두근파이썬

08 예제 : 6 개의원그리기 이번에는터틀그래픽을시용하여반복을설명해보자. 예를들어, 터들을 60도만큼회전시키면서화면에 6개의원을그린다고가정하자. 반복을사용하지않는다면다음과같이코드를작성하여야한다. import turtle t = turtle.turtle() t.circle(100) # 반지름이 100 인원을그린다. t.left(60) # 60 도만큼터틀을왼쪽으로회전시킨다. t.circle(100) t.left(60) t.circle(100) t.left(60) t.circle(100) t.left(60) t.circle(100) t.left(60) t.circle(100) 물론이렇게그려도되지만상당한코드가반복되어있다. 따라서이런경우에는반복을사용하는것이좋다. 어떻게하면좋을까? 위의코드를분석해보면 60도회전하고원을그리는문장이 6번반복된다. 따라서 for 루프를이용하여작성해보자. import turtle t = turtle.turtle() for count in range(6): t.circle(100) t.left(360/6) 6번반복해야하므로 range(6) 을호출하여서 6개의숫자 [ 0, 1, 2, 3, 4, 5 ] 를생성하였다. 각반복에서는반지름이 100인원을그리고, 터틀을 60도만큼회전시키고있다. CHAPTER 6 반복해봅시다 167

Lab 반복을사용하여도형을그리자 실습시간 터틀그래픽에서도반복을사용할수있다. 정삼각형과정사각형을반복을이용하여화면에그려보자. 같은문장을반복해서적을필요가없다. 여기를가리고먼저풀어보세요! 소스코드 import turtle t = turtle.turtle() t.shape("turtle") # 정삼각형그리기 for i in range(3): t.forward(100) t.left(360/3) # 이동하기 t.penup() t.goto(200, 0) t.pendown() # 정사각형그리기 for i in range(4): t.forward(100) t.left(360/4) 도전문제정육각형은어떻게그리면되는가? 반드시반복을사용해서화면에그려보자. 168 두근두근파이썬

Lab n- 각형그리기 실습시간 우리는앞에서반복을이용하여정삼각형과정사각형을그려보았다. 사용자로부터정수 n을받아서 n-각형을그리는프로그램을작성할수있는가? textinput() 을이용하여사용자로부터정수를입력받자. 여기를가리고먼저풀어보세요! 소스코드 import turtle t = turtle.turtle() t.shape("turtle") s = turtle.textinput("", " 몇각형을원하시나요?:") n=int(s) for i in range(n): t.forward(100) t.left(360/n) 도전문제 n- 각형의한변의크기도사용자로부터받아보자. forward(100) 이아니고 forward(len) 가되도록하라. CHAPTER 6 반복해봅시다 169

Lab 거북이를랜덤하게움직이게하자 실습시간 터틀그래픽에서거북이가술에취한것처럼랜덤하게움직이게해보자. 난수를발생시키는것은아주많이사용되는작업이다. 파이썬에서는다음과같은문장으로난수를발생할수있다. import random number = random.randint(1, 100) randint(1, 100) 이라고호출하면 1 에서 100 사이의난수가생성된다. 반복과난수를결합하면거북이를랜덤하게움직일수있다. 간단하게알고리즘을만들어보면다음과같다. 알고리즘 30번반복 * [1, 100] 사이의난수를발생하여변수 length에저장한다. * 거북이를 length만큼움직인다. * [-180, 180] 사이의난수를발생하여변수 angle에저장한다. * 거북이를 angle만큼회전시킨다. 다음페이지를보기전에먼저풀어보세요 170 두근두근파이썬

Lab 거북이를랜덤하게움직이게하자 Solution 소스코드 1 import turtle 2 import random 3 t = turtle.turtle() 4 t.shape("turtle") 5 6 for i in range(30): 7 length = random.randint(1, 100) 8 t.forward(length) 9 angle = random.randint(-180, 180) 10 t.right(angle) 1 turtle 모듈을포함한다. 2 random 모듈을포함한다. 3 터틀윈도우를생성한다. 4 터틀의모양을거북이로변경한다. 5 빈줄이다. 6 30번반복한다. 7 1부터 100 사이의난수를생성하여 length 변수에저장한다. 8 length만큼거북이를전진시킨다. 9-180 부터 180 사이의난수를생성하여 angle 변수에저장한다. 10 angle 변수만큼거북이를오른쪽으로회전한다. 실행할때마다결과는달라진다. 도전문제거북이가 90도로만방향을전환할수있다면위의프로그램은어떻게수정되어야할까? 거북이는 90도, 180도, 270도, 360도중에서하나를선택하여앞으로전진한다. CHAPTER 6 반복해봅시다 171

Lab 팩토리얼계산하기 실습시간 for문을이용하여서팩토리얼을계산해보자. 팩토리얼 n! 은 1부터 n까지의정수를모두곱한것을의미한다. 즉, n! = 1 2 3 (n-1) n 이다. 정수를입력하시오 : 10 10! 은 3628800 이다. 여기를가리고먼저풀어보세요! 소스코드 n = int(input(" 정수를입력하시오 : ")) fact = 1 for i in range(1, n+1): fact = fact * i print(n, "! 은 ", fact, " 이다.") 팩토리얼의값은생각보다아주커질수있다. 여기서 fact의초깃값은반드시 1이어야한다. 0 이면안된다. 왜냐하면팩토리얼은정수를전부곱해서계산하는것이므로초깃값이 0이면결 과는 0이되어버린다. 따라서반드시 1로초기화를시켜야한다. n이 5라고하면다음과같이반복이진행된다. i의값 반복여부 fact의값 1번째반복 1 반복 1*1 2번째반복 2 반복 1*1*2 3번째반복 3 반복 1*1*2*3 4번째반복 4 반복 1*1*2*3*4 5번째반복 5 반복 1*1*2*3*4*5 172 두근두근파이썬

09 조건제어반복 조건제어반복은어떤조건이만족되는동안반복하기때문에붙여진이름이다. 예를들어서엄마가요리하고있고꼬마가엄마의요리를기다리고있다고가정하자. 꼬마는엄마의요리가다됐는지를지속적으로물어본다. 만약엄마의대답이 아니 이면꼬마는약간기다렸다가다시물어본다. 엄마의대답이 아니 가아니면꼬마는엄마의요리를먹을수있을것이다. 이런경우에조건제어반복을사용한다. 파이썬에서는조건제어반복을위하여 while 루프를제공하고있다. response =input(" 엄마, 다됐어?") response=" 아니 " response==" 아니 " print(" 먹자 ") 참 거짓 파이썬에는조건제어루프로 while 문이있다. while 문은반복의횟수는모르지만, 반복의조건은알고있는경우에사용하는반복구조이다. 문법 6.2 while 루프 반복을하는조건이다. 조건이참이면반복을계속한다. while 조건 : 반복문장반복되는문장이다. 위의예를프로그램으로작성해보면다음과같다. response = " 아니 " while response == " 아니 ": response = input(" 엄마, 다됐어?"); print(" 먹자 ") CHAPTER 6 반복해봅시다 173

10 예제 : 로그인프로그램 어떤경우에반복되는횟수를알수없을까? 가장대표적인경우가사용자로부터어떤값을받아서처리할때이다. 사용자가입력하는값을예측하기힘들기때문이다. 예를들어서사용자가암호를입력하고프로그램에서암호가맞는지를체크한다고하자. 알고리즘을생각해보자. 암호는 pythonisfun 이라고가정하자. 알고리즘 1. 암호 ="" 2. 암호가 "pythonisfun" 이아니면다음을반복한다. * 사용자로부터암호를입력받는다. 3. " 로그인성공 " 을출력한다. 이알고리즘은암호가올바르게입력될때까지반복한다. 사용자가몇번만에올바른암호를입력할지를미리알수없기때문에조건제어루프가사용되었다. 이알고리즘을파이썬으로구현하면다음과같다. password = "" while password!= "pythonisfun": password = input(" 암호를입력하시오 : ") print(" 로그인성공 ") 암호를입력하시오 : idontknow 암호를입력하시오 : 12345678 암호를입력하시오 : password 암호를입력하시오 : pythonisfun 로그인성공 이예제에서의조건은입력된암호가 pythonisfun 인지여부이다. 알고리즘이조건이참인지를검사한다. 만약참이면알고리즘은 로그인성공 이라는메시지를출력하고종료한다. 만약거짓이면알고리즘은루프의처음으로돌아가서조건이참이될때까지실행을계속한다. 174 두근두근파이썬

11 추가예제 횟수를알수없는경우에만 while 루프를사용할수있는것은아니다. 횟수를알고있는경우에도 while 루프를사용할수있다. 예제 : 1 부터 10 까지의합계산 예를들어서 1 부터 10 까지의합을계산하는예제를 while 루프로작성해보자. count = 1 sum = 0 while count <= 10 : sum = sum + count count = count + 1 print(" 합계는 ", sum) 합계는 55 count sum count<=10 반복여부 1 1 True 반복 2 1+2 True 반복 3 1+2+3 True 반복 4 1+2+3+4 True 반복 5 1+2+3+4+5 True 반복 6 1+2+3+4+5+6 True 반복 7 1+2+3+4+5+6+7 True 반복 8 1+2+3+4+5+6+7+8 True 반복 9 1+2+3+4+5+6+7+8+9 True 반복 10 1+2+3+4+5+6+7+8+9+10 True 반복 11 1+2+3+4+5+6+7+8+9+10 False 반복중단! CHAPTER 6 반복해봅시다 175

예제 : 사각형그리기 while 루프를이용하여서화면에사각형을그리는코드를작성해보자. import turtle t = turtle.turtle() i = 0 while i < 4: t.forward(100) t.right(90) i = i + 1 변수 i가루프를제어한다. i의초깃값은 0이고반복할때마다 1씩증가하여서 4가되면반복은종료된다. 변수 i가 0 1 2 3 과같이증가되면서반복이실행되기때문에 4번반복한다. 한번반복할때마다터틀은 100픽셀전진하고오른쪽으로 90도회전한다. 따라서사각형이화면에그려진다. 176 두근두근파이썬

Lab 구구단출력 실습시간 구구단중에서 9단을반복문을이용하여출력해보자. 9*1, 9*2, 9*3,.., 9*9까지 9번반복시키면출력하면될것이다. 원하는단은 : 9 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 여기를가리고먼저풀어보세요! 소스코드 dan = int(input(" 원하는단은 : ")) i = 1 while i <= 9: print("%s*%s=%s" % (dan, i, dan*i)) i = i + 1 %s 자리에변수의값이출력된다. 변수 i 의초기값은 0 보다는 1 인것이편리하다. 도전문제구구단의 1 단부터 9 단까지를모두출력하도록위의프로그램을수정해보자. CHAPTER 6 반복해봅시다 177

Lab 별그리기 실습시간 여러분이앞의예제를이해하고실행해보았다면아마다음문제도쉽게해결할수있을것이다. 반복문을사용하여별을그려보자. 5번반복하고반복할때마다거북이를 50픽셀만큼전진시키고오른쪽으로 144도회전하면별이그려진다. 스크립트모드로다음과같은소스를입력하여실행하여본다. 물론번호는입력하면안된다! 1 import turtle 2 t = turtle.turtle() 3 t.shape("turtle") 4 i = 0 5 while i < 5: 6 t.forward(50) 7 t.right(144) 8 i = i + 1 1 turtle 모듈을포함시킨다. 2 터틀그래픽이그려지는윈도우를생성한다. 3 터틀의모습을화살표에서거북이로변경한다. 4 변수 i에 0을저장한다. 5 변수 i가 5보다작을때까지반복한다. 6 거북이를 50픽셀만큼전진시킨다. 7 거북이를 144도만큼오른쪽으로회전시킨다. 8 변수 i를 1만큼증가시킨다. 도전문제무한루프위의코드에서 8번문장을삭제하고실행시켜보자. 어떤일이발생하는가? 이것을무한루프라고한다. 거북이가무척고생을한다. 178 두근두근파이썬

Lab 스파이럴그리기 실습시간 반복문을터틀그래픽과결합하면상당히복잡한형상을쉽게그릴수있다. 예를들어서다음과같은그림을그릴수있다. 화면에사각형을그리는것이지만한번반복할때마다각도가 90도가아니고 89도로하면약간씩회전되는사각형을그리는것이가능하다. 많은사각형을반복해서그리면위와같은그림이얻어진다. 색상은리스트에저장했다가하나씩꺼내서변경하도록하자. colors = ["red", "purple", "blue", "green", "yellow", "orange" ] 배경색은다음과같은문장으로변경이가능하다. turtle.bgcolor("black") 거북이의속도는 0 으로설정하면최대가된다. t.speed(0) 거북이가그리는선의두께는 width() 를호출하면된다. t.width(3) 다음페이지를보기전에먼저풀어보세요 CHAPTER 6 반복해봅시다 179

Lab 스파이럴그리기 Solution 실습시간소스코드 import turtle # 색상은리스트에저장했다가하나씩꺼내서변경하도록하자. colors = ["red", "purple", "blue", "green", "yellow", "orange" ] t = turtle.turtle() # 배경색은다음과같은문장으로변경이가능하다. turtle.bgcolor("black") # 거북이의속도는 0 으로설정하면최대가된다. t.speed(0) # 거북이가그리는선의두께는 width() 를호출하면된다. t.width(3) length = 10 # 초기선의길이는 10 으로한다. # while 반복문이다. 선의길이가 500보다작으면반복한다. while length < 500: t.forward(length) # length만큼전진한다. t.pencolor(colors[length%6]) # 선의색상을변경한다. t.right (89) # 89도오른쪽으로회전한다. length += 5 # 선의길이를 5만큼증가한다. 도전문제각반복에서거북이가회전하는각도를약간다르게해서결과가어떻게달라지는지본다. 180 두근두근파이썬

Lab 사용자가입력하는숫자의합계산하기 사용자가입력한숫자들을더하는프로그램을작성해보자. 사용자가 yes라고답한동안에만숫자를입력받는다. 숫자를입력하시오 : 10 계속?(yes/no): yes 숫자를입력하시오 : 20 계속?(yes/no): no 합계는 : 30 알고리즘을작성해보자. 알고리즘 1. total을 0으로설정한다. 2. answer를 'yes' 로설정한다. 3. answer가 'yes' 인동안에다음을반복한다. * 숫자를입력받는다. * 숫자를 total에더한다. * ' 계속? yes/no' 을묻는다. 4. total의값을출력한다. 이알고리즘은루프의끝에서사용자가입력하는문자열이 no 일때까지반복을계속한다. 즉, 더할숫자들이남아있으면반복을계속한다. 알고리즘이정지하기전에얼마나많은숫자들이입력될지알수없기때문에조건제어루프가사용되었다. 다음페이지를보기전에먼저풀어보세요 CHAPTER 6 반복해봅시다 181

Lab 사용자가입력하는숫자의합계산하기 Solution 실습시간소스코드 total = 0 answer = "yes" while answer == "yes": number = int(input(" 숫자를입력하시오 : ")) total = total + number answer = input(" 계속?(yes/no): ") print(" 합계는 : ", total) while 루프를사용한다. 조건 answer = yes 가반복을제어하기위하여사용되었다. 반복이한번이라도수행되려면 answer의초깃값은 yes 이어야한다. 변수 answer가 yes 인지를검사한다. 조건이참이면프로그램은반복을계속한다. 조건이거짓이면프로그램은다음단계로이동한다. 조건제어루프에서어떤경우에서반복이전혀되지않을때가있다. 이것은 while 루프에서는반복이시작되기전에조건을검사하기때문이다. 만약조건이거짓이면반복이전혀일어나지않는다. 다음파이썬코드를보자. total = 0 answer = "no" while answer == "yes": number = int(input(" 숫자를입력하시오 : ")) total = total + number answer = input(" 계속?(yes/no) ") print(" 합계는 : ", total) 프로그램이실행되었을때, while 루프의조건이참이되지않는다. 따라서프로그램은반복문의내부에있는문장을실행하지않고지나가게된다. Tip 조건제어루프는사전에반복이몇번일어날지를알수없는경우에사용된다. 182 두근두근파이썬

Lab 숫자맞추기게임 이예제는프로그램이가지고있는정수를사용자가알아맞히는게임이다. 사용자가답을제시하면프로그램은자신이저장한정수와비교하여제시된정수가더높은지낮은지만을알려준다. 정수의범위를 1부터 100까지로한정하면최대 7번이면누구나알아맞힐수있다. 정수의범위를 1부터 1,000,000 까지확대하더라도최대 20번이면맞출수있다. 왜그럴까? 이진탐색의원리때문이다. 정렬되어있는숫자중에서중간값 50 86 과한번씩비교할때마다탐색의범위는 1/2로줄어든다. 예를들어서 1부터 100 사이에서 50 과비교하여서 50보다작다는답변을들었다면, 다음탐색범위는 1부터 50이된다. 그렇지만물론게임이기때문에운도따른다. 게임이끝나면몇번만에맞추었는지도함께출력하자. 1부터 100 사이의숫자를맞추시오숫자를입력하시오 : 50 낮음! 숫자를입력하시오 : 86 낮음! 숫자를입력하시오 : 87 축하합니다. 시도횟수 = 3 프로그램은반복루프를사용하여사용자가정확하게정수를알아맞힐때까지반복한다. 반복루프중에서 while 루프가적당한데반복횟수를미리알수없기때문이다. 사용자가정답을알아맞히면몇번만에알아맞혔는지를화면에출력한다. 사용자가제시한정수와정답을비교하는데 if 문이사용된다. 알고리즘 while guess!= answer 사용자로부터숫자를 guess로입력받는다. 시도횟수를증가한다. if( guess < answer ) 숫자가낮다고출력한다. if( guess > answer ) 숫자가높다고출력한다. " 축하합니다 " 와시도횟수를출력한다. 다음페이지를보기전에먼저풀어보세요 CHAPTER 6 반복해봅시다 183

Lab 숫자맞추기게임 Solution 실습시간소스코드 import random tries = 0 guess = 0; answer = random.randint(1, 100) print("1 부터 100 사이의숫자를맞추시오 ") while guess!= answer: guess = int(input(" 숫자를입력하시오 : ")) tries = tries + 1 if guess < answer: print(" 낮음!") elif guess > answer: print(" 높음!") if guess == answer: print(" 축하합니다. 시도횟수 =", tries) else: print(" 정답은 ", number) 3개의변수가선언되어서사용된다. 변수 answer는정답을저장하고있다. 변수 guess에는사용자가입력한정수가저장된다. 만약 answer와 guess가일치하면반복이종료된다. tries 는사용자의시도횟수를기록한다. 반복루프는 while 루프를이용하여구현되었다. while 루프의조건검사부분에서 guess가 answer와같은지를검사한다. 만약 guess가 answer와같으면반복을중단하고시도횟수를출력한다음에종료한다. 사용자로부터정수를입력받은후에, 이것을 answer에저장된정수와비교한다. if 문을사용하여 guess가 number보다작은지큰지를검사하여적당한메시지를출력한다. 도전문제시도횟수를최대 10 번으로제한하려면위의프로그램을어떻게변경하여야하는가? 184 두근두근파이썬

Lab 초등생을위한산수문제발생기 실습시간 초등학생들을위하여산수문제를발생시키는프로그램을작성해보자. 9 + 48 = 57 잘했어요!! 65 + 11 = 76 잘했어요!! 91 + 31 = 11 다음번에는잘할수있죠? 38 + 4 = 난수가필요하다. 파이썬에서난수는다음과같이생성이가능하다. 아래코드는 1부터 100 사이의난수를발생한다. import random number = random.randint(1, 100) 무한루프를사용하고사용자가 + 를누르면종료하는것으로하자. 여기를가리고먼저풀어보세요! 소스코드 import random while True: x = random.randint(1, 100) y = random.randint(1, 100) print(x, "+", y, "=", end= " ") answer = int(input()) if answer == x + y: print(" 잘했어요!!") else: print(" 다음번에는잘할수있죠?") 도전문제덧셈뿐만아니라뺄셈문제도출제할수있도록위의프로그램을수정하라. CHAPTER 6 반복해봅시다 185

Lab 모든샌드위치종류출력하기 실습시간 우리가샌드위치가게를한다고가정하자. 우리가게에서가능한모든샌드위치의종류를출력하고싶다. 빵의종류는 호밀빵, 위트, 화이트 가가능하다. 고기로는 미트볼, 소시지, 닭가슴살, 야채로는 양상추, 토마토, 오이 등이가능하다. 소스로는 마요네즈, 허니머스타드, 칠리 등이가능하다. 한가지씩만선택이가능하다고하자. 가능한조합은어떻게될까? 여기를가리고먼저풀어보세요! 소스코드 breads = [" 호밀빵 ", " 위트 ", " 화이트 " ] meats = [" 미트볼 ", " 소시지 ", " 닭가슴살 "] vegis = [" 양상추 ", " 토마토 ", " 오이 "] sauces = [" 마요네즈 ", " 허니머스타드 ", " 칠리 "] for b in breads: for m in meats: for v in vegis: for s in sauces: print(b+"+"+m+"+"+v+"+"+s) 186 두근두근파이썬

12 무한루프와 break 조건제어루프에서가끔은프로그램이무한히반복하는일이발생한다. 이것은무한루프 (infinite loop) 로알려져있다. 무한반복이발생하면프로그램은빠져나올수없기때문에문제가된다. 하지만가끔은무한루프가사용되는데예를들면신호등제어프로그램은무한반복하여야하기때문이다. 무한반복루프는다음과같은형태를가진다. 문법 6.3 break 문 while True : 반복문장반복문장 if 조건 : break; while 루프의조건에 True가있다. 따라서조건이항상참이므로무한히반복된다. 하지만무한루프라고하더라도어떤조건이성립하면무한루프를빠져나와야하는경우도많다. 이런경우는 if 문장을사용하여서루프를빠져나오게된다. break 문장은루프를강제적으로빠져나올때사용하는문장이다. 간단한예제를작성해보면다음과같다. while True: light = input(' 신호등색상을입력하시오 ') if light == 'blue': break print(' 전진!!') 위의코드에서는화면에 신호등색상을입력하시오 을출력하고사용자의입력을기다린다. while True: 로되어있으므로무한루프이다. 사용자가 blue 를입력하면 break 문장을실행하여서무한루프를빠져나간다. blue 가아니면계속반복한다. CHAPTER 6 반복해봅시다 187

Lab 시계그리기 실습시간 터틀그래픽을이용하여시계를작성해보자. 터틀그래픽의 stamp() 함수를호출하면그위치에거북이를찍을수있다. 여기를가리고먼저풀어보세요! 소스코드 import turtle t = turtle.turtle() t.shape("turtle") t.color("red") t.stamp() move = 30 for i in range(12): # 12번반복 t.penup() # 펜을올린다. t.forward(50) # 50만큼전진 t.pendown() # 펜을내린다 t.forward(25) t.penup() t.forward(15) t.stamp() t.home() t.right(move) move = move+30 188 두근두근파이썬

Lab 점치는게임 실습시간사용자가질문을하면운세를점치는프로그램을작성해보자. 우리도아침에일어나서오늘의운세를점칠때, 사용할수있을거같다. 난수가필요하다. 파이썬에서난수는다음과같이생성이가능하다. 아래코드는 1부터 8 사이의난수를발생한다. import random number = random.randint(1, 8) 난수기능을이용하여랜덤한답변을내보내면된다. 답변의종류는 8가지로하자. 여러분들은얼마든지답변의수를늘릴수있다. 이름 : ( 종료하려면엔터키 ) 홍길동무엇에대하여알고싶은가요? 취직은될까요? 홍길동님 " 취직은될까요? " 에대하여질문주셨군요. 운명의주사위를굴려볼게요... 한점의의심도없이맞습니다. 도전문제위의프로그램은얼마든지다른방식으로작성이가능하다. 8개의문자열을 8개의변수에저장하고 if 문에서는해당변수를출력하는식으로코드를변경해보자. 다음페이지를보기전에먼저풀어보세요 CHAPTER 6 반복해봅시다 189

Lab 점치는게임 Solution 소스코드 import sys import random while True: name = input(" 이름 : ( 종료하려면엔터키 ) ") if name == "": sys.exit() 프로그램을종료한다. question = input(" 무엇에대하여알고싶은가요? ") print(name+ " 님 ", "\"", question, "\" 에대하여질문주셨군요.") print(" 운명의주사위를굴려볼게요...") answers = random.randint(1, 8) if answers == 1: print (" 네, 확실합니다. ") elif answers == 2: print (" 전망이좋은거같은데요.") elif answers == 3: print (" 믿으셔도됩니다.") elif answers == 4: print (" 글쎄요아닌거같군요.") elif answers == 5: print (" 한점의의심도없이맞습니다.") elif answers == 6: print (" 그럼요, 명백히올바른선택을했습니다. ") elif answers == 7: print (" 제답변은 No 입니다.") else : print (" 나중에다시물어보세요.") 1에서 8 사이의난수를발생한후에난수의값에따라서 if-else 구조를사용하여답변을다르게하면된다. 위에서 sys 모듈을포함시켰는데, exit() 함수를사용하기위해서이다. 만약사용자가이름을입력하지않고엔터키를치면 name은비어있게되고이것을 if 문으로검사하여 exit() 를호출하면전체프로그램이종료된다. 190 두근두근파이썬

이번장에서배운것 이번장에서반복에대하여살펴보았다. for 문과 while 문은들여쓰기된문장들을반복한다. while 문은루프의첫부분에서반복조건을검사한다. for 문은시퀀스에서항목들을하나씩가져다가반복한다. 이번장에서의반드시기억해야할핵심적인내용은다음과같다. 문장들을반복실행하려면 for나 while을사용한다. 반복실행되는문장들을들여쓰기하여야한다. for 문은반복회수를정해져있을때유용하다. while 문은반복조건이정해져있을때유용하다. 반복문의초입에서조건식은검사된다. 100 번반복하는문장을 for 로만들어보세요. for i in range(100):... 100 번반복하는문장을 while 로만들어보세요. i=0 while i<100:... i++; 어떤반복구조가편한가요? 약간은 for 가편한거같네요. 하지만반복횟수를모를때는 while 을써야겟죠? CHAPTER 6 반복해봅시다 191

연습문제 1 2 부터 100 사이의모든짝수를출력하는반복루프를작성한다. HINT x%2 한결과가 0 이면 x 는짝수이다. 2 어떤사람이복리이자율 7% 로 1000만원을저금했을경우에 2000만원이되는데몇년이걸리는지계산하기위하여다음과코드를작성하였다. 잘못된점은없는지체크해보자. year = 0 balance = 1000 while balance >= 2000 : year = year + 1 interest = balance * 0.07 balance = balance + interest print(year, " 년이걸립니다.") HINT 반복조건을유심히살펴보자. 3 다음코드의출력을예상해보자. 각단계에서변수의값을예상해보시오. n = 1234 sum = 0 while n > 0 : digit = n % 10 sum = sum + digit n = n // 10 print(sum) HINT % 는나머지를계산하는연산자이다. // 은나눗셈에서몫을계산한다. 192 두근두근파이썬

4 사용자에게곱셈퀴즈를내고답을사용자로부터받는프로그램에서사용자가올바른답을입력할때까지반복하도록수정하여보자. HINT 어떤조건이만족될때까지반복하는것은 while 루프이다. 5 사용자가입력한정수의합을계산하는프로그램을작성하자. 사용자가 0을입력하기전까지정수를계속하여읽도록한다. HINT 무한루프를작성하고사용자가입력한값이 0이면 break 문장을실행하여반복루프를빠져나간다. 무한루프는 while True: 로만든다. 6 난수생성함수를사용하여서 2개의주사위를던졌을때나오는수를다음과같이출력하여보자. HINT 1부터 6 사이의난수를발생하려면 r = random.randint(1, 6) 문장을사용한다. 프로그램의첫부분에 import random 문장도추가해야한다. CHAPTER 6 반복해봅시다 193

7 터틀그래픽과반복을사용하여눈모양을그려보자. HINT 하나의패턴을그리는코드는다음과같다. t.forward(100); t.forward(-30); t.left(60); t.forward(30); t.forward(-30); 파이썬에서문장뒤에 ; 기호를붙이면한줄에여러개의문장을쓸수있다. 8 우리는이번장에서터틀그래픽으로별을그려보았다. 이코드를응용하여서다음과같이 10개의별을그리는프로그램을작성하라. 별들은시작각도가약간씩다르다. HINT 별을그리는코드를반복한다. 하나의별을그리는반복이끝나면 left(10) 을실행한다. 194 두근두근파이썬

9 반복과난수를함께사용하면화면에랜덤한원을그릴수있다. 화면에 10개의랜덤한원을그리는프로그램을작성하라. 원의중심과반지름이모두난수이어야한다. HINT 1부터 100 사이의난수를발생하려면 r = random.randint(1, 100) 문장을사용한다. 프로그램의첫부분에 import random 문장도추가해야한다. 원의중심, 원의반지름을모두난수로설정한다. 10 다음과같이거북이를왕복달리기시키는프로그램을작성해보자. HINT 거북이가현재바라보고있는방향을잘설정하여야한다. CHAPTER 6 반복해봅시다 195

11 다음의터틀그래픽프로그램을분석해보자. 학습하지않은함수가있다면인터넷에서조사하여보자. import turtle t = turtle.turtle() t.shape("turtle") t.color('red', 'yellow') t.begin_fill() while True: t.forward(200) t.left(170) if abs(t.pos()) < 1: break t.end_fill() HINT color(c1, c2) 함수는도형의선색상과채우기색상을 c1과 c2로설정한다. begin_fill() 를호출하면속이채워진도형이그려진다. pos() 함수는거북이의좌표를반환한다. abs() 는절대값을계산한다. break는반복루프를빠져나오는명령어이다. 12 터틀그래픽과반복을사용하여싸인 (sine) 그래프를그려보자. 거북이를싸인값에따라서움직이면된다. HINT 싸인값은 sin() 함수로계산이가능하다. 프로그램의첫부분에 import math를추가한다. 각도를라디안으로변환하여야한다. radian = 3.14 * degree / 180.0 수식을사용한다. 196 두근두근파이썬