각주차별학습내용 차시 강의일자 차시별학습내용 수업방법 1 ~ 강좌및지식재산권소개 2. 좋은프로그래밍 강의 3 ~ 파이선프로그래밍기초 2. 파이선데이터유형 강의및실습 5 ~ 파이선프로그

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

PowerPoint 프레젠테이션

PowerPoint Presentation

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

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

OCW_C언어 기초

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap06-1Array.ppt

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

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

PowerPoint 프레젠테이션

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

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

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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

PowerPoint Presentation

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

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - C++ 5 .pptx

JAVA PROGRAMMING 실습 02. 표준 입출력

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

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

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

PowerPoint Presentation

PowerPoint Presentation

설계란 무엇인가?

Microsoft PowerPoint - CSharp-10-예외처리

C++ Programming

3. 다음은카르노맵의표이다. 논리식을간략화한것은? < 나 > 4. 다음카르노맵을간략화시킨결과는? < >

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - chap06-2pointer.ppt

쉽게

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

TEST BANK & SOLUTION

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

PowerPoint Presentation

Infinity(∞) Strategy

Microsoft PowerPoint Predicates and Quantifiers.ppt

C 프로그램의 기본

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap-03.pptx

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

Visual Basic 반복문

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

17장 클래스와 메소드

Microsoft PowerPoint - chap04-연산자.pptx

<3235B0AD20BCF6BFADC0C720B1D8C7D120C2FC20B0C5C1FE20322E687770>

4장.문장

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

OCW_C언어 기초

C# Programming Guide - Types

PowerPoint Template

adfasdfasfdasfasfadf

PowerPoint 프레젠테이션

PowerPoint Presentation

Tcl의 문법

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상 2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌

PowerPoint Presentation

PowerPoint Presentation

컴파일러

제 12강 함수수열의 평등수렴

JVM 메모리구조

untitled

11장 포인터

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

슬라이드 1

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

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

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

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

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

JAVA PROGRAMMING 실습 08.다형성

C++ Programming

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

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - chap06-5 [호환 모드]

JAVA PROGRAMMING 실습 09. 예외처리

gnu-lee-oop-kor-lec06-3-chap7

Java ...

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Chapter 4. LISTS

Microsoft PowerPoint - 26.pptx

APCPCWM_ :WP_GLOBAL_PFWP_GLOBAL_PF APCPCWM_ :WP_GLOBAL_PFWP_GLOBAL_PF 예제로보는 네트워크엔지니어를위한 Python 101

강의 개요

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

슬라이드 1

Microsoft PowerPoint - chap-06.pptx

중간고사

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

chap x: G입력

Transcription:

각주차별학습내용 차시 강의일자 차시별학습내용 수업방법 1 ~ 2 2019-04-01 1. 강좌및지식재산권소개 2. 좋은프로그래밍 강의 3 ~ 4 2019-04-08 1. 파이선프로그래밍기초 2. 파이선데이터유형 강의및실습 5 ~ 6 2019-04-15 1. 파이선프로그래밍 - 데이터와알고리즘 강의및실습 7 ~ 8 2019-05-13 1. 파이선제어문소개 2. 파이선반복문 강의및실습 9 ~ 10 2019-05-20 1. 문제해결을위한파이선반복문 강의및실습 11 ~ 12 2019-05-27 1. 파이선조건문 2. 문제해결을위한조건문 강의및실습 13 ~ 14 2019-06-03 1. 파이선함수 2. 파이선게임 / 앱프로그래밍소개 강의및실습 15 ~ 17 2019-06-10 1. 파이선으로게임 / 앱프로그램개발실습

I. 지식재산권 1. 개론

용이하게발명할수있는것은신규성부정

2. 저작권, 표절, 연구노트 연구윤리 > 생명윤리, 표절, 위조, 변조 표절 - 타인의창작물을자신의것인양하는학문적부정행위 기존창작물을다시이용함으로써새로운창작물로보이게하는행위 저작권법 제 28 조 ( 공표된저작물의인용 ), 저작권법제 37 조 ( 출처의명시 ) 연구노트의중요성 지적재산권방어 ( 과기부훈령제 44 호제 8 조 ) - 수기혹은연구노트 SW로일자, 자신의디자인, 기술내용등아이디어를재현 이가능하도록기록후 ( 전자 ) 서명 - 확인자혹은제 3자에의해확인후서명 - 기관명, 일련번호, 연구과제명및쪽번호가적힌제본형태에기록 - 조작가능성배제연구진실성 입증의주요자료연구노하우전수및 지속을 위한자료 발명진흥법의연구노트활용촉진 ( 제 9 조 2 호 ) 국가연구개발사업관리규정 ( 대통령령제 28043 호 ) 연구노트작성원칙 가능하면 1인이자기의연구노트작성 ( 복수의공동기재시구분선과확인서명단일프로젝트만기재제 3 자가실시가능하도록구체적이고상세하게실험데이터기술연구진행및활동에대한사실을기록메모를옮기는것보다바로연구에기재자료부착시고정하고서명, 일자기재 ( 제9조 4호 ) ð 연구노트를이용하여논문작성, 특허출원, 기술이전가능

II. 컴퓨터프로그램 1. 컴퓨터는무엇을실행하는가? => 데이터처리 2. 컴퓨터의기능 컴퓨터를통해다양한일들을하고있지만, 공통적인것은컴퓨터가소프트웨 어 ( 프로그램 ) 를실행

3. 컴퓨터하드웨어와소프트웨어 컴퓨터는기계에해당하는하드웨어부분과어떤일을어떻게처리할것인가 를정해놓은프로그램에해당하는소프트웨어부분으로구성 하드웨어 (Hardware) 사람의신체 ( 몸, 뼈, 살 ) 와같은역할 전자공학의발달로인하여급속도로발전 소프트웨어 (Software) 사람의두뇌 ( 뇌속에들어있는지식, 정보 ) 와같은역할 하드웨어에비해느린속도로발전 이유 : 효율적인개발방법론의부재, 개발인력의부족, 적용분야의폭발적증 대등 4. 컴퓨터는어떻게실행하는가?

5. 가장많이사용되고있는컴퓨터언어 2017 2016

6. 컴퓨터언어번역방식 컴파일러 인터프리터 하이브리드

7. 프로그램작성 프로그램이란문제를해결하기위해컴퓨터에게일을시키는절차를프로그래밍언 어 (Python, JAVA 등 ) 로기술한것 집을짓기위해서설계를함집과같이프로그램도우선명확한설계가이루어져야함설계가명확하게이루어지지않은경우 - 결국오류발생으로추가비용발생 - 오류수정을위한비용은기존에설계를명확하게하든데드는비용보다훨씬더많이소요됨 문제 : 두개의서로다른숫자를입력받아두숫자의가감승제와두숫자를비교 하여큰수를출력하고, 두숫자사이의합을구하는프로그램을작성하시오 1 단계 : 입출력을정의

2 단계 : 절차를정의 - 문제를명확하게정의 문제 : 두개의숫자를입력받아두숫자의가감승제와두숫자를비교하여큰 수를출력하고, 두숫자사이의합을구하는프로그램 두개의숫자가정수인지, 실수인지? --- 정수로정의 두숫자가같은경우에는? --- 문제에서서로다른두개의입력으로정의 두숫자사이의합에두숫자가포함되는지? --- 포함됨 - 문제를작은문제로분해 문제가복잡하면나눌수있을때까지작은문제로분해 두수의입력부분두수의가감승제계산두수중큰수를구한다두수사이의정수의합산결과출력부분 - 각각의문제들을순서, 선택, 반복의논리로절차를정의하고, 연결 - 분해된문제들을논리와연관시켜정의 두수의입력부분--순서두수의가감승제계산--순서두수중큰수를구한다--선택두수사이의정수의합산--반복결과출력부분--순서 3 단계 : 프로그램코드작성 - 순서도 ( 설계도 ) 에따라프로그램을작성

8. 프로그램의실행 프로그램이컴퓨터내부에서어떻게실행되는가? 프로그램이실행되기위해서어떻게적재 (loading) 되는가? 중앙처리장치의기능은? 중앙처리장치내에서프로그램이어떻게실행되는가? 프로그램은컴퓨터의기억장치에저장 컴퓨터에저장된프로그램이실행되기위해서는메모리에적재 (loading) CPU 는메모리에적재된프로그램을실행

III. 파이선 (Python) 1. 파이선특징 - 단순하고직관적인언어 좋은프로그램작성 읽고이해하기쉽게프로그램 Proper Program 단일입구, 단일출구모든노드는입구에서도달할수있는경로가있어야한다. 모든노드는출구까지도달할수있는경로가있어야한다. 구조적프로그램세가지제어구조 ( 순차, 선택, 반복 ) 로 goto문에의한복잡한제어흐름을방지제어구조가하향식 stepwise refinement를이용한프로그래밍 들여쓰기 (Indentation) 파이선은한블록의명령어를구분하기위해 {, } 와같은괄호가아니라들여쓰기로블록을나타내며일반적으로 4 칸의스페이스를표준들여쓰기로한다.

2. 데이터유형 변수는말그대로정해진범위안에서여러가지다른값으로변할수있는것으로프로그램에서이를활용하여데이터를처리한다. 변수와달리상수는값이변하지않는수이다. 파이선은정적으로데이터유형을지정할필요가없는객체지향언어이다. 그래서변수를사용하기전에변수의데이터유형을정의하지않아도된다. 파이선의모든변수는객체이다. 파이선은정수와실수를지원하는데각각의사용법은아래와같다. myint = 7은배정문이며 myint라는변수에 7을배정 (assign) 하는문장이다. 실수의표현은 myfloat = 7.0 혹은 myfloat = float(7) 과같이함수 float를이용한방법이있다. 2 진수, 8 진수, 16 진수를 10 진수로의변환은다음과같이이루어진다.

배열은동일한유형의데이터를관리하기쉽도록해주는데파이선에서제공하는 기본배열형식인스트링과리스트에대해먼저알아본다. 문자의배열인스트링 (strings) 은작은따옴표 (single quote, ) 나큰따옴표 (double quote, ) 로나타낼수있는데두개의차이점은큰따옴표는인용부호 (apostrophes, ) 를나타내기쉽게해준다. 역슬래시 (backslash) 를사용하면문장내에큰따옴표와작은따옴표를나타낼수있다.

그외에엔터, 유니코드문자등의입력을쉽게할수있도록추가적인표기법을 지원한다. 또한두개이상의변수에대한배정문 (assignment) 이한줄에동시에이루어 질수있다. 여기서주의해야할점은수와문자열을혼합하여처리하는연산자는지원이안 된다.

리스트 (list) 리스트는배열과매우비슷하며여러유형의많은변수를포함할수있다. 리스트의원소는반복문으로배정하거나나열할수있다. 하지만존재하지않는리스트의첨자는예외오류를일으킨다. 사용자입력

3. 기본연산자 산술연산자 다른언어에서와마찬가지로가감승제연산자는숫자와함께쓰인다. 나머지연산자 (%) 는나누고남은나머지를정수로돌려준다. 곱셈연산자를동시에두개를사용하면자승을의미한다. 스트링연산자 파이선은스트링에덧셈연산자적용은스트링을연결하는연산을의미하며곱 셈연산자는그스트링을곱셈의피연산자횟수만큼반복하는것을의미한다.

리스트연산자 리스트는덧셈연산자에의해서로연결된다. 또한스트링에서와마찬가지로곱 셈연산자를통해리스트를피연산자횟수만큼반복하여나타낼수있다. 스트링형식지정파이선은 C와비슷하게스트링의형식을지정할수있다. % 연산자는 %s나 %d와같은형식지정자와함께변수집합을사용함으로써형식에맞게스트링을출력한다. 예를들면, 아래는변수 name에 john 을배정하고형식에맞춰출력하는것을보여준다. 두개이상의변수의형식지정을위해괄호를사용한다. 스트링이아닌객체도 %s 로형식을지정할수있다.

다음은기본적인형식지정자이다. %s 스트링이나객체 %d 정수 %f 실수 %.<number of digits>f - 실수의소수자리표현 %x/%x - 16진수표현 ( 소문자 / 대문자 )

스트링의처음나타나는글자의위치를알기위해스트링이름.index( 찾고자하는글자 ) 를하면된다. 결과는 4가나오는데그이유는스트링의처음위치는 0으로되어있기때문이다. 스트링내에서같은글자의개수를세기 (count) 위해서는스트링이름.count( 글자 ), 스트링에서몇번째부터몇번째까지출력하기위해서는스트링이름 [ 처음수 : 마지막수 ], 그리고스트링에서몇번째부터몇번째까지몇칸을건너뛰면서출력하기위해서는스트링이름 [ 처음수 : 마지막수 : 건너뛰는칸수 ] 로표현하면된다. 여기서만약처음수를비워두고콜론뒤에마지막수를나타내면처음부터마지막수위치의글자를스트링에서잘라낸다. 또한처음수는나타내고마지막수를비워두면처음글자의위치부터마지막글자까지스트링에서잘라낸다. 만약 x와같이음수를사용한다면스트링의마지막위치부터역으로 x 위치의글자를위미한다. 예를들어 3이라면마지막에서세번째글자라는의미이다. 비록 C언어의 strrev와같이스트링을역으로출력하는함수는없지만위의내용을응용하면 astring[::-1] 을하면같은결과를얻을수있다.

Sets 집합 (set) 은중복된원소가없는리스트이다. 예를들어문장내에사용된단어 리스트를원한다면다음과같이하면된다. 수학의집합에서와마찬가지로합집합 (union), 교집합 (intersection), 차집합 (difference) 를사용할수있다. a와 b의합집합은두집합의모든원소를공통을제거하여출력하고 a와 b의교집합은두집합에서공통된원소만을출력한다. a 차집합 b 는 a 집합의원소중 b 에속한원소를제외하고출력하는합집합, 교 집합과달리교환법칙이성립하지않는다. a 와 b 두집합에서공통의원소를제 거하고출력하기위해서는 symmetric_difference 를사용하면된다.

Dictionary Dictionary 는배열하고비슷하지만위치를나타내는첨자 (index) 가아니라키 (key) 값을사용한다. Dictionary 를정의하기위한방법두가지는아래와같다.

Code inspection 파이선에서는클래스, 함수의코드를점검하기위한여러함수와도구를지원한다. 여기에는 help(), dir(), id(), type(), repr(), callable(), issubclass(), isinstance() 등이있다.

파이선제어문 조건 파이선은조건을참인지거짓인지평가하기위해불리언 (boolean) 변수를사용한다. 어떤수식이비교되거나실행되면서참이나거짓값의불리언값이반환된다. 변수배정문은 "=" 로이루어지지만두변수사이의비교는 == 로이루어지며부 정은!= 와같이느낌표를앞에붙인다는점을주지해야한다. " 불리언연산자 (Boolean operators) 불리언연산자 AND 와 OR 는아래예와같은복잡한불리언식을만들수있다.

"in" 연산자는특정객체가리스트와같은반복적인객체저장소내에존재 하는지점검하는데사용될수있다. 파이선은괄호대신에들여쓰기로코드블록단위를정의한다. 탭이나다른크기의공백을프로그램내에서지속적으로사용하여블록단위로사용하는것도가능하지만 4칸의공백이표준들여쓰기이다. 코드블록을사용하는파이선의 if 문의예는다음과같다. 한문장은불리언값이참으로주어지거나식을계산하여얻어진경우내용이없 는객체가아닌경우참으로평가된다.

is 연산자는변수의값을비교하는 == 연산자와달리인스탄스 (instance) 그자 체를비교한다. "not" 연산자는불리언식의결과를역으로만든다.

반복 파이선에는 for와 while 두가지유형의반복문이있다. For 반복문은주어진내용을반복하는데 range와 xrange 함수를사용하여주어진수열에따라반복할수도있다. Range와 xrange의차이는 range 함수는특정범위의수로이루어진리스트를반환하지만 xrange는반복횟수만을반환한다. 파이선 3.0버전이후로는 xrange처럼동작하는 range 함수를지원한다. "while" 반복문은특정불리언조건이만족하는한계속반복한다.

break 구문은 for 혹은 while 반복문을빠져나갈때사용하는반면 continue 구문은현재의블록을건너띠고 for 혹은 while 문으로돌아간다. 반복문에서 else 구문의사용도가능한데 for 혹은 while 구문의반복조건이실패할경우 else 의코드가실행된다. 만약 break 구문이반복문안에서실행되면 else 부분은건너뛴다. 하지만 continue 구문이있어도 else 부분은실행된다.

함수 (Functions) 함수는하나의프로그램을여러블록으로나눌수있는편리한방안으로프로그램을보다작성하고읽기쉽게해주고재사용이가능하게하여시간을절약해준다. 게다가함수는인터페이스를서로사용할수있도록해주는역할을한다. 이러한파이선함수의작성법에대해알아본다. 파이선에서블록을심지어는블록내에블록을사용한다고하였다. 아래는블록의예이다. 함수는블록예약어인 def 로시작하여함수이름이그뒤에나온다. 함수는매개변수 ( 호출하는곳에서전달하는변수 ) 를허용하기도한다. 함수는 return 이라는예약어를사용하여함수를호출한곳으로값을반환하기도한 다.

함수는함수이름과그뒤에 () 에매개변수를위치시킴으로써해당함수를호출할수 있다. 예를들어조금전에작성한함수는다음과같이호출할수있다.

클래스와객체 (Classes and Objects) 객체는변수와그변수를사용하는함수를하나로만든것을의미한다. 객체는클 래스로부터변수와함수를받는다. 결국클래스는객체를생성하기위한기본틀 ( 템 플릿 ) 이라할수있다. 매개변수 "self" 는객체지향언어에서자바의 this 처럼자기자신을참조하기위 한특별구문이며우선클래스를하나의객체에배정하기위해서는다음과같이 한다. 이제변수 "myobjectx" 는클래스 "MyClass" 의한객체를가지며해당클래스에서 정의된변수와함수를상속받는다. 새롭게생성된객체 "myobjectx" 의변수에접근하기위해서는다음과같이한다.

한클래스 ( 같은변수와함수를갖는 ) 의여러다른객체를생성할수있으며각객체 는클래스에서정의된변수와별개의변수를가질수있다. 예를들어클래스 "MyClass" 의다른객체를만들어변수의스트링을변경할수있다. 객체의변수를사용할때와비슷하게객체의함수를사용한다.

딕셔너리 (Dictionary) 딕셔너리는배열과비슷한데이터유형이지만첨자 (index) 가아니라키 (key) 와값으 로접근한다. 딕셔너리는다음과같은방법으로도초기화할수도있다. 리스트처럼딕셔너리에대해서도반복이가능하다. 하지만리스트와는달리저장되 어있는값의순서를유지하지는않는다. 키와값으로반복하기위해다음과같이 한다.

특정값은삭제하기위해서는다음중하나를사용하면된다.

모듈과패키지 (Modules and Packages) 프로그래밍에서모듈은하나의특정기능의소프트웨어조각이다. 예를들어핑퐁게임을작성할때한모듈은게임논리를담당하고다른모듈은화면에게임을그리는일을담당하는것이다. 각모듈은하나의서로다른파일이며독립적으로편집될수있다. 파이선모듈은.py 확장자를갖는파일이며파일의이름이모듈의이름이된다. 파 이선모듈은구현된함수, 클래스, 변수의집합이다. 아래의파이선스크립트 (script) game.py는게임을구현하게된다. draw.py에정의된함수 draw_game, 혹은다른말로화면에게임을그리는논리를구현한 thedraw를이용하여게임을완성한다. import 명령을사용하여다른모듈을적재할수도있다.

draw 모듈은다음과같다. 모듈을가져올때.pyc 파일이나타나는것을볼수있는데이는컴파일이된파이선파일이다. 파이선은파일을파이선바이트코드로번역해서모듈가져오기를할때마다파일을번역하지않도록한다..pyc파일이있으면.py대신에가져오기를하는데이부분은사용자가신경을쓰지않아도된다. draw_game 함수를 from 명령을사용하여바로주스크립트에가져올수도있다. 이방법의장점은함수가어떤모듈에서왔는지지정하지않아도되기에현재모듈내에서함수를사용하기쉽다는점이다. 하지만 import 명령이존재하는객체를대체할수도있기에같은이름으로두객체를쓸수없다는점을유의해야한다. 모듈의모든객체를가져오기위해서는 import * 명령을사용한다.

우리가원하는대로모듈이름을지어서가져올수있기도하다. 이는프로그램코 드에서같은이름으로조건에따라모듈을 import 할경우에유용하다. 예를들어 이름이조금다른두 draw 모듈이필요하다면다음과같이할수있다. 모듈을처음가져올때모듈의코드를한번실행함으로써초기화된다. 만약같은 모듈이다시모듈의다른부분에서 import 된다면두번 import 가일어나는것이 아니라한번만일어난다. 따라서모듈내의변수도한번만초기화된다.

모듈은현재 script 작성폴더 ( 디렉토리 ) 를 default로모듈을가져올수있는데이를확장하기위해서는환경변수인 PYTHONPATH을사용하여모듈을찾을추가폴더를지정할수있다. 아래는 defult 폴더만아니라 foo 폴더를찾아 game.py 를 import 한다. 또다른방법은 import 명령을실행하기전에 sys.path.append 함수를사용하 는것이다. 이렇게하면 foo 폴더를모듈을찾을폴더로추가하게된다. 파이선의미리구축된 (built-in) 모듈에는여러가지가있으며이를탐색하기위한 유용한명령에는 dir 과 help 가있다. 모듈사용예를들어보면, URL 로부터데이터를 읽기위해서는 urllib 모듈을 import 해야한다.

각모듈에구현된함수는 dir 함수로찾아볼수있다. 모듈내의원하는함수를찾 은후 help 함수로자세한내용을확인할수있다.

Writing packages 패키는여러패키지와모듈이름을가진이름공간 (namespaces) 혹은디렉토리이다. 각패키지는 init.py라는특수파일을포함하고있는데이파일이비어있으면모듈이폴더에서 import 되는방식과마찬가지로파이선패키지를포함하고있는폴더를의미한다. 만약 foo라는폴더를만들어패키지이름으로지정하고패키지안에 bar라는모듈을생성할수있다. foo 폴더내에 init.py 파일을추가하는것을잊지말아야한다. 모듈 bar는다음두가지방법으로 import될수있다. 처음방법에서 foo 접두어를모듈 bar 에접근할때마다사용해야하나두번째방 법에서는모듈의이름공간에모듈을저장하기에그럴필요가없다.

넘비배열 (Numpy Arrays) 넘피배열은파이선리스트를대체할수있는데넘피배열의장점은빠르고작업하기간단하며전체배열에대한계산기회를제공한다는점이다. 아래예에서파이선리스트를두개만들고넘피배열모듈을 import 해서새로이만든리스트에서넘피배열을생성한다. Height 와 weight 에대한간단한연산을해보자. 예를들어모든 height 와 weight 측정치에대한 BMI 지수를한번에계산한다면매우빠르고효율적일것이다. 데이 터양이많아지면많아질수록특히더그럴것이다. 넘피배열의또다른장점은진부분집합을찾아내는것이다. 예를들어 BMI 배열 에서지수가 23 이상인측정치를추려내기위해서는다음과같이하면된다.

판다 (Pandas) 판다는고도의데이터조작도구이다. 넘피패키지상에구현되고이의주요데이터구조를 DataFrame이라한다. DataFrame은테이블형태의데이터를조작할수있게해준다. DataFrame을생성하는여러방법이있는데그중하나는딕셔너리 (dictionary) 를이용하는것이다. brics 이라는 DataFrame 에각나라마다 0 에서 4 까지의수를배정하고만약두자리 글자로첨자를배정하기위해서는다음과같이쉽게할수있다. DataFrame 을생성하기위한다음방법은판다를이용한 csv 파일을 import 하는 것이다. pd.read_csv 를이용하여 cars.csv csv 가저장되고 import 될수있다.

여러가지방법으로판다 DataFrame의첨자를활용할수있는데그중하나는 [ ] 를이용하는것이다. cars DataFrame의한컬럼을선택하기위해 [ ] 를사용할수있다. 단일 [ ] 는판다 DataFrame의한값을출력하지만이중 [[ ]] 은판단 DataFrame 전체를출력한다. 예를들어 [ ] 은 DataFrame 의열 (row) 에접근하는데사용할수있다. loc 과 iloc 을사용하여데이터선택연산을행할수도있다. loc 은각핼 (column) 과

열 (row) 이름이용하여행과열의값을지정하는것이고 iloc 은정수첨자로행과 열을지정하는방식이다. 생성기 (Generators) 생성기 (Generator) 는이해하기는시간이걸리지만쉽게구현할수있다. 생성기는반복자를만드는데사용된다. 생성기는반복하는구성원을반환한다. For 구문을사용하여구성원의집합에대해반복이시작하면연산이실행된다. 생성기함수가 "yield" 구문에도달하면집합에서새로운값을반환하면서 for 반복에실행을양보한다. 생성기함수는거의무한대로많은값을생성할수있다. 다음은일곱개의임의정수를생성하는함수예이다.

예외처리 (Exception Handling) 프로그래밍에서오류는언제나발생한다. 사용자가데이터입력을제대로못해서, 네트워크자원을사용할수없어서, 메모리부족으로, 혹은프로그램개발자가실수해서등등여러가지원인으로오류가일어난다. 파이선에서는이런겨우를위해예외가존재한다. 한변수에값을배정하는것을잊어버렸다. 프로그램실행을멈추지않고예외경우에대비하고싶으면 try/except블록을사용한다. 다음은간단한예를보여준다. 리스트에대해 20번을반복하고싶으나리스트가사용자입력으로되어있어 20 개미만의숫자가입력되어 20번반복전에리스트의마지막에도달하면모자라는횟수만큼나머지숫자를 0으로간주하는것이다.

순서화 (Serialization) 파이선은미리구축된 JSON 라이브러리를제공한다. JSON 을사용하기위해먼저 json 모듈을 import 한다. JSON 데이터를위한두개의기본유형스트링과객체데이터구조가있다. 객체데이터구조는중첩이가능한리스트와딕셔너리로구성되어있으며객체데이터구조로부터구성원을추가, 열거, 검색, 삭제하는것이가능하다. 스트링은다른프로그램으로데이터를전달해주거나데이터구조에적재하는데사용된다. loads 메서드 (method) 를사용하여 JSON을데이터구조로다시적재할수있다. 이메서드는스트링을받아 json 객체데이터구조로다시변환한다. JSON 으로데이터를 encode 하기위해 dumps: 메서드를사용하는데이는객체를 받아스트링을반환한다. 파이선은또한 pickle 이라불리는독자적인데이터순서화메서드를지원한다.

다음은계산기프로그램 (https://www.opentutorials.org/course/3094/17973) 이다. from tkinter import * from tkinter import ttk operation = '' temp_number = 0 # 결과출력상태인지상태저장 answer_trigger = False def button_pressed(value): global temp_number global answer_trigger if value=='ac': number_entry.delete(0,'end') operation = '' #AC버튼누르면, trigger 변수도초기화. answer_trigger = False print("ac pressed") else: #Trigger가 True이면, Entry 초기화후새로입력. if answer_trigger: number_entry.delete(0,"end") answer_trigger = False number_entry.insert("end",value) print(value,"pressed") def math_button_pressed(value): global operation global temp_number global answer_trigger if not number_entry.get() == '': operation = value temp_number = int(number_entry.get()) number_entry.delete(0,'end') print(temp_number,operation)

def equal_button_pressed(): global operation global temp_number global answer_trigger if not (operation =='' and number_entry.get()==''): number = int(number_entry.get()) if operation == '/': solution = temp_number/number elif operation == '*': solution = temp_number*number elif operation == '+': solution = temp_number+number else : solution = temp_number-number number_entry.delete(0,'end') number_entry.insert(0,solution) print(temp_number,operation,number,"=",solution) operation = '' temp_number = 0 # 계산완료후, Trigger 변수 True로변경. answer_trigger = True root = Tk() root.title("calculator") root.geometry("300x200") entry_value = StringVar(root, value='') number_entry = ttk.entry(root, textvariable = entry_value, width=20) number_entry.grid(row=0, columnspan=3) button7 = ttk.button(root, text="7", command = lambda:button_pressed('7')) button7.grid(row=1, column=0) button8 = ttk.button(root, text="8", command = lambda:button_pressed('8')) button8.grid(row=1, column=1) button9 = ttk.button(root, text="9", command = lambda:button_pressed('9'))

button9.grid(row=1, column=2) button_div = ttk.button(root, text="/", command = lambda:math_button_pressed('/')) button_div.grid(row=1, column=3) button4 = ttk.button(root, text="4", command = lambda:button_pressed('4')) button4.grid(row=2, column=0) button5 = ttk.button(root, text="5", command = lambda:button_pressed('5')) button5.grid(row=2, column=1) button6 = ttk.button(root, text="6", command = lambda:button_pressed('6')) button6.grid(row=2, column=2) button_mult = ttk.button(root, text="*", command = lambda:math_button_pressed('*')) button_mult.grid(row=2, column=3) button1 = ttk.button(root, text="1", command = lambda:button_pressed('1')) button1.grid(row=3, column=0) button2 = ttk.button(root, text="2", command = lambda:button_pressed('2')) button2.grid(row=3, column=1) button3 = ttk.button(root, text="3", command = lambda:button_pressed('3')) button3.grid(row=3, column=2) button_add = ttk.button(root, text="+", command = lambda:math_button_pressed('+')) button_add.grid(row=3, column=3) button_ac = ttk.button(root, text="ac", command = lambda:button_pressed('ac')) button_ac.grid(row=4, column=0) button0 = ttk.button(root, text="0", command = lambda:button_pressed('0')) button0.grid(row=4, column=1) button_equal = ttk.button(root, text="=", command = lambda:equal_button_pressed()) button_equal.grid(row=4, column=2) button_sub = ttk.button(root, text="-", command = lambda:math_button_pressed('-')) button_sub.grid(row=4, column=3) root.mainloop()

https://www.opentutorials.org/course/3094/17837

아래와같이 15 개의동물이주어졌을때다음네개의카드를프로그램으로생성하여순서대 로보여주고생각한동물을찾아내는프로그램을작성하시오. 1 호랑이 2 사자 3 기린 4 하마 5 코끼리 6 원숭이 7 치타 8 삵 9 담비 10 펭귄 11 수달 12 팬더 13 얼룩말 14 악어 15 사슴 1 호랑이 기린 코끼리 치타 담비 수달 얼룩말 사슴 2 사자 기린 원숭이 치타 펭귄 수달 악어 사슴 3 하마 코끼리 원숭이 치타 팬더 얼룩말 악어 사슴 4 삵 담비 펭귄 수달 팬더 얼룩말 악어 사슴 예를들어 1 번과 3 번에상대방이생각한동물이있다고한경우답은코끼리이며 2 번, 3 번, 4 번에있다고한경우생각한동물은악어이다.