문서의 제목 나눔고딕B, 54pt

Similar documents
A Review of C Programming

PowerPoint 프레젠테이션

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

PowerPoint Presentation

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

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

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

Microsoft PowerPoint - chap06-2pointer.ppt

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

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

Microsoft PowerPoint - chap06-1Array.ppt

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

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

슬라이드 1

Microsoft PowerPoint - C++ 5 .pptx

슬라이드 1

설계란 무엇인가?

8장 문자열

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

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

Microsoft PowerPoint - Java7.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

설계란 무엇인가?

adfasdfasfdasfasfadf

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint Presentation

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

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

PowerPoint Presentation

KNK_C_05_Pointers_Arrays_structures_summary_v02

슬라이드 1

chap 5: Trees

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

Microsoft PowerPoint - 2장 변수와 자료형 pptx

문서의 제목 나눔고딕B, 54pt

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

11장 포인터

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

JVM 메모리구조

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

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

Microsoft PowerPoint - chap-11.pptx

JAVA PROGRAMMING 실습 02. 표준 입출력

문서의 제목 나눔고딕B, 54pt

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

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

슬라이드 1

Microsoft PowerPoint - c2.ppt

Microsoft PowerPoint - e pptx

문서의 제목 나눔고딕B, 54pt

11장 포인터

PowerPoint Presentation

PowerPoint 프레젠테이션

Chapter 4. LISTS

Microsoft PowerPoint - 제11장 포인터

03_queue

문서의 제목 나눔고딕B, 54pt

< 고급 C 프로그래밍및실습 > 11 장구조체실습문제 문제에대한안내 - 특별한언급이없으면문제의조건에맞지않는입력은입력되지않는다고가정하라. - 특별한언급이없으면, 각줄의맨앞과맨뒤에는공백을출력하지않는다. - 출력예시에서 는각줄의맨앞과맨뒤에출력되는공백을의미한다. - 입출력예시

03장.스택.key

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

API 매뉴얼

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

강의 개요

Microsoft PowerPoint - 제11장 포인터(강의)

OCW_C언어 기초

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - [2009] 02.pptx

10장 리스트

PowerPoint 프레젠테이션

Chap 6: Graphs

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

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

쉽게

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap04-연산자.pptx

untitled

02장.배열과 클래스

C 프로그램의 기본

Microsoft PowerPoint 웹 연동 기술.pptx

PowerPoint Presentation

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

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

OCW_C언어 기초

Microsoft Word - SAS_Data Manipulate.docx

쉽게 풀어쓴 C 프로그래밍

본 강의에 들어가기 전

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

문서의 제목 나눔고딕B, 54pt

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

2 장수의체계 1. 10진수 2. 2진수 3. 8진수와 16진수 4. 진법변환 5. 2진정수연산과보수 6. 2진부동소수점수의표현 한국기술교육대학교전기전자통신공학부전자전공 1

Transcription:

산업공학과를위한 프로그래밍입문 (w/ 파이썬 ) PART I : 파이썬기초 가천대학교 산업경영공학과 최성철교수

[ 생각해보기 ] 1, Hello 만저장한파일의크기는얼마일까? [optimus_prime 5_data_type_structure]$ ls -lha -rw-r--r-- 1 optimus_prime admin 2 2014-07-30 18:53 1.txt -rw-r--r-- 1 optimus_prime admin 10 2014-07-30 18:57 2.txt 1. txt : 문자 1 만저장, 2.txt : 문자 Hello 저장 왜파일용량의차이가날까? 1 이라는숫자를저장하기위한데이터용량은?

[ 답 ] ㆍ컴퓨터는 2진수로데이터를저장ㆍ이진수한자릿수는 1bit로저장됨ㆍ1 byte = 8 bit = 2 8 = 256 까지저장가능ㆍ1은 2진수로도 1 즉한자릿수이므로 1bit만차지ㆍ근데왜 1.txt는 2byte 일까? (1 하나만저장했음에도불구하고 ) ㆍ리눅스는 vi에디터로생성된파일내용을문자로인식ㆍ즉 1은숫자가아닌 1 이라는문자로인식됨ㆍ하나의문자를저장하기위한메모리공간은 2byte ㆍ즉 1 은 2byte, Hello 는 10byte 의저장공간을차지함

[ 조금더알기 ] 2byte 의저장공간을차지한다는의미는무엇인가? ㆍ 2byte 는 16bit 이므로 2 16 = 65536 만큼의저장공간을차지 ㆍ컴퓨터는문자를직접적으로인식못함, 모든데이터는 2 진수로인식함 ㆍ이를위해 2 진수를문자로변환하는표준규칙을정함 ㆍ이러한규칙에따라문자를 2 진수로변환하여저장하거나, 저장된 2 진수를숫자로변환하여표시함 ㆍ예를들면대문자 U 는이진수로 1000011 변환됨 (UTF-8 기준 ) Source: http://goo.gl/xr4az2

프로그램언어에서데이터타입 ㆍ리눅스의텍스트파일과달리프로그래밍언어에서는정수형, 실수형, 문자형등으로데이터타입을구분하여관리 ㆍ각타입별로메모리공간을할당받은크기가다름 예 ) 파이썬에서 int 는 4byte, float 는 8byte ㆍ메모리공간에따라표현할수있는숫자범위가다름 예 ) 4byte = 32bit = 2 32 = 4,294M = -2,147M ~ + 2.147M 까지표시 ㆍ데이터타입은메모리의효율적활용을위해매우중요

파이선에서의데이터타입 ㆍ파이썬은 int, long, float 데이터타입제공 종류타입크기표현범위 int 4바이트 -2 정수형 31 ~ 2 31-1 long 무제한무제한실수형 float 8바이트약 10-308 ~ 10 +308 Source: http://goo.gl/jbqxnd ㆍ각데이터타입의사용자가지정해주지않아도실행시간에동적으로결정됨 (Dynamic typing) ㆍ파이썬은데이터타입의효율적활용을위해고수준의데이터구조를제공함

수치자료형

정수형상수 (int) ㆍ 10 진수, 16 진수, 8 진수, 2 진수변환가능 a= 32 # a에정수 32할당 print a, hex(a), oct(a), bin(a) # 10진수, 16진수, 8진수, 이진수값출력 32 0x20 040 0b100000 ㆍ정수간의연산은정수, 정수 - 실수계산은실수로연산 >>> print 10 + 10 20 >>> print 10 + 10.0 20.0

실수형상수 (float) >>> a = 1.2 # a에정수 1.2 할당 >>> b = 2.0 # b에정수 2.0 할당 >>> print a. is_integer(), b.is_integer() # a와 b가정수형인지확인 False True # a는정수형불가, b는가능 >>> import math # math 라이브러리호출 >>> print round(a), math.ceil(a), math.floor(a) 1.0 2.0 1.0 # a의반올림, 올림, 내림계산수헁

복소수형상수 (complex) ㆍ실수부와허수부로분리, 허수부는 j 를붙임 >>> a = 1 + 1j # a에 1 + i 할당 >>> b = 1-1j # b에 1 - i 할당 >>> print (a+b), (a-b), (a*b) # a+b, a-b, a*b 출력 (2+0j) 2j (2+0j) >>> print a.real, a.imag, a.conjugate() # a의실수, 허수, 켤례복소수출력 1.0 1.0 1-1j >>> a = 1 >>> b = -1 >>> complex (a,b) # a는실수, b는허수로복소수생성 (1-1j)

모듈 math 를활용한연산 ㆍ복잡한수학연산을위해기존만들어진모듈을사용 import math print math.pow(2,10) print math.sqrt(121) print math.log(12) Print math.log10(100) # math 모듈호출 # 지수연산 # 제곱근연산 # 자연로그연산 # 상용로그연산 1024.0 11.0 2.48490664979 2.0

문자열 (string)

문자열 (string) ㆍ시퀀스자료형으로문자형 data 를메모리에저장ㆍ영문자한글자는 1byte 의메모리공간을사용 import sys # sys 모듈을호출 print sys.getsizeof("a"), sys.getsizeof("ab"), sys.getsizeof("abc") 25 26 27 # a, ab, abc 의각메모리사이즈출력 ㆍ string 은 1byte 크기로한글자씩메모리공간이할당됨 a = abcde a b c d e 0100 1001 0100 1010 0100 1011 0100 1100 0100 1101

인덱싱 (indexing) ㆍ문자열의각문자는개별주소 (offset) 를가짐, 이주소를사용해할당된값을가져오는것이인덱싱 a = "abcde print a[0], a[4] print a[-1], a[-5] # a 번수의 0 번째, 4 번째주소에있는값 # a 변수의오른쪽에서 1 번째, 5 번째주소에있는값 ㆍ각문자의오프셋은왼쪽에선 0 부터오른쪽에선 -1 부터시작함 Source: http://goo.gl/xjpspp

슬라이싱 (slicing) ㆍ문자열의주소값을기반으로문자열의부분값을반환 a = "Gachon Unversity" print a[0:6], " AND ", a[-9:] # a 번수의 0 부터 5 까지, -9 부터끝까지 print a[:] print a[-50:50] # a 변수의처음부터끝까지 # 범위를넘어갈경우자동으로최대범위를지정 print a[::2], " AND ", a[::-1] # 2 칸단위로, 역으로슬라이싱

문자열연산및포함여부검사 ㆍ덧셈과뺄셈연산가능, in 명령으로포함여부체크 a = "Gachon" b = "University a + " " + b # 덧셈으로 a 와 b 변수연결하기 'Gachon University' A * 2 + " " + b * 2 'GachonGachon UniversityUniversity # 곱하기로반복연산가능 if 'U' in a: print a # U 가 a 에포함되었는지확인 else: print b

문자열함수 (1/2) 함수명 len(a) a.upper() a.lower() a.capitalize() a.titile() a.count('abc') a.find('abc') a.rfind('abc') a.startswith('ab'c) a.endswith('abc') 기능 문자열의문자개수를반환 대문자로변환 소문자로변환 첫문자를대문자로변환 제목형태로변환띄워쓰기후첫글자만대문자 문자열 a 에 'abc' 가들어간횟수반환 문자열 a 에 'abc' 가들어간위치 ( 오프셋 ) 반환 문자열 a 는 'abc' 로시작하는문자열여부반환 문자열 a 는 'abc' 로끝나는문자열여부반환

문자열함수 (2/2) 함수명 a.strip() a.rstrip() a.lstrip() a.split() a.split('abc') a.isdigit() a.islower() a.isupper() 기능좌우공백을없앰오른쪽공백을없앰왼쪽공백을없앰공백을기준으로나눠리스트로반환 abc를기준으로나눠리스트로반환문자열이숫자인지여부반환문자열이소문자인지여부반환문자열이대문자인지여부반환

다양한문자열표현 문자열선언은큰따옴표 ( ) 나작은따옴표 ( ) 를활용 It s OK 이라는문자열은어떻게표현할까? 1 a = It\ ok. # \ 는문자열구분자가아닌출력문자로처리 2 a = It s ok. # # 큰따옴표로문자열선언후작은따옴표는출력문자로사용 두줄이상은어떻게저장할까? 1 \n # \n 은줄바꿈을의미하는특수문자 2 큰따옴표또는작은따옴표세번연속사용예 ) a= It Ok I m Happy. See you.

특수문자 문자열을표시할때백슬래시 \ 를사용하여키보드로표시하기어려운문자들을표현함 문자설명문자설명 \ [Enter] 다음줄과연속임을표현 \n 줄바꾸기 \\ \ 문자자체 \t TAB 키 \` ` 문자 \e ESC 키 \" " 문자 \b 백스페이스

[ 연습 ] Yesterday Counter Yesterday 노래에 Yesterday 단어의개수? f = open("yesterday.song", 'r') yesterday_lyric = "" while 1: line = f.readline() if not line: break yesterday_lyric = yesterday_lyric + line.strip() + "\n" f.close() n_of_yesterday = yesterday_lyric.upper().count("yesterday") print "Number of A Word 'Yesterday'", n_of_yesterday

[ 연습 ] Yesterday Counter 대소문자를구분하여 Yesterday 와 yesterday 의 개수를나눠서세는프로그램을작성하세요.

리스트 (list)

리스트 (lists) ㆍ문자형과같은시퀀스자료형, 여러데이터들의집합 colors = ['red', 'blue', 'green'] print colors[0] ## red print colors[2] ## green print len(colors) ## 3 Source: http://goo.gl/q4vvb1, http://goo.gl/jmbhm0

리스트의연산 ㆍ인덱싱, 슬라이싱, 연산등을동일하게사용 color = ['red', 'blue', 'green'] color2 = ['orange', 'black', 'white'] print color + color2 # 두리스트합치기 len(color) # 리스트길이 color[0] = yellow # 0 번째리스트의값을변경 print color * 2 blue in color2 # color 리스트 2 회반복 # 문자열 blue 가 color2 존재여부반환 total_color = color + color2 for each_color in total_color # total_color 에입력된문자열하나씩순회 print each_color

리스트추가와삭제 color.append("white") # 리스트에 white 추가 color.extend(["black","purple"]) # 리스트에새로운리스트추가 color.insert(0,"orange") # 0 번째주소에 orange 추가 print color ['orange', 'yellow', 'blue', 'green', 'white', 'black', 'purple'] color.remove("white") del color[0] # 리스트에 white 삭제 # 0 번째주소리스트객체삭제 print color ['yellow', 'blue', 'green', 'black', 'purple']

리스트의특징 a = [ color, 1, 0.2] # 다양한데이터타입입력가능 color = ['yellow', 'blue', 'green', 'black', 'purple'] a[0] = color # 리스트안에리스트도입력가능 print a [['yellow', 'blue', 'green', 'black', 'purple'], 1, 0.20000000000000001] 중첩리스트시메모리구조 Source: http://goo.gl/fapwnw

리스트함수 a = [5,3,4,1,2] a.index(2) a.count(5) a.sort() a.reverse() b = sorted(a) # 정수 2가있는주소값 # 리스트내에 5의개수 # 리스트 a 정렬 # 리스트 a 역정렬 # 정렬된 a를 b 변수에할당

리스트메모리저장방식 a = [5, 4, 3, 2, 1] b = [1, 2, 3, 4, 5] b = a print b # [5, 4, 3, 2, 1] a.sort() print b # [1, 2, 3, 4, 5] b = [6,7,8,9,10] print a, b [1, 2, 3, 4, 5] [6, 7, 8, 9, 10] a b a b a b a b 5 4 3 2 1 1 2 3 4 5 5 4 3 2 1 1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 = 의의미는같다가아닌메모리주소에해당값을할당 ( 연결 ) 한다는의미

패킹과언패킹 ㆍ패킹 : 한변수에여러개의데이터를넣는것 ㆍ언패킹 : 한변수의데이터를각각의변수로반환하는것 t = [1, 2, 3] a, b, c = t # 1,2,3 을변수 t 에패킹 # t 에있는값 1, 2, 3 을변수 a, b, c 에언패킹 Print t, a, b, c # [1, 2, 3] 1 2 3

이차원리스트 ㆍ리스트안에리스트를만들어행렬 (Matrix) 생성가능 A B C D E kor_score = [49,79,20,100,80] 국어점수 49 79 20 100 80 math_score = [43,59,85,30, 90] 수학점수 43 59 85 30 90 eng_score = [49,79,48,60,100] 영어점수 49 79 48 60 100 midterm_score = [kor_score, math_score, eng_score] print midterm_score[0][2]

이차원리스트순환 ㆍ이전페이지코드를활용하여사람별평균을구하라 student_score = [0,0,0,0,0] i = 0 for subject in midterm_score: for score in subject: student_score[i] += score # 각학생마다개별로교과점수를저장 i += 1 # 학생 index 구분 i = 0 # 과목이바뀔때학생인덱스초기화 Else: a, b, c, d, e = student_score # 학생별점수를 unpacking student_average = [a/3,b/3,c/3,d/3,e/3] # print student_average

[ 연습 ] 성적입력프로그램 동적으로학생수와교과목개수를받아서학생별성적평균과교과목성적평균을계산하는프로그램을구하라

데이터구조 (stack, queue, tuple, set, dictionary)

데이터구조 (Data Strucutre) ㆍ메모리상에데이터를효율적으로관리하는방법ㆍ검색, 저장등의작업에서효율을고려하여메모리사용량과실행시간등을최소화함ㆍ파이썬에서는리스트, 튜플, 집합 (Set), 사전 (dictionary) 등의기본데이터구조를제공함

스택 (Stack) ㆍ나중에넣은데이터를먼저반환하도록설계된메모리구조로 Last In First Out (LIFO) 로구현됨ㆍ Data 의입력을 Push, 출력을 Pop 이라고함 4 10 15 15 10 push push push pop pop 15 10 10 10 4 4 4 4 4

스택 (Stack) in 파이썬 ㆍ파이썬은리스트를사용하여스택구조를활용 ㆍ push 를 append(), pop 을 pop() 를사용 a = [1,2,3,4,5] a.append(10) a.append(20) a.pop() # 20 출력 a.pop() # 10 출력 [ 연습 ] 스택구조를활용하여입력된글자를역순으로출력하는프로그램을작성해보자

큐 (Queue) ㆍ먼저넣은데이터를먼저반환하도록설계된메모리구조로 First In First Out 으로구현됨ㆍ Stack 과반대되는개념 Source: http://goo.gl/2siors

큐 (Queue) in 파이썬 ㆍ파이썬은리스트를사용하여큐구조를활용 ㆍ put 를 append(), get 을 pop(0) 를사용 a = [1,2,3,4,5] a.append(10) a.append(20) a.pop(0) # 1 출력 a.pop(0) # 2 출력

튜플 (tuple) ㆍ리스트와동일한개념이나값의변경이불가능함ㆍ선언시 [ ] 가아닌 ( ) 를사용ㆍ리스트의연산, 인덱싱, 슬라이싱등을동일하게사용 t = (1,2,3) print t +t, t * 2 # (1, 2, 3, 1, 2, 3) (1, 2, 3, 1, 2, 3) len(t) # 3 t[1] = 5 # Error 발생

집합 (set) ㆍ값을순서없이저장, 중복불허하는자료형ㆍ set 객체선언을이용하여객체생성 s = set([1,2,3]) s.add(1) s.remove(1) s.update([1,4,5,6,7]) s.discard(3) s.clear() # set 함수를사용 1,2,3을집합객체생성 # 1를추가, 중복불허로추가되지않음 # 1 삭제 # [1,4,5,6,7] 추가 # 3 삭제 # 모든원소삭제

집합연산 ㆍ수학에서활용하는다양한집합연산가능 s1 = set([1,2,3,4,5]) s2 = set([3,4,5,6,7]) s1.union(s2) # s1 과 s2 의합집합 s1 s2 # set([1, 2, 3, 4, 5, 6, 7]) s1.intersection(s2) # s1 과 s2 의교집합 s1 & s2 # set([3, 4, 5]) s1.difference(s2) # s1 과 s2 의차집합 s1 - s2 # set([1, 2])

사전 (dictionary) ㆍ key 와 value 를매핑하여 key 로 value 를검색ㆍ다른언어에서는 HashTable 이라는용어를사용ㆍ {Key1:Value1, Key2:Value2, Key3:Value3...} 형태 student_info = {20140012:'Sungchul', 20140059:'Jiyong',20140058:'JaeHong'} student_info[20140012] Key Value student_info[20140012] = 'Janhyeok' student_info[20140012] student_info[20140039] = 'wonchul student_info 20140012 Janhyeok 20140059 Jiyong 20140058 JaeHong 20140039 wonchul