book.dvi
|
|
- 예인 현
- 8 years ago
- Views:
Transcription
1 정보교육을 위한파이썬 정보탐색을통한데이터과학자로의여정 Version d2 저자: Charles Severance 번역: 이광춘 (xwmooc)
2 Copyright Charles Severance.한국어번역 : 이광춘(xwMOOC) 출판 이력: 2014년 12월: 한국어색인,그림한글번역,목차한글반영,주요용어표준화 2014년 9월: xwmooc프로젝트 일환으로 정보과학을 위한파이썬 으로제목정하고 한국어로번역공개 2013년 10월: JSON로전환, OAuth사용. 13장, 14장에주요개정,신규시각화 장추가. 2013년 9월: Amazon CreateSpace책출판 2010년 1월 : 미시건 대학 Espresso Book Machine 사용 책 출판 2009년 12월: Think Python: How to Think Like a Computer Scientist에서 2장 ~ 10장까 지주요개정 Python for Informatics: Exploring Information을 위해 1장, 11장~15장저작 2008년 6월: Think Python: How to Think Like a Computer Scientist제목바꾸고,주요 개정. 2007년 8월: How to Think Like a (Python) Programmer제목바꾸고,주요개정. 2002년 4월: How to Think Like a Computer Scientist초판공개 이 책은 크리에이티브 커먼즈 라이선스 3.0 (Creative Commons Attribution- NonCommercial-Share Alike 3.0)으로 인가되었다. 라이선스의 자세한 사항은 creativecommons.org/licenses/by-nc-sa/3.0/에 기재되어 있다. 저작권 상세 부 록에서저자가생각하는상업적,비상업적 이용그리고라이센스면제를생각하는바를 확인할수있다. 이책의 Think Python: How to Think Like a Computer Scientist의 LATEX 소스는 이용가능하다.
3 한국어판 서면 첫 인터넷웹브라우저를만든마크앤더슨은소프트웨어가세상을먹고 있다 ("Software is eating the world")는 자극적인 표현으로 2011년 월스트리트 저널 에에세이를썼고,카네기멜론대학의 쟈넷 윙교수는 이론적사고(Theoretical Thinking), 실험적 사고(Experimental Thinking))와 더불어 정보적 사고(Computational Thinking)가 현재도 그렇지만 앞으로 인간의 사고를 지배하는 중추적인 역할을할것을주장했다. 이들의결과는정보적사고를배운사람과소프트웨 어를 이해하고활용하는사람과그렇지못한사람과의차이는산업경제의빈 부격차보다더큰디지털경제의정보불평등(Digital Divide)를야기할것으로 예측했다. 정부는 14년 7월세계경제,사회환경이소프트웨어중심사회로급격히변화 하고 있으며,소프트웨어가혁신과성장,가치창출의중심이되고,개인 기업 국가의경쟁력을좌우하는중요한역할을하고 있음에도불구하고,우리나라는 범정부적,국민적관심이미흡한상황이라고진단하고,미국,영국, 이스라엘등 선진국과마찬가지로,초 중 고에서소프트웨어를필수로 이수할수있는방안 을강구하고 있다. 하지만,지금까지의관심은소프트웨어만집중되어왔고,정보및데이터에대 한부분은상대적으로소홀히다뤄왔다. Python for Informatics 번역을통해서 컴퓨터언어를쉽고빠르게그리고정보및데이터에대한부분도효과적으로 학습할수있을것으로기대한다. 이광춘 (xwmooc) 서울종로세운상가 2014년 12월
4 iv 제 0 장. 한국어판서면
5 서면 정보교육을 위한 파이썬: 공개된 책 리믹싱 출판혹은소멸(publish or perish) 를들어온학자는 자신만의신선한창조로무 에서만들어내는것은무척이나 자연스럽다. 이책은아무것도없는것에서시 작하는 대신에 Allen B. Downey, Jeff Elkner와 협력자들이 저작한 Think Python: How to Think Like a Computer Scientist 책을 리믹싱(re-mixing) 하는 실험이다. 2009년 12월,미시건대학에서연속해서 5학기 SI502 - Networked Programming을준비중이었고,알고리즘과추상화를 이해하는대신에데이터탐색에집 중하는파이썬교과서를쓸시점이라고정했다. SI502목표는파이썬을사용하 여사람들에게평생데이터를다루는기술을가르치는것이다.대신에,핵생들 중누구도전문적인컴퓨터프로그래머를계획한사람은없었다.대신에학생 들은도서관원,관리자,변호사,생물학자,경제학자가되고자했는데 자신만의 영역에서능숙하게기술을사용하고자했다. 수업을 위해서결코완벽한데이터지향파이썬책을발견할것같지않아서그 런책을저작하려고시작했다.휴가기간동안아무것도없는상태에서새로운 책을시작하기 3주전다행스럽게도교수회의에서, Atul Prakash박사가지난 학기파이썬과정을가르치는데사용한 Think Python책을보여주었다.간결하 고직접적인설명에학습하기쉬운것에초점을맞춘 잘쓰여진컴퓨터과학 교과서였다. 전반적인책의구조는가능한빠르게데이터분석문제를다루고,처음부터데 이터분석에관한실전예제와연습문제로바꾸었다 장은 Think Python책과매우 유사하지만주요변경사항이 있다.숫자중 심의예제와연습문제는데이터지향연습으로대체했다.주제는순차적으로 제시되어서점차적으로정교한데이터분석솔류션을구축하도록했다. try,
6 vi 제 0 장. 서면 except같은주제는앞으로가져와서조건문 장의 일부에제시했다.함수는추 상화의첫수업에소개되기보다는프로그램복잡성을다루는데필요할때까지 매우가볍게다루었다.거의모든사용자정의함수는 4장밖으로예제코드와연 습문제를제거했다.단어 재귀(recursion) 1 는책의어디에도나타나지않는다. 1장, 11-16장의모든콘텐츠는완전히새로운실무사용과데이터분석을 위한 파이썬간단한예제에집중했다.데이터분석은검색과파싱를 위한정규표현 식,사용자컴퓨터의 작업 자동화,네트워크상에서데이터가져오기,데이터 로웹페이지스크랩핑,웹서비스사용하기, XML과 JSON데이터파싱,그리고 SQL(Structured Query Language)을 사용한 데이터베이스 생성 및 사용을 포함 한다. 이 모든 변화의 궁극적인 목적은 컴퓨터 과학에서 인포매틱스(informatics)로 전환이고,설사전문적인프로그래머가되지않을지라도 유용한첫기술과목 안으로 의제를포괄하는것이다. 이책이 흥미롭고 좀더 탐색하고자 하는 학생은 Allen B. Downey 의 Think Python책을봐야한다.두책간에많이겹치는부분이 있어서, Think Python에서 다루는기술적인프로그래밍과알고리즘적사고에대한기술을빠르게습득할 것이다.그리고,책의저작스타일매우 유사해서,최소의노력으로 Think Python 을통해서빠르게나아갈수있다. Think Python저작권자로서, Allen은 GNU공개문서라이센스가적용된본인 의책에서 이책에적용된좀더최근의크리에이티브커먼즈저작자명시,동일 한 라이선스 적용(CC-BY-SA)변경하도록 허가를 주었다. 공개 문서 라이센스가 GFDL에서 CC-BY-SA(예, 위키피디아) 바뀌는 추세를 따르는 것이다. CC-BY- SA라이선스를사용하는것은책에대한강력한카피레프트전통을 유지하면 서,새로운저자가 재사용해서 자신의목적에맞춰사용하도록좀더직접적으로 만드는것이다. 이책이왜공개저작물이미래교육에매우중요하다고느끼 고,책을공개저작권아래에서 이용가능하게만든앞을내다보는결정을내린 Allen B. Downey와 Cambridge University Press에 감사드린다. 저자 노력의 결 과에기뻐하고,독자는모두의공동노력에즐거워하길희망한다. 이책과관련된저작권 이슈를해결하고처리하는데 인내를가지고도움과안 내를 주신 Allen B. Downey와 Lauren Cowles 분께 감사를 표한다. Charles Severance 1 물론 이번줄은제외다.
7 vii Ann Arbor, MI, USA 2013년 9월 9일 Charles Severance는 미시건 대학 정보 학교 부교수다.
8 viii 제 0 장. 서면
9 차례 한국어판 서면 iii 서면 v 제 1 장 왜프로그래밍을배워야하는가? 1 제 1절 창의성과동기 제 2절 컴퓨터하드웨어아키텍처 제 3절 프로그래밍 이해하기 제 4절 단어와문장 제 5절 파이썬과대화하기 제 6절 전문용어: 인터프리터와컴파일러 제 7절 프로그램 작성하기 제 8절 프로그램이란무엇인가? 제 9절 프로그램구성요소 제 10절 프로그램이 잘못되면? 제 11절 학습으로의여정 제 12절 용어사전 제 13절 연습문제
10 x 차례 제 2 장 변수,표현식,문장(Statement) 19 제 1절 값(Value)과 자료형(Type) 제 2절 변수(Variable) 제 3절 변수명(Variable name)과예약어(keywords) 제 4절 문장(Statement) 제 5절 연산자(Operator)와피연산자(Operands) 제 6절 표현식(Expression) 제 7절 연산자적용우선순위 (Order of Operations) 제 8절 나머지연산자 (Modulus Operator) 제 9절 문자열연산자 (String Operator) 제 10절 사용자에게서 입력값받기 제 11절 주석 제 12절 연상되는변수명만들기 제 13절 디버깅(Debugging) 제 14절 용어설명 제 15절 연습문제 제 3 장 조건부실행 31 제 1절 불표현식(Boolean expressions) 제 2절 논리연산자 제 3절 조건문실행 제 4절 대안실행 제 5절 연쇄조건문 제 6절 중첩조건문 제 7절 try와 catch를활용한예외처리
11 차례 xi 제 8절 논리연산식의단락(Short circuit)평가 제 9절 디버깅(Debugging) 제 10절 용어정의 제 11절 연습문제 제 4 장 함수 43 제 1절 함수호출 제 2절 내장(Built-in)함수 제 3절 자료형(type)변환함수 제 4절 난수(Random numbers) 제 5절 수학함수 제 6절 신규함수추가 제 7절 함수정의와사용법 제 8절 실행흐름 제 9절 매개변수(parameter)와 인수(argument) 제 10 절 결과있는 함수(fruitful function)와 빈 함수(void function).. 50 제 11절 왜함수를사용하는가? 제 12절 디버깅 제 13절 용어정의 제 14절 연습문제 제 5 장 반복(Iteration) 57 제 1절 변수갱신 제 2절 while문 제 3절 무한루프 제 4절 무한반복과break
12 xii 차례 제 5절 continue로반복종료 제 6절 for문을사용한명확한루프 제 7절 루프패턴 제 8절 디버깅 제 9절 용어정의 제 10절 연습문제 제 6 장 문자열 67 제 1절 문자열은순서(sequence)다 제 2절 len함수사용문자열길이구하기 제 3절 루프를사용한문자열운행법 제 4절 문자열슬라이스(slice) 제 5절 문자열은불변이다 제 6절 루프돌기(looping)계수(counting) 제 7절 in연산자 제 8절 문자열비교 제 9절 string메쏘드 제 10절 문자열파싱(Parsing) 제 11절 서식연산자 제 12절 디버깅 제 13절 용어정의 제 14절 연습문제
13 차례 xiii 제 7 장 파일 79 제 1절 영속성(Persistence) 제 2절 파일열기 제 3절 텍스트파일과라인 제 4절 파일 읽어오기 제 5절 파일검색 제 6절 사용자가파일명을선택하게만들기 제 7절 try, except, open사용하기 제 8절 파일에쓰기 제 9절 디버깅 제 10절 용어정의 제 11절 연습문제 제 8 장 리스트 (List) 91 제 1절 리스트는순서(sequence)다 제 2절 리스트는변경가능하다 제 3절 리스트운행법 제 4절 리스트연산자 제 5절 리스트슬라이스(List slices) 제 6절 리스트메쏘드 제 7절 요소삭제 제 8절 리스트와함수 제 9절 리스트와문자열 제 10절 라인파싱하기(Parsing) 제 11절 객체와값(value)
14 xiv 차례 제 12절 에일리어싱(Aliasing) 제 13절 리스트 인수 제 14절 디버깅 제 15절 용어정의 제 16절 연습문제 제 9 장 딕셔너리(Dictionaries) 107 제 1절 계수기(counter)집합으로서딕셔너리 제 2절 딕셔너리와파일 제 3절 반복과딕셔너리 제 4절 고급텍스트파싱 제 5절 디버깅 제 6절 용어정의 제 7절 연습문제 제 10 장 튜플(Tuples) 117 제 1절 튜플은불변이다 제 2절 튜플비교하기 제 3절 튜플대입(Tuple Assignment) 제 4절 딕셔너리와튜플 제 5절 딕셔너리로다중대입 제 6절 가장빈도수가높은단어 제 7절 딕셔너리키로튜플사용하기 제 8절 순서(sequence) :문자열,리스트,튜플 제 9절 디버깅 제 10절 용어정의 제 11절 연습문제
15 차례 xv 제 11 장 정규 표현식 129 제 1절 정규표현식의문자매칭 제 2절 정규표현식사용데이터추출 제 3절 검색과추출조합하기 제 4절 이스케이프(Escape)문자 제 5절 요약 제 6절 유닉스사용자를 위한보너스 제 7절 디버깅 제 8절 용어정의 제 9절 연습문제 제 12 장 네트워크 프로그램 141 제 1 절 하이퍼 텍스트 전송 프로토콜(HyperText Transport Protocol - HTTP) 제 2절 세상에서가장간단한웹브라우져(Web Browser) 제 3절 HTTP를통해서 이미지가져오기 제 4절 urllib사용하여웹페이지가져오기 제 5절 HTML파싱과웹스크래핑 제 6절 정규표현식사용 HTML파싱하기 제 7절 BeautifulSoup사용한 HTML파싱 제 8절 urllib을사용하여바이너리파일 읽기 제 9절 용어정의 제 10절 연습문제
16 xvi 차례 제 13 장 웹서비스 사용하기 153 제 1절 XML(eXtensible Markup Language) 제 2절 XML파싱 제 3절 노드반복하기 제 4절 JSON(JavaScript Object Notation) 제 5절 JSON파싱하기 제 6 절 API(Application Program Interfaces, 응용 프로그램 인터페 이스) 제 7 절 구글 지오코딩 웹서비스(Google Geocoding Web Service) 제 8절 보안과 API사용 제 9절 용어정의 제 10절 Exercises 제 14 장 데이터베이스와 SQL(Structured Query Language)사용하기 167 제 1절 데이터베이스가뭔가요? 제 2절 데이터베이스개념 제 3절 파이어폭스애드온 SQLite매니저 제 4절 데이터베이스테이블생성하기 제 5절 SQL(Structured Query Language)요약 제 6 절 데이터베이스를 사용한 트위터 스파이더링(Spidering) 제 7절 데이터모델링기초 제 8절 다중테이블을가지고프로그래밍 제 9절 세종류의키 제 10절 JOIN을사용하여데이터가져오기 제 11절 요약 제 12절 디버깅 제 13절 용어정의
17 차례 xvii 제 15 장 데이터 시각화 189 제 1절 지리정보데이터로구글맵생성하기 제 2절 네트워크와상호연결시각화 제 3절 전자우편데이터시각화 제 16 장 컴퓨터의 일반적인 작업 자동화 199 제 1절 파일 이름과경로 제 2절 예제:사진디렉토리정리하기 제 3절 명령줄인자 제 4절 파이프(Pipes) 제 5절 용어정의 제 6절 연습문제 부록 A 윈도우상에서파이썬프로그래밍 209 부록 B 매킨토쉬 상에서 파이썬 프로그래밍 211 부록 C 공헌(contribution) 213 부록 D 저작권 세부정보 217
18 xviii 차례
19 제 1 장 왜 프로그래밍을 배워야 하는가? 컴퓨터프로그램을만드는행위(프로그래밍)는매우창의적이며향후뿌린것 이상으로얻을것이많다.프로그램을만드는 이유는어려운 자료분석문제를 해결하려는것에서부터다른사람의문제를해결해주는데 재미를느끼는것까 지다양한 이유가 있다. 이책을통해서모든사람 이어떻게프로그램을만드는 지를알고,프로그램이어떻게만드는지를알게되면,새로습득한프로그래밍 기술로하고자하는것을해결할수있게된다. 우리의 일상은노트북에서부터스마트폰까지다양한종류의컴퓨터에둘러싸 여 있다. 이러한컴퓨터를우리를 위해서많은 일을대신해주는 "개인비서"로 생각한다. 일상생활에서접하는컴퓨터하드웨어는우리에게 "다음에무엇을 하면 좋겠습니까?" 라는 질문을 지속적으로 던지게 만들어 졌다. 다음에 무엇을 할까요? 다음에 무엇을 할까요? 다음에 무엇을 할까요? 다음에 무엇을 할까요? 다음에 무엇을 할까요? 다음에 무엇을 할까요? 개인 휴대 정보 단말 (PDA) 프로그래머는운영체제와하드웨어에 응용프로그램을추가했고,결국많은 것들을 도와주는 개인 휴대 정보 단말(Persoanl Digital Assistant, PDA)로 진화 했다. 사용자여러분이컴퓨터에게 "다음실행해 (do next)"를컴퓨터가 이해할수있 는언어로지시를할수만 있다면,컴퓨터는빠르고,저장소가커서,매우 유용 하게사용될수있다.만약컴퓨터언어를알고 있다면,반복적인 작업을사람을 대신해서컴퓨터에지시할수있다.흥미롭게도,컴퓨터가가장 잘할수있는종
20 2 제 1 장. 왜프로그래밍을배워야하는가? 류의 작업들은종종사람들이 재미없고,너무나지루하다고생각하는것이다. 예를들어, 이번 장의첫세문단을보고,가장많이나오는단어를찾아보고얼 마나 자주나오는지를알려주세요.사람이몇초내에단어를 읽고 이해할수는 있지만,그단어가몇번나오는지세는것은매우고생스러운 작업이다.왜냐하 면사람이지루하고반복되는문제를해결하는데적합하지않기때문이다.컴 퓨터는 정반대이다. 논문이나 책에서 텍스트를 읽고 이해하는 것은 컴퓨터에게 어렵다.하지만,단어를세고가장많이사용되는단어를찾는것은컴퓨터에게 는무척이나쉬운 작업이다. python words.py Enter file:words.txt to 16 우리의개인정보분석도우미는 이번장의첫세문단에서단어 "to"가가장많이 사용되었고, 16번 나왔다고 바로 답을 준다. 사람이 잘하지못하는점을컴퓨터가 잘할수있다는사실을 이해하면왜"컴 퓨터언어"로컴퓨터와대화해야하는데능숙해야하는지알수있다.컴퓨터와 대화할수있는새로운언어(Python)를배우게되면,지루하고반복되는 일을컴 퓨터가처리하고,사람에게적합한 일을하는데더많은시간을할애할수있다. 그래서,여러분은직관,창의성,창의력을컴퓨터파트너와함께추진할수있다. 제 1절 창의성과동기 이책은직업으로프로그래밍을하는사람을 위해서저작된것은아니지만,직업 적으로프로그램을만드는 작업은개인적으로나경제적인면에서꽤매력적인 일이다.특히, 유용하며,심미적이고,똑똑한프로그램을다른사람이사용할수 있도록만드는것은매우창의적인활동이다.다양한그룹의프로그래머들이 사용자의 관심과 시선을 차지하기 위해서 경쟁적으로 작성한 다양한 종류의 프 로그램이 여러분의 컴퓨터와 개인 휴대 정보 단말기(Personal Digital Assistant, PDA)에담겨있다. 이렇게개발된프로그램은사용자가원하는바를충족시키 고훌륭한사용자경험을제공하려고노력한다.몇몇상황에서사용자가소프 트웨어를골라구매하게될때,고객의선택에대해프로그래머는바로경제적 보상을받게된다. 만약프로그램을프로그래머집단의창의적인결과물로생각해본다면,아마도 다음그림이좀더 의미 있는 PDA컴퓨터로보일것이다. 다음에 무엇을 할까요? 다음에 무엇을 할까요? 다음에 무엇을 할까요? 다음에 무엇을 할까요? 다음에 무엇을 할까요? 다음에 무엇을 할까요? 개인휴대 정보단말 (PDA)
21 2. 컴퓨터 하드웨어 아키텍처 3 우선은프로그래을만드는주된동기가사업을한다던가사용자를기쁘게한 다기보다, 일상생활에서맞닥뜨리는 자료와정보를 잘다뤄좀더생산적으로 우리의삶을만드는데초점을 잡아본다.프로그램을만들기시작할때,여러분 모두는 프로그래머이면서 동시에 자신이 만든 프로그램의 사용자가 된다. 프로 그래머로서기술을습득하고프로그래밍 자체가좀더창의적으로느껴진다면, 여러분은 다른 사람을 위해 프로그램을 개발하게 준비가 된 것이다. 제 2절 컴퓨터하드웨어아키텍처 소프트웨어개발을 위해컴퓨터에지시명령어를전달하기 위한컴퓨터언어를 학습하기전에,컴퓨터가어떻게구성되어 있는지 이해할필요가 있다.컴퓨터 혹은핸드폰을분해해서안쪽을살펴보면,다음과같은주요부품을확인할수 있다. 다음에 무엇을 실행할까? 입출력 장치 중앙처리 장치 네트워크 주기억장치 보조 기억장치 주요부품의상위수준정의는다음과같다. 중앙처리장치(Central Processing Unit, CPU): 다음 무엇을 할까요? ("What is next?")명령어를처리하는컴퓨터의주요부분이다.만약컴 퓨터중앙처리장치가 3.0 GHz라면,초당명령어 (다음무엇을할까요? What is next?)를삼백만번처리할수있다는것이다. CPU처리속도를따 라서빠르게컴퓨터와어떻게대화하는지학습할것이다. 주기억장치(Main Memory): 주기억장치는 중앙처리장치(CPU)가 급하 게명령어를처리하기하는데필요한정보를저장하는용도로사용된다. 주기억장치는 중앙처리장치만큼이나 빠르다. 그러나 주기억장치에 저장 된정보는컴퓨터가꺼지면 자동으로지워진다. 보조 기억장치(Secondary Memory): 정보를 저장하기 위해 사용되지만, 주기억장치보다속도는느리다.전기가나갔을때도정보를기억하는것 은 장점이다. 휴대용 USB나 휴대용 MP3 플레이어에 사용되는 USB 플래 쉬메모리나디스크드라이브가여기에속한다.
22 4 제 1 장. 왜프로그래밍을배워야하는가? 입출력장치(Input Output Devices): 간단하게 화면, 키보드, 마우스, 마 이크,스피커,터치패드가포함된다.컴퓨터와사람이상호작용하는모든 방식이포함된다. 네트워크(Network):요즘거의모든컴퓨터는네트워크로정보를주고 받는 네트워크 연결(Network Connection) 하드웨어가 있다. 네트워크는 항상 "이용가능"하지않을지도모르는데이터를저장하고가져오는매우 느린저장소로볼수있다.그러한점에서네트워크는좀더느리고,때때로 신뢰성이 떨어지는 보조 기억장치(Secondary Memory)의 한 형태로 볼 수 있다. 주요부품들이어떻게 작동하는지에대한세세한사항은컴퓨터제조자에게 맡겨져 있지만,프로그램을 작성할때컴퓨터주요부품에대해서언급되어서, 컴퓨터 전문용어를 습득하고 이해하는 것은 도움이 된다. 프로그래머로서 임무는 자료를분석하고문제를해결하도록,컴퓨터 자원각각 을 사용하고 조율하는 것이다. 프로그래머로서 대체로 CPU와 대화 해서 다음 무엇을실행하라고지시한다.때때로 CPU에주기억장치,보조기억장치,네트 워크,혹은 입출력장치도사용하라고지시한다. 다음에 무엇을 처리하지? 입출력 장치 중앙처리 장치 네트워크 주기억장치 여러분 보조기억 장치 프로그래머는컴퓨터의 "다음무엇을수행할까요?"에대한답을하는사람이기 도하다.하지만,컴퓨터에답하기 위해서 5mm크기로프로그래머를컴퓨터에 집어넣고초당 30억개명령어로답을하게만드는것은매우불편하다.그래서, 대신에미리컴퓨터에게수행할명령문을 작성해야한다. 이렇게미리 작성된 명령문 집합을 프로그램(Program)이라고 하며, 명령어 집합을 작성하고 명령 어집합이올바르게 작성될수있도록하는행위를프로그래밍(Programming) 이라고 부른다. 제 3절 프로그래밍 이해하기 책의나머지 장을통해서책을 읽고 있는여러분을프로그래밍 장인으로 인도할 것이다.종국에는책을 읽고 있는여러분모두프로그래머가될것이다.아마
23 4. 단어와 문장 5 도전문적인프로그래머는아닐지라도적어도 자료/정보분석문제를보고그 문제를해결할수있는기술을가지게는될것이다. 이런점에서프로그래머가되기 위해서두가지기술이필요하다. 첫째,파이썬같은프로그래밍언어 -어휘와문법을알필요가 있다.단어 를새로운언어에맞추어 작성할수있어야하며새로운언어로 잘표현된 "문장"으로 어떻게 작성하는지도 알아야 한다. 둘째,스토리(Story)를말할수있어야한다.스토리를 작성할때,독자에 게아이디어(idea)를전달하기 위해서단어와문장을조합합니다.스토리 를구성할때기술적인면과예술적인면이 있는데,기술적인면은쓰기 연습을반복하고,피트백을받아향상된다.프로그래밍에서,우리가 작성 하는프로그램은 "스토리"가되고,해결하려고하는문제는 "아이디어"에 해당된다. 파이썬과같은프로그래밍언어를배우게되면, 자바스크립트나 C++같은두 번째언어를배우는것은무척이나쉽다.새로운프로그래밍언어는매우다른 어휘와문법을갖지만,문제를해결하는기술을배우면,다른모든프로그래밍 언어를통해서동일하게접근할수있습니다. 파이썬어휘와문장은매우빠르게학습할수있다.새로운종류의문제를풀기 위해논리적인프로그램을 작성하는것은더오래걸린다.여러분은 작문을배우 듯이프로그래밍을배우게된다.프로그래밍을 읽고설명하는것으로시작해서, 간단한프로그램을 작성하고,점차적으로복잡한프로그램을 작성할것이다.어 느순간에명상에 잠기게되고,스스로패턴이눈에들어오게된다.그러면,좀더 자연스럽게문제를어떻게받아들이고,그문제를해결할수있는프로그램을 작성하게된다.마지막으로,그순간에도착하게되면,프로그래밍은매우즐겁 고창의적인과정이된다. 파이썬프로그램의어휘와구조로시작한다.간단한예제가처음으로언제프 로그램을 읽기 시작했는지를 상기시켜주니 인내심을 가지세요. 제 4절 단어와문장 사람언어와달리,파이썬어휘는사실매우적다.파이썬어휘를예약어(researved words)로부른다. 이들단어는파이썬에매우특별한 의미를부여한다. 파이썬프로그램관점에서파이썬이 이들단어를보게되면,파이썬에게는단 하나의 유일한 의미를갖는다.나중에여러분들이프로그램을 작성할때, 자신 만의단어를 작성하는데 이를변수(Variable)라고한다.변수 이름을지을때 폭넓은 자유를갖지만,변수 이름으로파이썬예약어를사용할수는없다. 이런점에서강아지를훈련시킬때"걸어(walk)", "앉아", "기달려", "가져와" 같은특별한어휘를사용한다.강아지에게 이와같은특별한예약어를사용하 지않을때는,주인이특별한어휘를사용할때까지강아지는주인을물끄러미 쳐다보기만한다.예를들어, "더많은사람들의건강을전반적으로향상하는
24 6 제 1 장. 왜프로그래밍을배워야하는가? 방향으로동참하여 "걷기(walk)"를원한다"고말하면,강아지가듣는것은 뭐 라뭐라뭐라 걷기(walk)뭐라 와같이들릴것이다.왜냐하면 "걸어(walk)"가 강아지언어에는예약어 1 이기때문이다. 이러한사실이아마도개와고양이사 이에는어떠한예약어도존재하지않는다는것을 의미할지모른다. 사람이파이썬과대화하는언어예약어는다음과같다. and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try 강아지사례와사뭇다르게파이썬은 이미완벽하게훈련이되어 있다.여러 분이 "try"라고말하면,매번 "try"라고말할때마다실패없이파이썬은항시 시도한다. 상기예약어를학습하고,어떻게 잘사용되는지도함께학습할것이지만,지금 은파이썬에말하는것에집중할것이다.파이썬과대화하는것중좋은점은 다음과같이 인용부호로감싸메세지를던지는것만으로도파이썬에말을할수 있다는 것이다. print 'Hello world!' 상기간단한문장은파이썬구문(Syntax)론적으로도완벽하다.상기문장은예 약어 print 로시작해서출력하고자하는문자열을 작은따옴표로감싸서올바 르게 파이썬에게 전달했다. 제 5절 파이썬과대화하기 파이썬으로우리가알고 있는단어를가지고간단한문장을만들었으니 이제부 터는새로운언어기술을시험하기 위해서파이썬과대화를어떻게시작하는지 알필요가 있다. 파이썬과대화를시작하기전에,파이썬소프트웨어를컴퓨터에설치하고파이 썬을 컴퓨터에서 어떻게 실행하는지를 학습해야 한다. 이번 장에서 다루기에는 너무 구체적이고 자세한 사항이기 때문에 참조하는 것을권한다. 윈도우와매킨토쉬시스템상에서설치하고실행하는방법을 자세 한 설치절차와 함께 화면을 캡쳐하여 설명하였다. 설치가 마무리되고 터미널이 나 윈도우명령어실행창에서 python을타이핑하게되면,파이썬 인터프리터가 인터랙티브 모드로 실행을 시작하고 다음과 같은 것이 화면에 뿌려진다. Python (r261:67515, Jun , 21:47:49) [GCC (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 1
25 5. 파이썬과대화하기 7 파이썬 인터프리터는»>프롬프트를통해서여러분에게요청사항("다음에파 이썬이무엇을실행하기를원합니까?")을접수받는방식을취한다.파이썬은 여러분과대화를나눌준비가되었다. 이제남은것은파이썬언어로어떻게 말하고어떻게파이썬과대화하는지아는것이다. 예를들어,여러분이가장간단한파이썬언어단어나문장조차도알수가없다 고가정하자.우주비행사가저멀리떨어진행성에착륙해서행성의거주민과 대화를시도할때사용하는간단한말을사용해보자. >>> I come in peace, please take me to your leader File "<stdin>", line 1 I come in peace, please take me to your leader ^ SyntaxError: invalid syntax >>> 잘되는것같지않다.뭔가빨리다른생각을내지않는다면,행성거주민은여 러분을창으로찌르고,침으로바르고,불위 잘구워바베큐로만들어저녁으로 먹을듯하다. 운좋게도기나긴우주여행중이책의복사본을가지고와서다음과같이빠르 게 타이핑한다고 생각하자. >>> print 'Hello world!' Hello world! 훨씬 좋아보인다. 이제 좀더 커뮤니케이션을 이어갈 수 있을 것으로 보인다. >>> print 'You must be the legendary god that comes from the sky' You must be the legendary god that comes from the sky >>> print 'We have been waiting for you for a long time' We have been waiting for you for a long time >>> print 'Our legend says you will be very tasty with mustard' Our legend says you will be very tasty with mustard >>> print 'We will have a feast tonight unless you say File "<stdin>", line 1 print 'We will have a feast tonight unless you say ^ SyntaxError: EOL while scanning string literal >>> 이번대화는 잠시동안 잘진행되다가여러분이파이썬언어로말하는데정말 사소한 실수를 저질러 파이썬이 다시 창을 여러분에게 겨눈다. 이시점에파이썬은놀랍도록복잡하고강력하며파이썬과 의사소통을할때사 용하는구문(syntax)은매우까다롭다는것은알수있다.파이썬은다른말로안 똑똑(Intelligent)하다. 지금까지 여러분은 자신과 대화를 적절한 구문(syntax)을 사용해서 대화했다. 여러분이다른사람이 작성한프로그램을사용한다는것은파이썬을사용하는 다른프로그래머가파이썬을중간매개체로사용하여대화한것으로볼수있 다. 프로그램을 만든 저작자가 대화가 어떻게 진행되어져야 하는지를 표현하는
26 8 제 1 장. 왜프로그래밍을배워야하는가? 방식이파이썬이다.다음몇장에걸쳐서다른많은프로그래머중의한명처럼, 파이썬으로 여러분이 작성한 프로그램을 이용하는 사용자와 대화하게 된다. 파이썬 인터프리터와첫번째대화를끝내기전에,파이썬행성의거주자에게 " 안녕히계세요"를말하는적절한방법도알아야한다. >>> good-bye Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'good' is not defined >>> if you don't mind, I need to leave File "<stdin>", line 1 if you don't mind, I need to leave ^ SyntaxError: invalid syntax >>> quit() 상기처음두개시도는다른오류메세지를출력한다.두번째오류는다른데 이유는 if가예약어이기때문에파이썬은 이예약어를보고뭔가다른것을말한 다고 생각하지만, 잠시 후 구문이 잘못됐다고 판정하고 오류를 뱉어낸다. 파이썬에 "안녕히계세요"를말하는올바른방식은 인터렉티브»>프롬프트에 서 quit()를 입력하는 것이다. 제 6절 전문용어: 인터프리터와 컴파일러 파이썬은상대적으로직접사람이 읽고쓸수도 있고,컴퓨터도 읽고처리할수 있도록고안된하이레벨(High-level)언어이다.다른하이레벨언어에는 자바, C++, PHP,루비,베이직,펄, 자바스크립트등다수가포함되어 있다.실제하드 웨어 중앙처리장치(CPU)내에서는 하이레벨 언어를 조금도 이해하지 못한다. 중앙처리장치는 우리가 기계어(machine-language)로 부르는 언어만 이해한다. 기계어는매우간단하고솔직히 작성하기에는매우귀찮다.왜냐하면모두 0과 1로만 표현되기 때문이다 표면적으로 0과 1로만되어 있기때문에기계어가간단해보이지만,구문은매 우복잡하고파이썬보다훨씬어렵다.그래서매우소수의프로그래머만이기 계어로 작성할수있다.대신에,프로그래머가파이썬과 자바스크립트같은하 이레벨언어로 작성할수있게다양한번역기(translator)를만들었다. 이러한 번역기는프로그램을중앙처리장치에 의해서실제실행이가능한기계어로변 환한다. 기계어는특정컴퓨터하드웨어에묶여있기때문에기계어는다른형식의하 드웨어에는 이식(portable)되지 않는다. 하이 레벨 언어로 작성된 프로그램은
27 6. 전문용어: 인터프리터와 컴파일러 9 두가지방식으로 이기종의컴퓨터로 이식이가능하다.한방법은새로운하 드웨어에 맞게 기계어를 재컴파일(recompile)하는 것이고, 다른 방법은 새로운 하드웨어에맞는다른 인터프리터를 이용하는것이다. 프로그래밍언어번역기는 일반적으로두가지범주가 있다. (1) 인터프리터 (2) 컴파일러 인터프리터는프로그래머가코드를 작성할때소스코드를 읽고,소스코드를 파싱하고,즉석에서명령을해석한다.파이썬은 인터프리터다.따라서,파이썬 을 인터렉트브모드로실행할때,파이썬명령문(한문장)을 작성하면,파이썬이 즉석에서처리하고,사용자가다른파이썬명령어를 입력하도록준비를한다. 파이썬코드의 일부는나중에사용될것이니파이썬에게기억하도록명령한다. 적당한 이름을골라서값을기억시키고,나중에그이름을호출하여값을사용 한다. 이러한목적으로저장된값을참조하는목적으로사용되는표식(label)을 변수(variable)라고 한다. >>> x = 6 >>> print x 6 >>> y = x * 7 >>> print y 42 >>> 상기예제에서파이썬이값6을기억하고 있다가,라벨 x를사용하여나중에 값을가져오게만들었다. print예약어를사용하여파이썬이 잘기억하고 있는 지를검증한다.그리고 x를가져와서 7을곱하고새로운변수 y에값을집어 넣는다.그리고 y에현재무슨값이저장되었는지출력하라고파이썬에게지시 한다. 한줄한줄파이썬에명령어를 입력하고 있지만,앞쪽명령문에서생성된 자료가 뒤쪽실행명령문에서사용될수있도록파이썬은순차적으로정렬된문장으로 처리한다.방금전논리적이고 의미있는순서로 4줄명령문을간단하게한단락 으로 작성했다. 위에서본것처럼파이썬과 인터랙티브하게대화를주고받는것이 인터프리터 의본질이다. 컴파일러가동작하기 위해서는먼저완전한프로그램을파일하나 에담고,하이레벨소스코드를기계어로번역하는과정을거치고,마지막으로 나중에실행되도록변환된기계어를파일에담는다. 윈도우를 사용한다면, 실행가능한 기계어 프로그램 확장자가 ".exe"(executable), 혹은 ".dll"(dynamically loadable library)임을 확인할 수 있다. 리눅스와 매킨토쉬에는 실행파일을 의미하는 특정 확장자는 없다. 텍스트편집기에서실행파일을열게되면,다음과같이 읽을수없는좀괴상한 출력결과를 화면상에서 확인한다. ^?ELF^A^A^A^@^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@\xa0\x82 ^D^H4^@^@^@\x90^]^@^@^@^@^@^@4^@ ^@^G^@(^@$^@!^@^F^@ ^@^@4^@^@^@4\x80^D^H4\x80^D^H\xe0^@^@^@\xe0^@^@^@^E
28 10 제 1 장. 왜프로그래밍을배워야하는가? ^@^@^@^D^@^@^@^C^@^@^@^T^A^@^@^T\x81^D^H^T\x81^D^H^S ^@^@^@^S^@^@^@^D^@^@^@^A^@^@^@^A\^D^HQVhT\x83^D^H\xe8... 기계어를 읽고쓰는것은쉽지않다.그래서 C나파이썬같은하이레벨언어로 작성된프로그램을기계어로 자동번역해주는 인터프리터와 컴파일러가 있다 는것은멋진 일이다. 컴파일러와, 인터프리터를논의하는 이시점에,파이썬 인터프리터 자체에대 해서약간궁금해야한다.무슨언어로 작성되었을까?컴파일된언어로 작성되 었을까? python 을타이핑하게될때,정확하게무슨 일이 일어나는걸까? 파이썬 인터프리터는하이레벨언어 C 로 작성되었다.파이썬 인터프리터실 제소스코드를보려면, 개발할수있는소스코드를확인할수있다.그래서,파이썬그자체는프로그램 이다.기계어로컴파일되어 있어서파이썬을여러분의컴퓨터에설치(혹은컴 퓨터제조자가설치를대신해주기도함)한다는것은번역된파이썬프로그램 기계어코드사본을여러분컴퓨터에복사하는것에불과하다. 윈도우시스템 에서파이썬실행가능한기계어코드는파일에다음과같은 이름을갖는다. C:\Python27\python.exe 지금까지살펴본것은파이썬프로그래머가되기 위해서정말알필요가 있는것 이상이다.하지만,때때로처음에 이런귀찮은질문에바로답하는것이나중에 보상을한다. 제 7절 프로그램 작성하기 파이썬 인터프리터에명령어를타이핑하는것은파이썬주요기능을알아보는 좋은 방법이지만, 좀더 복잡한 문제를 해결하는데 권하지는 않는다. 프로그램을 작성할때,텍스트편집기를사용해서스크립트(script)로불리는파 일에 명령어 집합을 작성한다. 관례로, 파이썬 스크립트 확장자는.py가 된다. 스크립트를실행하기 위해서,파이썬 인터프리터에파일 이름을넘겨준다. 유 니스나 윈도우명령창에서 python hello.py를 입력하게되면다음과같은결 과를 얻는다. csev$ cat hello.py print 'Hello world!' csev$ python hello.py Hello world! csev$ csev$ 은 운영시스템 명령어 프롬프트이고, cat hello.py 는 문자열을 출력하 는한줄파이썬프로그램을담고 있는 hello.py 파일을화면에출력하라는명 령어입니다. 인터랙트브모드에서파이썬코드 입력하는방식대신에파이썬 인터프리터를 호출해서 hello.py 파일로부터 소스코드를 읽도록 지시합니다.
29 8. 프로그램이란 무엇인가? 11 이새로운방식은파이썬프로그램을끝마치기 위해 quit()를사용할필요가없 다는점에서편리합니다.파일에서소스코드를 읽을때,파일끝까지 읽게되면 자동으로파이썬이종료됩니다. 제 8절 프로그램이란무엇인가? 프로그램(Program)의가장본질적인정의는특정 작업을수행할수있도록조 작된 일련의파이썬문장의집합이다.가장간단한 hello.py스크립트도프로그 램이다.한줄의프로그램이특별히 유익하고쓸모가 있는것은아니지만엄격한 의미에서 파이썬 프로그램이 맞다. 프로그램을 이해하는가장쉬운방법은프로그램이해결하려고만들어진문제 를먼저생각해보고나서,그문제를풀어가는프로그램을살펴보는것이다. 예를들어,페이스북에게시된 일련의글에서가장 자주사용된단어에관심을 가지고소셜컴퓨팅연구를한다고생각해봅시다.페이스북에게시된글들을 쭉출력해서가장흔한단어를찾으려고열심히들여다볼것이지만,매우오래 걸리고실수하기도쉽다.하지만파이썬프로그램을 작성해서빨리정확하게 작업을 마무리한다면 똑똑하게 주말을 재미나게 보낼 수 있다. 예를들어 자동차(car)와광대(clown)에관한다음텍스트에서,가장많이나오 는단어가무엇이며몇번나왔는지세어보세요. the clown ran after the car and the car ran into the tent and the tent fell down on the clown and the car 그리고나서,몇백만줄의텍스트를보고서동일한 일을한다고상상해보자.솔 직히수작업으로단어를세는것보다파이썬을배워프로그램을 작성하는것이 훨씬빠를것이다. 더좋은소식은 이미텍스트파일에서가장 자주나오는단어를찾아내는간단 한프로그램을개발했다.저자가직접 작성했고,시험까지했다.바로사용을할 수 있도록준비했기때문에여러분의수고도덜수있다. name = raw_input('enter file:') handle = open(name, 'r') text = handle.read() words = text.split() counts = dict() for word in words: counts[word] = counts.get(word,0) + 1 bigcount = None bigword = None for word,count in counts.items(): if bigcount is None or count > bigcount: bigword = word bigcount = count print bigword, bigcount
30 12 제 1 장. 왜프로그래밍을배워야하는가? 상기프로그램을사용하려고파이썬을공부할필요도없다. 10장에걸쳐서멋진 파이썬프로그램을만드는방법을배우게될것이다.지금여러분은단순사용 자로서단순히상기프로그램을사용하게되면,프로그램의영리함과동시에얼 마나많은수작업노력을줄일수있는지감탄할것이다.단순하게코드를타이 핑해서 words.py파일로저장하고실행을하거나, com/code/에서 소스 코드를 다운받아 실행하면 된다. 파이썬과 파이썬 언어가 어떻게 여러분(사용자)과 저자(프로그래머)사이에서 중개자역할을훌륭히수행하고 있는지를보여주는좋은사례다.컴퓨터에파 이썬을설치한누구나사용할수있는공통의언어로 유용한명령순서(즉,프로 그램)를우리가주고받을수있는방식이파이썬이다.그래서누구도파이썬과 직접 의사소통하지 않고 파이썬을 통해서 서로 의사소통한다. 제 9절 프로그램구성요소 다음 몇장에 걸쳐서 파이썬 어휘, 문장구조, 문단구조, 스토리 구조에 대해서 학 습할것이다.파이썬의강력한역량에대해서배울것이고, 유용한프로그램을 작성하기 위해서 파이썬의 역량을 어떻게 조합할지도 학습할 것이다. 프로그램을 작성하기 위해서 사용하는 개념적인 하위 레벨(low-level) 패턴이 몇가지 있다.파이썬프로그램을 위해서만들어졌다기보다는기계어부터하 이 레벨(high-level) 언어에 이르기까지 모든 언어에도 공통된 사항이기도 하다. 입력: 컴퓨터바깥세계에서데이터를가져온다.파일로부터데이터를 읽을수 도 있고,마이크나 GPS같은센서에서데이터를 입력받을수도 있다.상기 초기프로그램에서 입력값은키보드를사용하여사용자가데이터를 입력 한것이다. 출력: 화면에 프로그램 결과값을 출력주거나 파일에 저장한다. 혹은 음악을 연 주하거나텍스트를 읽어스피커같은 장치에데이터를내보낸다. 순차실행: 스크립트에 작성된순서에맞춰한줄한줄실행된다. 조건실행: 조건을확인하고명령문을실행하거나건너뛴다. 반복실행: 반복적으로명령문을실행한다.대체로반복실행시변화를수반 한다. 재사용: 한벌의 명령문을 작성하여 이름을 부여하고 저장한다. 필요에 따라 프 로그램 이름을 불러 몇번이고 재사용한다. 너무나간단하게들리지만,전혀간단하지는않다.단순히걸음을 한다리를 다른다리앞에놓으세요 라고말하는것같다.프로그램을 작성하는 예술 은 기본요소를조합하고엮어사용자에게 유용한무언가를만드는것이다. 단어를세는프로그램은상기프로그램의기본요소를하나만빼고모두사용하 여 작성되었다.
31 10. 프로그램이 잘못되면? 13 제 10절 프로그램이 잘못되면? 처음파이썬과대화에서살펴봤듯이,파이썬코드를명확하게 작성해서 의사 소통해야한다. 작은차이혹은실수는여러분이 작성한프로그램을파이썬이 들여다보다 조기에 포기하게 만든다. 초보파이썬프로그래머는파이썬이오류에대해서는 인정사정보지않는다고 생각한다.파이썬이모든사람을좋아하는것같지만,파이썬은개인적으로만 사람들을알고,분노를간직하고 있다. 이러한사실로 인해서파이썬은여러분 이 완벽하게 작성된 프로그램을 받아서 잘 맞지 않는군요 라고 거절하여 고통 을준다. >>> primt 'Hello world!' File "<stdin>", line 1 primt 'Hello world!' ^ SyntaxError: invalid syntax >>> primt 'Hello world' File "<stdin>", line 1 primt 'Hello world' ^ SyntaxError: invalid syntax >>> I hate you Python! File "<stdin>", line 1 I hate you Python! ^ SyntaxError: invalid syntax >>> if you come out of there, I would teach you a lesson File "<stdin>", line 1 if you come out of there, I would teach you a lesson ^ SyntaxError: invalid syntax >>> 파이썬과다퉈봐야얻을것은없어요.파이썬은도구고감정이없다.여러분이 필요로할때마다여러분에게봉사하고기쁨을주기 위해서존재할뿐이다.오 류메세지가심하게들릴지는모르지만단지파이썬이도와달라는요청일뿐이 다. 입력한것을쭉읽어보고여러분이 입력한것을 이해할수없다고만말할 뿐이다. 파이썬은어떤면에서강아지와닮았다.맹목적으로여러분을사랑하고,강아지 와마찬가지로몇몇단어만 이해하며,웃는표정(»>명령프롬프트)으로여러분 이 파이썬이 이해하는 무언가를 말하기만을 기다린다. 파이썬이 SyntaxError: invalid syntax 을뱉어낼때는,마치강아지가꼬리를흔들면서 뭔가말씀하 시는것같은데요...주인님말씀을 이해하지못하겠어요,다시말씀해주세요 (»>) 말하는것과같다. 여러분이 작성한프로그램이점점 유용해지고복잡해짐에따라 3가지 유형의 오류와 마주친다. 구문 오류(Syntax Error): 첫번째 마주치는 오류로 고치기 가장 쉽습니다. 구문 오류는파이썬문법에맞지않는다는것을 의미한다.파이썬은구문오류
32 14 제 1 장. 왜프로그래밍을배워야하는가? 가발생한줄을찾아정확한 위치를알려준다.하지만,파이썬이제시하는 오류가그이전프로그램부문에서발생했을수도 있기때문에파이썬 이제시하는곳뿐만아니라그앞쪽도살펴볼필요가 있다.따라서구문 오류로파이썬이지칭하는행과문자는오류를고치기 위한시작점으로 의미가 있다. 논리 오류(Logic Error): 논리 오류의 경우 프로그램 구문은 완벽하지만 명령 어실행순서에실수가 있거나혹은문장이서로연관되는방식에오류가 있는 것이다. 논리 오류의 예를 들어보자. 물병에서 한모금 마시고, 가방 에넣고,도서관으로걸어가서,물병을닫는다 의미론적 오류(Semantic Error): 의미론적 오류는 구문론적으로 완벽하고 올 바른순서로프로그램의명령문이 작성되었지만단순하게프로그램에오 류가 있다.프로그램은완벽하게 작동하지만여러분이 의도한바를수 행하지는못한다.간단한예로여러분이식당으로가는방향을알려주고 있다....주유소사거리에도착했을때,왼쪽으로돌아 1.6km쭉가면왼 쪽편에빨간색빌딩에식당이 있습니다. 친구가매우늦어전화로지금농 장에 있고헛간으로걸어가고 있는데식당을발견할수없다고전화를합 니다.그러면여러분은 주유소에서왼쪽으로혹은오른쪽으로돈거야? 말하면,그친구는 말한대로완벽하게따라서갔고,말한대로필기까지 했는데,왼쪽으로돌아 1.6km지점에주요소가 있다고했어,그러면여러 분은 미안해,내가가지고 있는건구문론적으로는완벽한데,슬프게도 사소하지만탐지되지않은 의미론적오류가 있네! 라고말할것이다. 다시한번 위세종류의오류에대해서,파이썬은단지여러분이요청한것을 충실히 수행하기 위해서 최선을 다합니다. 제 11절 학습으로의여정 책을 읽어가면서처음에개념들이 잘와닿지않는다고기죽을필요는없다. 말하는것을배울때,처음몇년동안웅얼거리는것은문제도아니다.간단한어 휘에서간단한문장으로옮겨가데 6개월이걸리고,문장에서문단으로옮겨가 는데 5-6년 이상걸려도괜찮다.흥미로운완전한짧은스토리를 자신의언어로 작성하는데 몇 년이 걸린다. 파이썬을빨리배울수있도록다음몇장에걸쳐서모든정보를제공한다.하지 만새로운언어를습득하는것과마찬가지로 자연스럽게느껴지기까지파이썬 을흡수하고 이해하기까지시간이걸린다.큰그림(Big Picture)을 이루는 작은 조각들을정의하는동안에,큰그림을볼수있도록여러주제를방문하고,또다 시 재방문하면서혼란이생길수도 있다. 이책은순차선형적으로쓰여져서본 과정을선형적으로배워갈수도 있지만,비선형적으로본교재를활용하는것도 괜찮다.가볍게앞쪽과뒷쪽을넘나들며책을 읽을수도 있다.구체적이고세세 한점을완벽하게 이해하지않고고급과정을가볍게 읽으면서프로그래밍의 왜(Why) 에대해서더잘이해할수도 있다.앞에서배운것을다시리뷰하고 연습문제를다시풀면서지금난공불락이라여겼던어려운주제를통해서사실 더많은것을학습했다는것을깨달을것이다.
33 12. 용어사전 15 대체적으로처음프로그래밍언어를배울때는,마치망치로돌을내리치고,끌 로깎아내고하면서아름다운조각품을만들면서겪게되는것과 유사한몇번의 유레카,아하 순간이 있다. 만약어떤것이특별히힘들다면,밤새도록앉아서노력하는것은별로 의미가 없다. 잠시쉬고,낮잠을 자고,간식을먹고다른사람이나강아지에게문제를 설명하고 자문을구한후에깨끗한정신과눈으로돌아와서다시시도해보라. 단언컨데 이책에 있는프로그래밍개념을깨우치게되면,돌이켜생각해보면 프로그래밍은정말쉽고멋지다는것을알게될것이다.그래서단순하게프로 그래밍언어는정말시간을들여서배울가치가 있다. 제 12절 용어사전 버그(bug): 프로그램 오류 중앙처리장치(central processing unit, CPU): 컴퓨터의 심장, 작성한 프로그 램을실행하는 장치, "CPU"혹은프로세서라고부른다. 컴파일(compile): 나중에 실행을 위해서 하이레벨 언어로 작성된 프로그램을 로우레벨 언어로 번역한다. 하이레벨 언어(high-level language): 사람이 읽고 쓰기 쉽게 설계된 파이썬과 같은프로그래밍언어 인터랙티브 모드(interactive mode): 프롬프트에서 명령어나 표현식을 타이핑 함으로써파이썬 인터프리터를사용하는방식 해석한다(interpret): 하이레벨 언어로 작성된 프로그램을 한번에 한줄씩 번역 해서 실행한다. 로우레벨 언어(low-level language): 컴퓨터가 실행하기 좋게 설계된 프로그래 밍언어, 기계어코드, 어셈블리언어 로불린다. 기계어 코드(machine code): 중앙처리장치에 의해서 바로 실행될 수 있는 가장 낮은수준의언어로된소프트웨어 주기억장치(main memory): 프로그램과 데이터를 저장한다. 전기가 나가게 되 면주기억장치에저장된정보는사라진다. 파싱(parsing): 프로그램을 검사하고 구문론적 구조를 분석한다. 이식성(portability): 하나 이상의컴퓨터에서실행될수있는프로그램의특성 출력문(print statement): 파이썬 인터프리터가 화면에 값을 출력할 수 있게 만 드는명령문 문제해결(problem solving:) 문제를만들고,답을찾고,답을표현하는과정 프로그램(program:) 컴퓨테이션(Computation)을 명세하는 명령어 집합
34 16 제 1 장. 왜프로그래밍을배워야하는가? 프롬프트(prompt): 프로그램이 메세지를 출력하고 사용자가 프로그램에 입력 하도록 잠시멈춘때. 보조 기억장치(secondary memory): 전기가 나갔을 때도 정보를 기억하고 프 로그램을 저장하는 저장소. 일반적으로 주기억장치보다 속도가 느리다. USB의 플래쉬 메모리나 디스크 드라이브가 여기에 속한다. 의미론(semantics): 프로그램의 의미 의미론적 오류(semantic error): 프로그래머가 의도한 것과 다른 행동을 하는 프로그램 오류 소스 코드(source code): 하이레벨 언어로 기술된 프로그램 제 13절 연습문제 Exercise 1.1 컴퓨터 보조기억장치 기능은 무엇입니까? a)프로그램의모든연산과로직을실행한다. b) 인터넷을통해웹페이지를불러온다. c)파워가없을때도정보를 장시간저장한다. d) 사용자로부터 입력정보를 받는다. Exercise 1.2 프로그램은무엇입니까? Exercise 1.3 컴파일러와 인터프리터의차이점을설명하세요. Exercise 1.4 기계어 코드는 다음중 어는 것입니까? a)파이썬 인터프리터 b)키보드 c) 파이썬 소스코드 파일 d)워드프로세싱문서 Exercise 1.5 다음코드에서 잘못된점을설명하세요. >>> primt 'Hello world!' File "<stdin>", line 1 primt 'Hello world!' ^ SyntaxError: invalid syntax >>> Exercise 1.6 다음파이썬프로그램이실행된후에,변수 "X"는어디에저장됩 니까? x = 123 a)중앙처리장치 b)주메모리
35 13. 연습문제 17 c)보조메모리 d) 입력장치 e)출력장치 Exercise 1.7 다음프로그램에서출력되는것은무엇입니까? x = 43 x = x + 1 print x a) 43 b) 44 c) x + 1 d)오류,왜냐하면 x = x + 1 은수학적으로불가능하다. Exercise 1.8 사람의어느능력부위를예제로사용하여다음각각을설명하세 요. (1)중앙처리장치, (2)주메모리, (3)보조메모리, (4) 입력장치 (5)출력장치 예를들어중앙처리장치에상응하는사람의몸부위는어디입니까? Exercise 1.9 구문오류("Syntax Error")는 어떻게 고칩니까?
36 18 제 1 장. 왜프로그래밍을배워야하는가?
37 제 2 장 변수,표현식,문장(Statement) 제 1절 값(Value)과 자료형(Type) 값(Value)은문자와숫자처럼프로그램이다루는가장기본이되는단위이다. 지금까지 살펴본 값은 1, 2 그리고'Hello,World!' 이다. 상기 값은 다른 자료형(Type)에 속하는데, 2는 정수, 'Hello,World!' 는 문 자열(String)에 속하는데, 문자(Letter)를 일련의 열(sequence)의 형태로 되어 있 어서 문자열이라고 부른다. 인용부호에 감싸여 있어서, 여러분과 인터프리터는 문자열을 식별할 수 있다. print 문은정수에도사용할수있다. python명령어를실행하여 인터프리터 를구동시키자. python >>> print 4 4 값이어떤형인지확신을못한다면, 인터프리터가알려준다. >>> type('hello, World!') <type 'str'> >>> type(17) <type 'int'> 놀랍지도 않게, strings은 str 형식이고, 정수는 int 형식이다. 다소 명백하지는 않지만,소숫점을가진숫자는float형식이다.왜냐하면 이들숫자가부동소수 점형식으로표현되기때문이다. >>> type(3.2) <type 'float'> '17','3.2' 같은 값은 어떨가? 숫자처럼 보이지만 문자열처럼 인용부호에 감 싸여 있다.
38 20 제 2 장. 변수,표현식,문장(Statement) >>> type('17') <type 'str'> >>> type('3.2') <type 'str'> '17','3.2' 은문자열이다. 1,000,000처럼아주큰정수를 입력할때,세자리숫자마다콤마(,)를사용하 고싶을것이다.하지만,파이썬에서적법하게정수를표현하는것은아니지만 문법적으로는 적합하다. >>> print 1,000, 하지만, 파이썬 실행 결과는 우리가 기대했던 것이 아니다. 파이썬에서는 1,000,000 을콤마(, )로구분된정수로 인식한다.따라서사이사이공백을 넣어 출력했다. 이사례가여러분이처음경험하게되는 의미론적오류(semantic error)다.코드 가에러메세지없이실행이되지만, 올바른(right) 작동을하는것은아니다. 제 2절 변수(Variable) 프로그래밍언어의가장강력한기능중의하나는변수를다룰수있는능력이 다.변수(Variable)는값을참조하는 이름이다. 대입문(Assignment statement)는 새로운 변수를 생성하고 값을 변수에 대입 한다. >>> message = 'And now for something completely different' >>> n = 17 >>> pi = 상기예제는세가지대입사례를보여준다.첫번째대입예제는 message변수 에문자열을대입한다.두번째예제는변수 n에정수 17을대입한다.세번째 예제는pi변수에 π근사값을대입한다. 변수 값을 출력하기 위해서 print문을 사용한다. >>> print n 17 >>> print pi 변수 자료형(type)은 변수가 참조하는 값의 자료형이다. >>> type(message) <type 'str'> >>> type(n) <type 'int'> >>> type(pi) <type 'float'>
39 3. 변수명(Variable name)과예약어(keywords) 21 제 3절 변수명(Variable name)과예약어(keywords) 대체로프로그래머는 의미있는변수명을고른다.프로그래머는변수가사용되 는것에대해문서화도한다. 변수명은 임의로길수있다.변수명은문자와숫자를포함할수있지만,문자 로변수명을시작해야한다.첫변수명을대문자로사용해도되지만소문자로 변수명을시작하는것도좋은생각이다. (후에왜그런지보게될것이다.) 변수명에 밑줄(underscore character, _)이 들어갈 수 있다. 종종 my_name 혹은 airspeed_of_unladen_swallow 처럼 밑줄은 여러 단어와 함께 사용된다. 변수 명을밑줄로시작해서 작성할수있지만,다른사용자가사용할라이브러리를 작성하는 경우가 아니라면, 일반적으로 밑줄로 시작하는 변수명은 피한다. 변수명을 적합하게 작성하지 못하다면, 구문 오류가 발생한다. >>> 76trombones = 'big parade' SyntaxError: invalid syntax >>> more@ = SyntaxError: invalid syntax >>> class = 'Advanced Theoretical Zymurgy' SyntaxError: invalid syntax 76trombones변수명은문자로시작하지않아서적합하지않다. more@은특수 문자 (@)를변수명에포함해서적합하지않다.하지만, class변수명은뭐가 잘 못된 것일까? 구문 오류 이유는 class가 파이썬의 예약어 중의 하나라고 밝혀졌다. 인터프리 터가예약어를사용하여프로그램구조를파악하기 위해서사용하지만,변수명 으로는사용할수없다. 파이썬에는 31개키워드 1 가예약어로 이미사용중에 있다. and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try 상기예약어목록을주머니에넣고 잘가지고다니고싶을것이다.만약 인터 프리터가변수명중하나에대해불평을하지만 이유를모르는경우,예약어 목록에 변수명이 있는지 확인해 보세요. 제 4절 문장(Statement) 문장(statement)은 파이썬 인터프리터가 실행하는 코드 단위다. 지금까지 print, assignment두종류의문장을살펴봤습니다. 1 Python 3.0에서exec 은더이상예약어가아니지만,nonlocal 은여전히예약어다.
40 22 제 2 장. 변수,표현식,문장(Statement) 인터랙트브모드에서문장을 입력하면, 인터프리터는문장을실행하고,만약 출력할것이 있다면결과를화면에출력합니다. 스크립트는보통여러줄의문장으로구성됩니다.하나 이상의문장이 있다면, 스트테이트먼트가 실행되며서 결과가 한번에 하나씩 나타납니다. 예를 들어, 다음의 스크립트를 생각해 봅시다. print 1 x = 2 print x 상기 스크립트는 다음 결과를 출력합니다. 1 2 대입문장(x=2)은결과를출력하지않습니다. 제 5 절 연산자(Operator)와 피연산자(Operands) 연산자(Operators)는 덧셈, 곱셈 같은 계산(Computation)을 표현하는 특별한 기 호입니다.연산가자적용되는값을피연산자(operands)라고합니다. 다음의예제에서보듯이, +, -, *, /, **연산자는덧셈,뺄셈,곱셈,나눗셈,지수 승을수행합니다 hour-1 hour*60+minute minute/60 5**2 (5+9)*(15-7) 나눗셈 연산자는 여러분이 기대하는 것을 수행하지 않을 수도 있습니다. >>> minute = 59 >>> minute/60 0 minute값은 59,보통 59를 60으로나누면 0대신에 입니다. 이런차이가 발생하는 이유는파이썬이소수점 이하버림나눗셈 2 을하기때문입니다. 두개의피연산자가정수이면,결과도정수입니다.부동소수점나눗셈은소수 점 이하를절사합니다.그래서예제에서소수점 이하 잘라버려 0 이됩니다. 만약두개의피연산자중하나가부동소수점수이면,파이썬은부동소수점 나눗셈을 수행하고 결과는 부동 소수점형 값이 된다. >>> minute/ 파이썬 3.0에서 이나눗셈값은소수점입니다.파이썬 3.0에도입된새로운연산자//는정 수형나눗셈을수행합니다.
41 6. 표현식(Expression) 23 제 6절 표현식(Expression) 표현식 (expression)은값,변수,연산자조합니다.값은 자체로표현식이고,변 수도동일하다.따라서다음표현식은모두적합하다. (변수 x는사전에어떤 값이대입되었다고가정한다.) 17 x x + 17 인터랙티브 모드에서 표현식을 입력하면, 인터프리터는 표현식을 평가(evaluate)하고값을표시한다. >>> 하지만,스크립트에서는표현식 자체로어떠한것도수행하지는않는다.초심 자에게 혼란스러운 점이다. Exercise 2.1 파이썬 인터프리터에 다음 문장을 입력하고 결과를 보세요. 5 x = 5 x + 1 제 7절 연산자적용우선순위 (Order of Operations) 1개 이상의연산자가표현식에등장할때,연산자평가순서는우선순위규칙 (rules of precedence)에따른다.수학연산자에대해서파이썬은수학적관례를 동일하게 따른다. 영어 두문어 PEMDAS는 기억하기 좋은 방식이다. 괄호(Parentheses)는가장높은순위를가지고여러분이원하는순위에맞 춰실행할때사용한다.괄호내의식이먼저실행되기때문에 2 * (3-1) 은 4가정답이고,(1+1)**(5-2)는 8이다.괄호를사용하여표현식을좀더 읽기쉽게하려고사용하기도한다. (minute * 100) / 60는실행순서 가결과값에영향을주지않지만가독성이상대적으로더좋다. 지수승(Exponentiation)이 다음으로 높은 우선순위를 가진다. 그래서 2**1+1는 4가 아니라 3이고, 3*1**3는 27이 아니고 3이다. 곱셈(Multiplication)과 나눗셈(Division)은 동일한 우선순위를 가지지만, 덧셈(Addition), 뺄셈(Substraction)보다 높은 우선 순위를 가진다. 덧셈과 뺄샘은같은실행우선순위를갖는다. 2*3-1는 4가아니고 5이고, 6+4/2 는 5가아니라 8이다. 같은실행순위를갖는연산자는왼쪽에서부터오른쪽으로실행된다 표현식은 3이 아니고 1이다. 왜냐하면 5-3이 먼저 실행되고 나서 2 에서 1을 빼기 때문이다. 여러분이 의도한순서대로연산이수행될수있도록,좀의심스러운경우는항상 괄호를 사용한다.
42 24 제 2 장. 변수,표현식,문장(Statement) 제 8절 나머지연산자 (Modulus Operator) 나머지 연산자(modulus operator)는 정수에 사용하며, 첫번째 피연산자를 두 번째피연산자가나눌때나머지값이생성된다.파이썬에서나머지연산자는 퍼센트 기호(%)다. 구문은 다른 연산자와 동일하다. >>> quotient = 7 / 3 >>> print quotient 2 >>> remainder = 7 % 3 >>> print remainder 1 7을 3으로나누면몫이 2가되고나머지가 1이된다. 나머지연산자가놀랍도록 유용다다.예를들어한숫자를다른숫자로나눌수 있는지없는지를확인할수도 있다.x % y값이 0 이라면,x를y로나눌수있다. 또한,숫자에서가장오른쪽숫자를분리하는데도사용된다.예를들어 x % 10 은x가 10진수인경우가장오른쪽숫자를뽑아낼수있고,동일한방식으로x % 100은가장오른쪽 2개숫자를뽑아낼수도 있다. 제 9절 문자열연산자 (String Operator) +연산자는문자열에도동작하지만,수학에서말하는덧셈은아니다.대신에 문자열끝과끝을붙이는연결(concatenation) 작업을수행한다.예를들어, >>> first = 10 >>> second = 15 >>> print first+second 25 >>> first = '100' >>> second = '150' >>> print first + second 상기 프로그램 출력은 이다. 제 10절 사용자에게서 입력값받기 때때로키보드를통해서사용자로부터변수에대한값을 입력받고싶을때가 있다.키보드 3 로부터 입력값을받는raw_input 이라는내장(built-in)함수를파 이썬에서제공한다. 입력함수가호출되면,파이썬은실행을멈추고사용자가 무언가 입력하기를기다린다.사용자가 Return (리턴)혹은 Enter (엔터)키를 누르게되면프로그램이다시실행되고, raw_input은사용자가 입력한것을 문자열로 반환한다. 3 파이썬 3.0에서 입력함수는input으로명명되었다.
43 11. 주석 25 >>> input = raw_input() Some silly stuff >>> print input Some silly stuff 사용자로부터 입력받기전에프롬프트에서사용자가어떤값을 입력해야하는 지정보를제공하는것도좋은생각이다. 입력을받기 위해 잠시멈춰있을때, 사용자에게 표시되도록 raw_input 함수에 문자열을 전달할 수 있다. >>> name = raw_input('what is your name?\n') What is your name? Chuck >>> print name Chuck 프롬프트의끝에 \n 은 개행(newline)을 의미한다.개행은줄을바꾸게하는특 수 문자다. 이런 이유 때문에 사용자 입력이 프롬프트 밑에 출력된다. 만약사용자가정수를 입력하기를바란다면, int()함수를사용하여반환되는 값을정수(int)로 자료형을변환한다. >>> prompt = 'What...is the airspeed velocity of an unladen swallow?\n' >>> speed = raw_input(prompt) What...is the airspeed velocity of an unladen swallow? 17 >>> int(speed) 17 >>> int(speed) 하지만,사용자가숫자문자열이아닌다른것을 입력하게되면오류가발생 한다. >>> speed = raw_input(prompt) What...is the airspeed velocity of an unladen swallow? What do you mean, an African or a European swallow? >>> int(speed) ValueError: invalid literal for int() 나중에 이런종류의오류룰어떻게다루는지배울것이다. 제 11절 주석 프로그램이커지고복잡해짐에따라가독성은떨어진다.형식언어(formal language)는촘촘하고코드 일부분도 읽기어렵고무슨역할을왜수행하는지 이해 하기 어렵다. 이런 이유로프로그램이무엇을하는지를 자연어로프로그램에노트를달아 두는것은좋은생각이다. 이런노트를주석(Comments)이라고하고 #기호로 시작한다.
44 26 제 2 장. 변수,표현식,문장(Statement) # 경과한 시간을 퍼센트로 계산 percentage = (minute * 100) / 60 상기사례의경우,주석 자체가한줄이다.주석을프로그램의맨뒤에놓을수도 있다. percentage = (minute * 100) / 60 # 경과한 시간을 퍼센트로 계산 #뒤의모든것은무시되기때문에프로그램에는아무런영향이없다. 명확하지않은코드의기능을문서화할때주석은가장 유용하게된다.프로그램 을 읽는사람이코드가무엇을하는지 이해한다고가정하는것은 일리가 있다. 왜그런지를 이유를설명하는것은더욱 유용하다. 다음의 주석은 코드와 중복되어 쓸모가 없다. v = 5 # assign 5 to v 다음의주석은코드에없는 유용한정보가 있다. v = 5 # velocity in meters/second. 좋은변수명은주석을할필요를없게만들지만,지나치게긴변수명은 읽기 어려운 복잡한 표현식이 될 수 있다. 그래서 상충관계(trade-off)가 존재한다. 제 12절 연상되는변수명만들기 변수를 이름짓는데단순한규칙을지키고예약어를피하기만하다면,변수이름 을 작명할수있는무척이나많은경우의수가존재한다.처음에 이렇게넓은선 택폭이오히려프로그램을 읽는사람이나프로그램을 작성하는사람모두에게 혼란을줄수있다.예를들어,다음의 3개프로그램은각프로그램이달성하려 하는관점에서동일하지만,여러분이 읽고 이해하는데는많은차이점이 있다. a = 35.0 b = c = a * b print c hours = 35.0 rate = pay = hours * rate print pay x1q3z9ahd = 35.0 x1q3z9afd = x1q3p9afd = x1q3z9ahd * x1q3z9afd print x1q3p9afd 파이썬 인터프리터는상기 3개프로그램을정확하게동일하게바라보지만,사 람은 이들프로그램을매우다르게보고 이해한다.사람은가장빨리두번째 프로그램의 의도를 알아차린다. 왜냐하면 각 변수에 무슨 데이터가 저장될지에 관해서,프로그래머의 의도를반영하는변수명을사용했기때문이다.
45 12. 연상되는 변수명 만들기 27 현명하게선택된변수명을연상기호변수명("mnemonic variable name")이라고 한다.연상되기좋은영어단어 "mnemonic" 4 은기억을돕는다는뜻이다.왜변 수를생성했는지기억하기좋게하기 위해서연상하기좋은변수명을선택한다. 매우훌륭하게들리고,연상하기좋은변수명을만드는게좋은아이디어같지 만,기억하기좋은변수명은초보프로그래머가코드를파싱(parsing)하고 이해 하는데걸림돌이되기도한다.왜냐하면 31개밖에되지않지만예약어도기 억하지못하고,변수명이때때로너무서술적이라마치 일반적으로사용하는 언어처럼보이고 잘선택된변수명처럼보이지않기때문이다. 어떤데이터를반복하는다음파이썬코드를살펴보자.곧반복루프를살펴보 겠지만,다음코드가무엇을 의미하는지알기 위해서퍼즐을풀어보자. for word in words: print word 무엇이 일어나고 있는것일까? for, word, in등등어느토큰이예약어일까?변수 명은무엇일까?파이썬은기본적으로단어의개념을 이해할까?초보프로그래 머는어느부분코드가 이예제와동일해야만하는지그리고,어느부분코드가 프로그래머선택에 의한것인지분간하는데고생을한다. 다음의코드는 위의코드와동일하다. for slice in pizza: print slice 초보프로그래머가 이코드를보고어떤부분이파이썬예약어이고어느부분이 프로그래머가 선택한 변수명인지 알기 쉽다. 파이썬이 피자와 피자조각에 대한 근본적인 이해가없고,피자는하나혹은여러조각으로구성된다는근본적인 사실을알지못한다는것은 자명하다. 하지만, 작성한프로그램이데이터를 읽고데이터에 있는단어를찾는다면피자 (pizza)와 피자조각(slice)은 연상하기 좋은 변수명이 아니다. 이것을 변수명 으로선핸하게되면프로그램의 의미를왜곡시킬수있다. 좀시간을보낸후에가장흔한예약어에대해서알게될것이고, 이들예약어가 어느순간여러분에게눈에띄게될것이다. for word in words: print word 파이썬에서정의된코드 일부분(for, in, print, :)은예약어로굵게표시되어 있고,프로그래머가생성한변수명(word, words)는굵게표시되어 있지않다. 대다수텍스트편집기는파이썬구문을 인지하고 있어서,파이썬예약어와프 로그래머가 작성한변수를구분하기 위해서색깔을다르게표시한다. 잠시후에 여러분은파이썬을 읽고변수와예약어를빠르게구분할수있을것이다. 4 d ëńĺëńd.
46 28 제 2 장. 변수,표현식,문장(Statement) 제 13 절 디버깅(Debugging) 이 지점에서 여러분이 저지르기 쉬운 구문 오류는 odd~job, US$ 같은 특수문자 를포함해서 잘못된변수명을생성하는것과 class, yield같은예약어를변수 명으로 사용하는 것이다. 변수명에공백을넣는다면,파이썬은연산자없는두개의피연산자로생각 한다. >>> bad name = 5 SyntaxError: invalid syntax 구문오류에대해서,오류메세지는그다지도움이되지못한다.가장흔한오류 메세지는 SyntaxError: invalid syntax, SyntaxError: invalid token인 데둘다그다지오류에대한많은정보를주지는못한다. 여러분이많이범하는실행오류는정의전에사용( use before def )하는것으로 변수에값을대입하기전에변수를사용할경우발생한다.여러분이변수명을 잘못쓸때도발생할수있다. >>> principal = >>> interest = principle * rate NameError: name 'principle' is not defined 변수명은 대소문자를 구분한다. 그래서, LaTeX는 latex와 같지 않다. 이지점에서여러분이범하기쉬운 의미론적오류는연산자우선순위일것이다. 예를들어 1 2π를계산하기 위해서다음과같이프로그램을 작성하게되면... >>> 1.0 / 2.0 * pi 나눗셈이먼저 일어나서 π/2이되는데 의도한것과같지않다.파이썬으로하여 금여러분이 작성한 의도를알게할수는없다.그래서 이런경우오류메세지는 없지만,여러분은 잘못된답을얻게된다. 제 14절 용어설명 대입(assignment): 변수에 값을 대입하는 문장 연결(concatenate): 두 개의 피연산자 끝과 끝을 합치는 것 주석(comment): 다른프로그래머나소스코드를 읽는다른사람을 위한프로그 램 정보로 프로그램의 실행에는 아무런 영향이 없다. 평가(evaluate): 하나의 값을 만들도록 연산을 실행함으로써 표현식을 간단히 하는것 표현식(expression): 하나의결과값을만드는변수,연산자,값의조합 부동 소수점(floating-point): 소수점을 가진 숫자를 표현하는 자료형
47 15. 연습문제 29 버림나눗셈(floor division) 두숫자를나누어소수점이하부분을절사하는연 산자 정수(integer): 완전수를 나타내는 자료형 예약어(keyword): 컴파일러가 프로그램을 파싱하는데 사용하기 위해서 이미 예약된단어; if, def, while같은예약어를변수명으로사용할수없다. 연상기호(mnemonic): 기억 보조. 변수에 저장된 것을 기억하기데 도움이 되도 록 변수에 연상되는 이름을 부여한다. 나머지 연산자(modulus operator): 퍼센트 기호 (%)로 표시되고 정수를 가지고 한숫자를다른숫자로나누었을때나머지를생성하는연산자 피연산자(operand): 연산자가 연산을 수행하는 값중의 하나 연산자(operator): 덧셈,곱셈,문자열결합같은간단한연산을표현하는특별 기호 우선순위 규칙(rules of precedence): 다수의 연산자와 피연산자를 포함한 표현 식이평가되는실행순서를규정한규칙집합 문장(statement): 명령이나 액션을 나타내는 코드 부문. 지금까지 assignment, print문을보았다. 문자열(string): 일련의 문자를 나타내는 형식 자료형(type): 값의범주.지금까지여러분이살펴본 자료형은정수 (int),부동 소수점수 (float),문자열 (str) 이다. 값(value): 숫자나 문자 같은 프로그램이 다루는 데이터의 기본 단위중 하나 변수(variable): 값을 참조하는 이름 제 15절 연습문제 Exercise 2.2 raw_input을사용하여사용자의 이름을 입력받고환영하는프로 그램을 작성하세요. Enter your name: Chuck Hello Chuck Exercise 2.3 급여를지불하기 위해서사용자로부터근로시간과시간당 임금을 계산하는프로그램을 작성하세요. Enter Hours: 35 Enter Rate: 2.75 Pay: 96.25
48 30 제 2 장. 변수,표현식,문장(Statement) 지금은급여가정확하게소수점두자리까지표현되지않아도된다.만약원하 다면,파이썬내장round함수를사용하여소수점아래두자리까지반올림하여 작성할수있다. Exercise 2.4 다음대입문장을실행한다고가정합시다. width = 17 height = 12.0 다음 표현식 각각에 대해서, 표현식의 값(value)과 (표현식 값의) 자료형(type)을 작성하세요. 1. width/2 2. width/ height/ * 5 정답을 확인하기 위해서 파이썬 인터프리터를 사용하세요. Exercise 2.5 사용자로부터섭씨온도를 입력받아화씨온도로변환하고,변환된 온도를 출력하는 프로그램을 작성하세요.
49 제 3 장 조건부실행 제 1 절 불 표현식(Boolean expressions) 불 표현식(boolean expression)은 참(True) 혹은 거짓(False)를 지닌 표현식이다. 다음예제는 ==연산자를사용하여두개피연산자를비교하여값이동일하면 참(True),그렇지않으면거짓(False)을산출한다. >>> 5 == 5 True >>> 5 == 6 False 참(True)과 거짓(False)은 불(bool) 자료형(type)에 속하는 특별한 값이지만, 문자열은아니다. >>> type(true) <type 'bool'> >>> type(false) <type 'bool'> ==연산자는 비교 연산자(comparison operators) 중 하나이고, 다른 연산자는 다음과 같다. x!= y x > y x < y x >= y x <= y x is y x is not y # x는 y와 값이 같지 않다. # x는 y보다 크다. # x는 y보다 작다. # x는 y보다 크거나 같다. # x는 y보다 작거나 같다. # x는 y와 같다. # x는 y와 개체가 동일하지 않다. 상기연산자가친숙할지모르지만,파이썬기호는수학기호와다르다. 일반적 인오류로비교를해서동일하다는 의미로==연산자대신에=를사용하는것이 다. =연산자는대입연산자이고, ==연산자는비교연산자다. =<, =>같은비교 연산자는 파이썬에는 없다.
50 32 제 3 장. 조건부실행 제 2절 논리연산자 세개논리연산자(logical operators): and, or, not가있다.논리연산자 의미는 영어 의미와 유사하다.예를들어, x > 0 and x < 10 x 가 0 보다 크다. 그리고(and), 10 보다 작으면 참이다. n%2 == 0 or n%3 == 0은두조건문중의하나만참이되면,즉,숫자가 2혹은 (or) 3으로 나누어지면 참이다. 마지막으로 not연산자는불연산표현식을부정한다. x > y가거짓이면, not (x > y)은참이다.즉,x이y보다 작거나같으면참이다. 엄밀히말해서,논리연산자의두피연산자는모두불표현식이지만,파이썬에 서그다지엄격하지는않다. 0 이아닌 임의의숫자모두 "참(true)"으로해석 된다. >>> 17 and True True 이러한 유연함이 유용할수있으나,혼란을줄수도 있으니 유의해서사용해야 한다.무슨 일을하고 있는지정확하게알지못한다면피하는게상책이다. 제 3절 조건문실행 유용한프로그램을 작성하기 위해서거의항상조건을확인하고조건에따라프 로그램 실행을 바꿀 수 있어야 한다. 조건문(Conditional statements)은 그러한 능력을부여한다.가장간단한형태는if문이다. if x > 0 : print 'x is positive' if문 뒤에 불 표현식(boolean expression)을 조건(condition)이라고 한다. no x > 0 yes print 'x is positive' 만약조건문이참이면,들여쓰기된문장이실행된다.만약조건문이거짓이면, 들여쓰기된문장의실행을건너뛴다.
51 4. 대안 실행 33 if문은함수정의, for반복문과동일한구조를가진다. if문은콜론(:)으로끝 나는 헤더 머리부문과 들여쓰기된 몸통 블록(block)으로 구성된다. if문처럼 문장이한줄이상에걸쳐 작성되기때문에복합문장(compound statements) 이라고 한다. if문몸통부문에 작성되는실행문장숫자에제한은없으나최소한한줄은 있어야한다.때때로,몸통부문에어떤문장도없는경우가 있다.아직코드를 작성하지않아서 자리만 잡아놓는경우로,아무것도수행하지않는 pass문을 사용할수있다. if x < 0 : pass # 음수값을 처리 예정! if문을파이썬 인터프리터에서타이핑하고엔터를치게되면,명령프롬프트가 갈매기세마리에서점세개로바뀐다.따라서다음과같이 if문몸통부분을 작 성중에 있다는 것을 나타낸다. >>> x = 3 >>> if x < 10:... print 'Small'... Small >>> 제 4절 대안실행 if문의 두 번째 형태는 대안 실행(alternative execution)이다. 대안 실행의 경우 두가지경우의수가존재하고,조건이어느방향으로실행할것인지결정한다. 구문(Syntax)은아래와같다. if x%2 == 0 : print 'x is even' else : print 'x is odd' x를 2로나누었을때, 0 이되면,x는짝수이고,프로그램은짝수( x is even )라는 결과메시지를출력한다.만약조건이거짓이라면,두번째몸통부문문장이 실행된다. no print 'x is odd' x%2 == 0 yes print 'x is even'
52 34 제 3 장. 조건부실행 조건은참혹은거짓이어서,대안중하나만정확하게실행된다.대안을분기 (Branch)라고도 하는데 이유는 실행 흐름이 분기되기 때문이다. 제 5절 연쇄조건문 때때로,두가지 이상의경우의수가 있으며,두가지 이상의분기가필요하다. 이와같은연산을표현하는방식이연쇄조건문(chained conditional)이다. if x < y: print 'x is less than y' elif x > y: print 'x is greater than y' else: print 'x and y are equal' elif는 else if 의축약어이다. 이번에도단한번의분기만실행된다. x < y yes print 'less' x > y yes print 'greater' print 'equal' elif문의갯수에제한은없다. else절이 있다면,거기서끝마쳐야하지만,연 쇄조건문에필히 있어야하는것은아니다. if choice == 'a': print 'Bad guess' elif choice == 'b': print 'Good guess' elif choice == 'c': print 'Close, but not correct' 각조건은순서대로점검한다.만약첫번째가거짓이면,다음을점검하고계속 점검해나간다.순서대로진행중에하나의조건이참이면,해당분기가수행되 고,if문전체는종료된다.설사하나 이상의조건이참이라고하더라도,첫번째 참분기만수행된다.
53 6. 중첩 조건문 35 제 6절 중첩조건문 하나의조건문이조건문내부에중첩될수있다.다음과같이삼분예제를 작성 할수있다. if x == y: print 'x and y are equal' else: if x < y: print 'x is less than y' else: print 'x is greater than y' 바깥조건문에는두개의분기가 있다.첫분기는간단한문장을담고 있다.두번 째분기는 자체가두개의분기를가지고 있는또다른if문을담고 있다. 자체로 둘다조건문이지만,두분기모두간단한문장이다. yes x == y no yes x < y no print 'equal' print 'less' print 'greater' 문장을들여쓰는것이구조를명확히하지만,중첩조건문의 경우 가독성이급 격히저하된다. 일반적으로, 가능하면중첩조건문을피하는 것을권장한다. 논리연산자를사용하여중첩조건문을 간략히할수있다.예를들어,단일조 건문으로 가지고앞의코드를다음과 같이 재작성할수있다. if 0 < x: if x < 10: print 'x is a positive single-digit number.' print문은 두 개 조건문을 통과될 때만 실행돼서, and 연산자와 동일한 효과를 거둘수있다. if 0 < x and x < 10: print 'x is a positive single-digit number.'
54 36 제 3 장. 조건부실행 제 7절 try와 catch를활용한예외처리 함수 raw_input와 int을사용하여앞에서사용자가타이핑한숫자를 읽어정 수로파싱하는프로그램코드를살펴보았다.또한 이렇게코딩하는 것이얼마나 위험한 것인지도 살펴보았다. >>> speed = raw_input(prompt) What...is the airspeed velocity of an unladen swallow? What do you mean, an African or a European swallow? >>> int(speed) ValueError: invalid literal for int() >>> 파이썬 인터프리터에서상기문장을실행하면, 인터프리터에서새로운프롬프 트로되고, "이런(oops)" 잠시후에,다음문장실행으로넘어간다. 하지만,만약코드가파이썬스크립트로실행이되어오류가발생하면,역추적 해서그지점에서즉시멈추게된다.다음에오는문장은실행하지않는다. 화씨온도를섭씨온도로변환하는 간단한프로그램이 있다. inp = raw_input('enter Fahrenheit Temperature:') fahr = float(inp) cel = (fahr ) * 5.0 / 9.0 print cel 이코드를실행해서적절하지않은 입력값을넣게되면,다소불친절한오류 메시지와 함께 간단히 작동을 멈춘다. python fahren.py Enter Fahrenheit Temperature: python fahren.py Enter Fahrenheit Temperature:fred Traceback (most recent call last): File "fahren.py", line 2, in <module> fahr = float(inp) ValueError: invalid literal for float(): fred 이런종류의예측하거나,예측하지못한오류를다루기 위해서파이썬에는 try / except 로불리는조건실행구조가내장되어 있다.try와except의기본적인 생각은 일부명령문에문제가 있다는 것을사전에알고 있고,만약그때문에오 류가 발생하게 된다면 대신 프로그램에 추가해서 명령문을 실행한다는 것이다. except블록의문장은오류가없다면실행되지않는다. 문장 실행에 대해서 파이썬 try, except 기능을 보험으로 생각할 수도 있다. 온도변환기프로그램을다음과 같이 재작성한다. inp = raw_input('enter Fahrenheit Temperature:') try: fahr = float(inp) cel = (fahr ) * 5.0 / 9.0
55 8. 논리연산식의단락(Short circuit)평가 37 print cel except: print 'Please enter a number' 파이썬은 try블록문장을우선실행한다.만약모든 것이순조롭다면, except 블록을 건너뛰고,다음코드를실행한다.만약 try블록에서 except이발생하 면, 파이썬은 try 블록에서 빠져 나와 except블록 문장을 수행한다. python fahren2.py Enter Fahrenheit Temperature: python fahren2.py Enter Fahrenheit Temperature:fred Please enter a number try문으로 예외사항을 다루는 것을 예외 처리한다(catching an exception)고 부른다. 예제에서 except 절에서는 단순히 오류 메시지를 출력만 한다. 대체로, 예외처리를통해서오류를 고치거나, 재시작하거나,최소한프로그램이정상 적으로종료될수있게한다. 제 8절 논리연산식의단락(Short circuit)평가 x >= 2 and (x/y) > 2와 같은 논리 표현식을 파이썬에서 처리할 때, 왼쪽에 서부터오른쪽으로표현식을평가한다. and정의때문에 x 가 2보다 작다면, x >= 2은 거짓(False)으로, 전체적으로 (x/y) > 2 이 참(True) 혹은 거짓 (False) 이냐에관계없이거짓(False)이된다. 나머지논리표현식을평가해도나아지는 것이없다고파이썬이 자동으로탐 지할때,평가를멈추고나머지논리표현식에대한연산도중지한다.최종값이 이미 결정되었기때문에더이상의논리표현식의평가가멈출때, 이를단락 (Short-circuiting)평가라고한다. 좋은점처럼보일수있지만,단락행동은 가디언패턴(guardian pattern)으로 불리는좀더똑똑한기술로연계된다.파이썬 인터프리터의다음코드를살펴 보자. >>> x = 6 >>> y = 2 >>> x >= 2 and (x/y) > 2 True >>> x = 1 >>> y = 0 >>> x >= 2 and (x/y) > 2 False >>> x = 6 >>> y = 0 >>> x >= 2 and (x/y) > 2 Traceback (most recent call last): File "<stdin>", line 1, in <module>
56 38 제 3 장. 조건부실행 ZeroDivisionError: integer division or modulo by zero >>> 세번째연산은실패하는데 이유는 (x/y)연산을평가할때y가0이어서실행 오류발생한다.하지만,두번째예제의 경우실패하지않는데 이유는 x >= 2 이 거짓(False) 으로, 전체가 거짓(False)이 되어 단락(Short-circuiting) 평가 규칙에 의해(x/y)평가는실행되지않아오류도발생하지않는다. 평가 오류를 발생하기 전에 가디언(gardian) 평가식을 전략적으로 배치해서 논 리표현식을다음과 같이구성한다. >>> x = 1 >>> y = 0 >>> x >= 2 and y!= 0 and (x/y) > 2 False >>> x = 6 >>> y = 0 >>> x >= 2 and y!= 0 and (x/y) > 2 False >>> x >= 2 and (x/y) > 2 and y!= 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero >>> 첫번째논리표현식은 x >= 2 이거짓(False) 이라 and에서멈춘다.두번째 논리표현식은x >= 2 이참(True),y!= 0은거짓(False) 이라(x/y)까지 갈 필요가없다.세번째논리표현식은(x/y)연산이끝난후에y!= 0 이수행되 어서오류가발생한다. 두번째표현식에서y가0이아닐때만,(x/y)을실행하도록y!= 0 이 가디언 (gardian)역할을수행한다고말할수있다. 제 9절 디버깅(Debugging) 오류가 발생했을 때, 파이썬 화면에 출력되는 역추적(traceback)에는 상당한 정보가담겨있다.하지만,특히스택에많은프레임이 있는 경우엄청나게보여 엄두가나지않을수도 있다.대체로 가장 유용한정보는다음과 같은 것이 있다. 어떤 종류의 오류인가. 어디서발생했는가. 구문오류는대체로발견하기쉽지만,몇가지는애매하다. 공백(space)과탭 (tab)의차이가눈에보이지않아통상무시하고넘어가기쉽기때문에 공백오 류를 잡아내기가까다롭다. >>> x = 5 >>> y = 6 File "<stdin>", line 1
57 10. 용어 정의 39 y = 6 ^ SyntaxError: invalid syntax 상기예제문제는두번째줄에한칸공백이들여써서발생하는 것이다.하지만, y에오류메시지가 있는데프로그래머를 잘못된 곳으로 인도한다.대체로오류 메시지는 문제가 어디에서 발견되었는지를 지칭하지만, 실제 오류는 코드 앞에 종종선행하는줄에 있을수있다. 동일한문제가실행오류에도 있다.데시벨(decibels)로신호대비 잡음비를 계 산한다고 가정하자. 공식은 SNR db = 10log 10 (P signal /P noise ) 이다.파이썬에서아 래와 같이 작성할수있다. import math signal_power = 9 noise_power = 10 ratio = signal_power / noise_power decibels = 10 * math.log10(ratio) print decibels 하지만,실행하게되면,다음과 같은오류메시지 1 가발생한다. Traceback (most recent call last): File "snr.py", line 5, in? decibels = 10 * math.log10(ratio) OverflowError: math range error 오류메지지가 5번째줄에 있다고지칭하지만, 잘못된 것은없다.실제오류를 발견하기 위해서,출력값이 0 인ratio 값을print문을사용해서출력하는 것이 도움이된다.문제는 4번째줄에 있는데,왜냐하면두정수를나눌때내림나눗 셈을 했기 때문입니다. signal_power 와 noise_power 를 부동 소수점값으로 표현하는게해결책이다. 대체로,오류메시지는문제가어디에서발견되었는지를알려주지만,종종문 제의 원인이 어디에서 발생했는지는 알려주지 않는다. 제 10절 용어정의 몸통 부문(body): 복합 문장 내부에 일련의 문장문 불 표현식(boolean expression): 참(True) 혹은 거짓(False)의 값을 가지는 표 현식 분기(branch): 조건문에서 대안 문장의 한 흐름 연쇄 조건문(chained conditional): 일련의 대안 분기가 있는 조건문 비교 연산자(comparison operator): 피연산자를 ==,!=, >, <, >=, <=로 비교하 는연산자 1 파이썬 3.0에서는오류메시지가발생하지않는다.정수피연산자인경우에도나눗셈연산 자가 부동 소수점 나눗셈을 수행한다.
58 40 제 3 장. 조건부실행 조건문(conditional statement): 조건에 따라 명령의 흐름을 제어하는 명령문 조건(condition): 조건문에서 어느 분기를 실행할지 결정하는 불 표현식 복합문(compound statement): 머리부문(head)과 몸통부문(body)으로 구성된 문장. 머리부문은 콜론(:)으로 끝나며, 몸통부문은 머리부문을 기준으로 들여쓰기로 구별된다. 가디언 패턴(guardian pattern): 단락(short circuit) 행동을 잘 이용하도록 논 리표현식을구성하는 것 논리 연산자(logical operator): 불 표현식을 결합하는 연산자 중의 하나 (and, or,not) 중첩 조건문(nested conditional): 하나의 조건문이 다른 조건문 분기에 나타나 는조건문. 역추적(traceback): 예외 사항이 발생했을 때 실행되고, 출력되는 함수 리스트 단락(short circuit): 나머지표현식평가를할필요없이최종 결과를알기때문 에,파이썬이논리표현식평가를진행하는중간에평가를멈출때. 제 11절 연습문제 Exercise 시간 이상 일할경우시급을 1.5배더종업원에게지급하는봉 급계산 프로그램을 다시 작성하세요. Enter Hours: 45 Enter Rate: 10 Pay: Exercise 3.2 try, except를 사용하여 봉급계산 프로그램을 다시 작성하세요. 숫자가아닌 입력값을 잘처리해서숫자아닌 입력값이들어왔을때메시지를 출력하고 정상적으로 프로그램을 종료하도록 합니다. 다음이 프로그램 출력 결 과를 보여줍니다. Enter Hours: 20 Enter Rate: nine Error, please enter numeric input Enter Hours: forty Error, please enter numeric input Exercise 과 1.0사이의점수를출력하는프로그램을 작성하세요.만약 점수가범위밖이면오류를출력합니다.만약점수가 0.0과 1.0사이라면,다음 의테이블에따라등급을출력합니다. Score Grade >= 0.9 A
Microsoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More information정보교육을위한파이썬 정보탐색 Version d2 저자 : Charles Severance 번역 : 이광춘, 한정수 (xwmooc)
정보교육을위한파이썬 정보탐색 Version 0.0.9-d2 저자 : Charles Severance 번역 : 이광춘, 한정수 (xwmooc) Copyright 2009- Charles Severance. Printing history: October 2013: Major revision to Chapters 13 and 14 to switch to JSON
More informationChapter 2 변수와 수식 그리고 문장 프로그래밍 언어의 가장 강력한 기능 중 하나는 변수(variable)가 조작 가능하다는 것이다. 변수 는 값에 부여하는 이름이다. 2.1 할당문 할당문(assignment statement)은 새로운 변수를 생성하고 값을 부여
Chapter 2 변수와 수식 그리고 문장 프로그래밍 언어의 가장 강력한 기능 중 하나는 변수(variable)가 조작 가능하다는 것이다. 변수 는 값에 부여하는 이름이다. 2.1 할당문 할당문(assignment statement)은 새로운 변수를 생성하고 값을 부여한다. >>> message = 'And now for something completely
More informationMicrosoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More informationMicrosoft PowerPoint - chap04-연산자.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에
More informationChapter 5 조건문과 재귀문 프로그램의 상태에 따라 다른 코드를 실행하는 if문이 이 장의 핵심 주제이다. 그 전에 내림 나눗 셈 연산자와 나머지 연산자를 살펴보자. 5.1 내림 나눗셈과 나머지 연산자 내림 나눗셈 연산자 //는 두 수를 나누어 얻은 결과 값의 정
Chapter 5 조건문과 재귀문 프로그램의 상태에 따라 다른 코드를 실행하는 if문이 이 장의 핵심 주제이다. 그 전에 내림 나눗 셈 연산자와 나머지 연산자를 살펴보자. 5.1 내림 나눗셈과 나머지 연산자 내림 나눗셈 연산자 //는 두 수를 나누어 얻은 결과 값의 정수 값을 취한다. 예를 들어, 105분 길이의 영화가 있다고 했을 때 몇 시간 짜리 영화인지
More informationMicrosoft PowerPoint - chap05-제어문.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.
More information다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");
다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher
More informationuntitled
시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000
More information<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More informationMicrosoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt
변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short
More information10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다
10 강. 쉘스크립트 쉘스크립트 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다른운영체제로이식되지않음 -스크립트언어를사용하면컴파일과정이없고인터프리터가소스파일에서명령문을판독하여각각의명령을수행
More informationMulti-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구
Python: 파이썬이란무엇인가? Kangwon Natl. University Department of Computer Science Cheoneum Park Intelligent software Lab. 파이썬이란? Python 1990년암스테르담의귀도반로섬 (Guido Van Rossum) 이개발한인터프리터언어 국내외에서교육, 실무등에서많이사용 구글의소프트웨어,
More informationPowerPoint 프레젠테이션
Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.
More information슬라이드 1
Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치
More informationMicrosoft PowerPoint - chap-03.pptx
쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소 컴퓨터프로그래밍기초 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C프로그램을이루는구성요소들을살펴봅니다. 컴퓨터프로그래밍기초 2 일반적인프로그램의형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에
More informationInfinity(∞) Strategy
반복제어 표월성 passwd74@cherub.sungkyul.edu 개요 for() 문 break문과 continue문 while문 do-while문 for() 문 for() 문형식 for( 표현식1; 표현식2; 표현식3) 여러문장들 ; 표현식 1 : 초기화 (1 번만수행 ) 표현식 2 : 반복문수행조건 ( 없으면무한반복 ) 표현식 3 : 반복문수행횟수 for()
More information4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona
이름 : 학번 : A. True or False: 각각항목마다 True 인지 False 인지적으세요. 1. (Python:) randint 함수를사용하려면, random 모듈을 import 해야한다. 2. (Python:) '' (single quote) 는한글자를표현할때, (double quote) 는문자열을표현할때사용한다. B. 다음에러를수정하는방법을적으세요.
More informationPowerPoint 프레젠테이션
Lecture 02 프로그램구조및문법 Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018 자바프로그램기본구조 Hello 프로그램구조 sec01/hello.java 2/40 자바프로그램기본구조 Hello 프로그램구조
More informationMicrosoft PowerPoint - chap03-변수와데이터형.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More information비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2
비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationMicrosoft PowerPoint - Lesson2.pptx
Computer Engineering g Programming g 2 제 3 장 C 프로그래밍구성요소 Lecturer: JUNBEOM YOO jbyoo@konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() *
More informationMicrosoft PowerPoint - CSharp-10-예외처리
10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.
More informationPowerPoint 프레젠테이션
실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3
More informationMicrosoft PowerPoint - chap-05.pptx
쉽게풀어쓴 C 언어 Express 제 5 장수식과연산자 컴퓨터프로그래밍기초 이번장에서학습할내용 * 수식과연산자란? * 대입연산 * 산술연산 * 논리연산 * 관계연산 * 우선순위와결합법칙 이번장에서는수식과연산자를살벼봅니다. 컴퓨터프로그래밍기초 2 수식 수식 (expression) x + y x*x + 5*x + 6 (principal * interest_rate
More information<B3EDB9AEC0DBBCBAB9FD2E687770>
(1) 주제 의식의 원칙 논문은 주제 의식이 잘 드러나야 한다. 주제 의식은 논문을 쓰는 사람의 의도나 글의 목적 과 밀접한 관련이 있다. (2) 협력의 원칙 독자는 필자를 이해하려고 마음먹은 사람이다. 따라서 필자는 독자가 이해할 수 있는 말이 나 표현을 사용하여 독자의 노력에 협력해야 한다는 것이다. (3) 논리적 엄격성의 원칙 감정이나 독단적인 선언이
More information프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음
프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 CHAPTER 9 둘중하나선택하기 관계연산자 두개의피연산자를비교하는연산자 결과값은참 (1) 아니면거짓 (0) x == y x 와 y 의값이같은지비교한다. 관계연산자 연산자 의미 x == y x와 y가같은가? x!= y
More information쉽게 풀어쓴 C 프로그래밍
두근두근 파이썬수업 4 장자료의종류에는어떤것들이있나요? 이번장에서만들프로그램 (1) 터틀그래픽의거북이와인사하는프로그램을작성해보자. Run Python (2) 여러개의색상을리스트에저장하였다가하나씩꺼내서원들을그려보자 Run Python 파이썬에서사용할수있는자료의종류 파이썬과자료형 변수에어떤종류의자료도저장할수있다 x = 10 print("x =", x) x = 3.14
More informationMicrosoft PowerPoint - e pptx
Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells
More informationPowerPoint Presentation
객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean
More information윈도우즈프로그래밍(1)
제어문 (2) For~Next 문 윈도우즈프로그래밍 (1) ( 신흥대학교컴퓨터정보계열 ) 2/17 Contents 학습목표 프로그램에서주어진특정문장을부분을일정횟수만큼반복해서실행하는문장으로 For~Next 문등의구조를이해하고활용할수있다. 내용 For~Next 문 다중 For 문 3/17 제어문 - FOR 문 반복문 : 프로그램에서주어진특정문장들을일정한횟수만큼반복해서실행하는문장
More information152*220
152*220 2011.2.16 5:53 PM ` 3 여는 글 교육주체들을 위한 교육 교양지 신경림 잠시 휴간했던 우리교육 을 비록 계간으로이지만 다시 내게 되었다는 소식을 들으니 우 선 반갑다. 하지만 월간으로 계속할 수 없다는 현실이 못내 아쉽다. 솔직히 나는 우리교 육 의 부지런한 독자는 못 되었다. 하지만 비록 어깨너머로 읽으면서도 이런 잡지는 우 리
More information<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>
쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C 프로그램을이루는구성요소들을살펴봅니다. 일반적인프로그램의형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력
More information<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More informationC 프로그램의 기본
C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석
More informationC# Programming Guide - Types
C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든
More informationMicrosoft PowerPoint 자바-기본문법(Ch2).pptx
자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드
More information쉽게
Power Java 제 4 장자바프로그래밍기초 이번장에서학습할내용 자바프로그램에대한기초사항을학습 자세한내용들은추후에. Hello.java 프로그램 주석 주석 (comment): 프로그램에대한설명을적어넣은것 3 가지타입의주석 클래스 클래스 (class): 객체를만드는설계도 ( 추후에학습 ) 자바프로그램은클래스들로구성된다. 그림 4-1. 자바프로그램의구조 클래스정의
More informationMicrosoft PowerPoint - [2009] 02.pptx
원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include
More informationC 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12
More informationMicrosoft PowerPoint 웹 연동 기술.pptx
웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 URL 분석 (1/2) URL (Uniform Resource Locator) 프로토콜, 호스트, 포트, 경로, 비밀번호, User 등의정보를포함 예. http://kim:3759@www.hostname.com:80/doc/index.html URL 을속성별로분리하고자할경우
More informationPowerPoint Presentation
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.
More informationISP and CodeVisionAVR C Compiler.hwp
USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler
More informationView Licenses and Services (customer)
빠른 빠른 시작: 시작: 라이선스, 라이선스, 서비스 서비스 및 주문 주문 이력 이력 보기 보기 고객 가이드 Microsoft 비즈니스 센터의 라이선스, 서비스 및 혜택 섹션을 통해 라이선스, 온라인 서비스, 구매 기록 (주문 기록)을 볼 수 있습니다. 시작하려면, 비즈니스 센터에 로그인하여 상단 메뉴에서 재고를 선택한 후 내 재고 관리를 선택하십시오. 목차
More information기본소득문답2
응답하라! 기본소득 응답하라! 기본소득 06 Q.01 07 Q.02 08 Q.03 09 Q.04 10 Q.05 11 Q.06 12 Q.07 13 Q.08 14 Q.09 응답하라! 기본소득 contents 16 Q.10 18 Q.11 19 Q.12 20 Q.13 22 Q.14 23 Q.15 24 Q.16 Q.01 기본소득의 개념을 쉽게 설명해주세요. 06 응답하라
More information3장 함수
3 장함수 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 3 장함수 1 / 20 학습내용 함수호출타입변환함수수학함수사용자정의함수파라미터와인자변수와파라미터의범위함수의구분함수를사용하는이유 from을이용한가져오기디버깅변수의범위재귀함수 박창이 ( 서울시립대학교통계학과 ) 3 장함수 2 / 20 함수호출 함수는어떤연산을수행하는일련의명령문들로함수이름으로호출
More informationTEST BANK & SOLUTION
TEST BANK & SOLUTION 어서와자바는처음이지!" 를강의교재로채택해주셔서감사드립니다. 본문제집을만드는데나름대로노력을기울였으나제가가진지식의한계로말미암아잘못된부분이있을것으로사료됩니다. 잘못된부분을발견하시면 chunik@sch.ac.kr로연락주시면더좋은책을만드는데소중하게사용하겠습니다. 다시한번감사드립니다. 1. 자바언어에서지원되는 8 가지의기초자료형은무엇인가?
More information0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4
Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x
More information< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>
Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법
More information17장 클래스와 메소드
17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는
More information학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationuntitled
Content Ⅰ. 기본방향 1. 목 적 3 2. 적용범위 3 Ⅱ. 사회복지관 운영 1. 사회복지관의 정의 7 2. 사회복지관의 목표 7 3. 사회복지관의 연혁 7 4. 사회복지관 운영의 기본원칙 8 Ⅲ. 사회복지관 사업 1. 가족복지사업 15 2. 지역사회보호사업 16 3. 지역사회조직사업 18 4. 교육 문화사업 19 5. 자활사업 20 6. 재가복지봉사서비스
More information8장 문자열
8 장문자열 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 8 장문자열 1 / 24 학습내용 문자열 (string) 훑기 (traversal) 부분추출 (slicing) print 함수불변성 (immutablity) 검색 (search) 세기 (count) Method in 연산자비교 박창이 ( 서울시립대학교통계학과 ) 8 장문자열 2 /
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationC++ Programming
C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout
More information<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>
쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트 통합개발환경의종류 비주얼 C++(Visual C++)
More informationMicrosoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2)
일반적인프로그램의기본구성형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력 ( 출력단계 ) 한다. 데이터입력 데이터처리 결과출력 1-23 덧셈프로그램 #1 주석 전처리기지시어 /* 두개의숫자의합을계산하는프로그램 */ #include 함수 int main(void) { int x; int y; int sum;
More informationMicrosoft PowerPoint - chap08-1 [호환 모드]
2011-1 학기프로그래밍입문 (1) 참고자료 : chapter 8-1. 전처리 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 전처리명령어 컴파일과정에는전처리 (preprocessing) 단계가있다. - 컴파일러는목적파일을만들기전에전처리라고하는특별한작업을
More informationTcl의 문법
월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이
More informationMicrosoft PowerPoint - gnu-w09-c-chap
어서와 C 언어는처음이지 제 1 장 컴퓨터 컴퓨터는생각만큼똑똑한물건이아니다. 컴퓨터는스스로자신이수행할작업을결정할수없다. 프로그램 우리가컴퓨터에게아주자세한명령어를주어야한다. 컴퓨터에게특정한작업을수행하게하는자세한명령어의리스트를프로그램 (program) 이라고한다. 1. 정수를읽는다. 2. 합을계산한다. 3. 합을화면에출력한다. 작성해야하는프로그램 일반적인프로그램은구입하거나다운로드받을수있다.
More informationMicrosoft PowerPoint - Perpect C 02.ppt [호환 모드]
02 C 프로그래밍기초 충남대학교이형주 1 C 프로그램구조 콘솔응용프로그램 2 프로그램실행순서 C 프로그램은여러함수의조합으로구성 함수란정해진규칙에의하여일련의작업을수행하는프로그램의단위 실행순서 main 함수는프로그램이실행되면가장먼저시작되는부분 모든함수내부에서는위에서아래로, 좌에서우로, 문장이위치한순서대로실행 3 전처리기 전처리기 (preprocessor) 미리처리하는프로그램으로,
More information아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상
Android 용 Brother Image Viewer 설명서 버전 0 KOR 아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상표입니다. Android는
More information문서의 제목 나눔고딕B, 54pt
산업공학과를위한 프로그래밍입문 (w/ 파이썬 ) PART I : 파이썬기초 가천대학교 산업경영공학과 최성철교수 수학연산 Integer 와 Float >>> print 3/2 1 # 왜 1 이나올까? - 파이썬은정수 (Integer) 와소수 (decimal number) 를구분 - 프로그래밍에서소수는부동소수 (floating-point numbers) 또는 float
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationMicrosoft PowerPoint - chap06-1Array.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어
More informationMicrosoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]
Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨
More informationKNK_C03_Expr_kor
Expressions adopted from KNK C Programming : A Modern Approach Operators 연산자 C 는표현식을많이사용함 표현식은변수와상수와연산자로구성됨 C 에는연산자의종류가다양함 1. arithmetic operators ( 수식연산자 ) 2. relational operators ( 관계연산자 ) 3. logical
More informationChapter_06
프로그래밍 1 1 Chapter 6. Functions and Program Structure April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 이장의강의목표 2 문자의입력방법을이해한다. 중첩된 if문을이해한다. while 반복문의사용법을익힌다. do 반복문의사용법을익힌다.
More informationPowerPoint 프레젠테이션
Chapter 03 일단짜보는그럴듯한 C 프로그램... 1. 프로그램작성순서복습 2. 주석 3. scanf_s( ) 맛보기 1. 프로그램작성순서복습 프로그래밍작성순서요약 프로젝트만들기 : 소스파일보다프로젝트를먼저생성해야함 코딩 : C 컴파일러가알아들을수있는형식으로문서작성 빌드 : 컴파일과링크를합친개념 컴파일 : 소스를컴퓨터가이해하는오브젝트파일로변환 링크 :
More information와플-4년-2호-본문-15.ps
1 2 1+2 + = = 1 1 1 +2 =(1+2)+& + *=+ = + 8 2 + = = =1 6 6 6 6 6 2 2 1 1 1 + =(1+)+& + *=+ =+1 = 2 6 1 21 1 + = + = = 1 1 1 + 1-1 1 1 + 6 6 0 1 + 1 + = = + 7 7 2 1 2 1 + =(+ )+& + *= + = 2-1 2 +2 9 9 2
More informationJava ...
컴퓨터언어 1 Java 제어문 조성일 조건문 : if, switch 어떠한조건을조사하여각기다른명령을실행 if 문, switch 문 if 문 if - else 문형식 if 문형식 if ( 조건식 ) { 명령문 1; 명령문 2;... if ( 조건식 ) { 명령문 1; 명령문 2;... else { 명령문 a; 명령문 b;... 예제 1 정수를입력받아짝수와홀수를판별하는프로그램을작성하시오.
More information강의 개요
DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE
More informationJava + Python = Jython
Java + Python = Jython ( 피어슨에듀케이션출판사) 1. Jython 소개 본글은저자의동의없이개인적인목적이외에상업적인목적으로사용하실수없습니다. 학교본수업이외에교육체강의자료로사용하는경우에는출처를밝히셔야합니다. 또한인터넷및통신상에저자의동의없이글을공개할수없습니다. 1.1 Python 소개 Python( 파이썬) 은 C/C++/Java와같은일반프로그래밍언어를배운사람들에게는조금괴상한언어처럼보인다.
More informationVisual Basic 반복문
학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For
More information1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-
1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다. 1.2.1 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-1 연산범위이유 : 00000000 00000000 00000000 00000000의 32
More informationC++ Programming
C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator
More information쉽게 풀어쓴 C 프로그래밍
제 3 장 C 프로그램구성요소 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C 프로그램을이루는구성요소들을살펴봅니다. 일반적인프로그램의형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력 ( 출력단계 ) 한다. 데이터입력
More information이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다
이장에서사용되는 MATLAB 명령어들은비교적복잡하므로 MATLAB 창에서명령어를직접입력하지않고확장자가 m 인 text 파일을작성하여실행을한다. 즉, test.m 과같은 text 파일을만들어서 MATLAB 프로그램을작성한후실행을한다. 이와같이하면길고복잡한 MATLAB 프로그램을작성하여실행할수있고, 오류가발생하거나수정이필요한경우손쉽게수정하여실행할수있는장점이있으며,
More informationMicrosoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx
To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse
More informationC 프로그래밊 개요
구조체 2009 년 5 월 19 일 김경중 강의계획수정 일자계획 Quiz 실습보강 5 월 19 일 ( 화 ) 구조체 Quiz ( 함수 ) 5 월 21 일 ( 목 ) 구조체저녁 6 시 5 월 26 일 ( 화 ) 포인터 5 월 28 일 ( 목 ) 특강 (12:00-1:30) 6 월 2 일 ( 화 ) 포인터 Quiz ( 구조체 ) 저녁 6 시 6 월 4 일 ( 목
More informationMicrosoft Word - 3부A windows 환경 IVF + visual studio.doc
Visual Studio 2005 + Intel Visual Fortran 9.1 install Intel Visual Fortran 9.1 intel Visual Fortran Compiler 9.1 만설치해서 DOS 모드에서실행할수있지만, Visual Studio 2005 의 IDE 를사용하기위해서는 Visual Studio 2005 를먼저설치후 Integration
More information유니티 변수-함수.key
C# 1 or 16 (Binary or Hex) 1:1 C# C# (Java, Python, Go ) (0101010 ). (Variable) : (Value) (Variable) : (Value) ( ) (Variable) : (Value) ( ) ; (Variable) : (Value) ( ) ; = ; (Variable) : (Value) (Variable)
More informationMicrosoft PowerPoint - chap-06.pptx
쉽게풀어쓴 C 언어 Express 제 6 장조건문 컴퓨터프로그래밍기초 이번장에서학습할내용 조건문이란? if 문 if, 문 중첩 if 문 switch 문 break문 continue문 goto 문 5장까지는문장들이순차적으로실행된다고하였다. 하지만필요에따라서조건이만족되면문장의실행순서를변경할수있는기능이제공된다. 컴퓨터프로그래밍기초 2 조건문 조건에따라서여러개의실행경로가운데하나를선택
More information문서의 제목 나눔고딕B, 54pt
산업공학과를위한 프로그래밍입문 (w/ 파이썬 ) PART II : Python 활용 가천대학교 산업경영공학과 최성철교수 간단한파일다루기 [ 생각해보기 ] 우리는어떻게프로그램을시작하나? 보통은이렇게생긴아이콘을누른다! 그러나실제로는아이콘이아닌 실행파일 을실행시키는것아이콘을클릭하고오른쪽마우스클릭 속성 을선택해볼것 [ 생각해보기 ] 옆과같은화면이나올것이다대상에있는
More information데이터 시각화
데이터시각화 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 데이터시각화 1 / 22 학습내용 matplotlib 막대그래프히스토그램선그래프산점도참고 박창이 ( 서울시립대학교통계학과 ) 데이터시각화 2 / 22 matplotlib I 간단한막대그래프, 선그래프, 산점도등을그릴때유용 http://matplotlib.org 에서설치방법참고윈도우의경우명령프롬프트를관리자권한으로실행한후아래의코드실행
More informationMicrosoft PowerPoint - KNK_C03_Expr_kor
Expressions adopted from KNK C Programming : A Modern Approach Operators 연산자 C 는표현식을많이사용함 표현식은변수와상수와연산자로구성됨 C 에는연산자의종류가다양함 1. arithmetic operators ( 수식연산자 ) 2. relational operators ( 관계연산자 ) 3. logical
More informationColumns 8 through while expression {commands} 예제 1.2 (While 반복문의이용 ) >> num=0
for loop array {commands} 예제 1.1 (For 반복변수의이용 ) >> data=[3 9 45 6; 7 16-1 5] data = 3 9 45 6 7 16-1 5 >> for n=data x=n(1)-n(2) -4-7 46 1 >> for n=1:10 x(n)=sin(n*pi/10); n=10; >> x Columns 1 through 7
More information1
2/33 3/33 4/33 5/33 6/33 7/33 8/33 9/33 10/33 11/33 12/33 13/33 14/33 15/33 16/33 17/33 5) 입력을 다 했으면 확인 버튼을 클릭합니다. 6) 시작 페이지가 제대로 설정이 되었는지 살펴볼까요. 익스플로러를 종료하고 다시 실행시켜 보세요. 시작화면에 야후! 코리아 화면이 뜬다면 설정 완료..^^
More informationPowerPoint 프레젠테이션
Verilog: Finite State Machines CSED311 Lab03 Joonsung Kim, joonsung90@postech.ac.kr Finite State Machines Digital system design 시간에배운것과같습니다. Moore / Mealy machines Verilog 를이용해서어떻게구현할까? 2 Finite State
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More informationMicrosoft PowerPoint - gnu-w10-c-chap12
어서와 C 언어는처음이지 제 12 장 논리연산자 관계연산자의한계 if (age >= 21) /* 21
More information중간고사
중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX
More information프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.
쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C 프로그램을이루는구성요소들을살펴봅니다. 일반적인프로그램의형태 덧셈프로그램 #1 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계
More informationMicrosoft PowerPoint - C++ 5 .pptx
C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More information