#!/usr/bin/env python # coding: utf-8 # ## 02-1 숫자형 # # - 숫자형(Number): 숫자 형태로 이루어진 자료형 # # | 항목 | 사용 예 | # |:---:|:---:| # | 정수 | 123, -345, 0 | # | 실수 | 123.45, -1234.5, 3.4e10 | # | 8진수 | 0o34, 0o25 | # | 16진수 | 0x2A, 0xFF | # # ### 숫자형을 활용하기 위한 연산자 # In[3]: # 사칙연산 a = 3 b = 4 print(a+b) print(a*b) print(a/b) # In[4]: # 제곱 ** 연산자 a = 3 b = 4 print(a**b) # 나눗셈 후 나머지를 반환하는 % 연산자 print(7%3) print(3%7) # 나눗셈 후 소수점 아랫자리를 버리는 // 연산자 print(7//4) print(-7//4) # 무조건 소수점을 버리는 것이 아니라 나눗셈의 결과값보다 작은 정수 중, 가장 큰 정수를 리턴한다. # --- # ## 02-2 문자열 자료형 # # - 문자열(String): 문자, 단어 등으로 구성된 문자들의 집합 # - "Life is too short, You need Python" # - "a" # - "123" # # ### 문자열은 어떻게 만들고 사용할까? # # 파이썬에서 문자열을 만드는 4가지 방법 # # 1. 큰따옴표로 양쪽 둘러싸기: "Hello World" # 2. 작은따옴표로 양쪽 둘러싸기: 'Python is fun' # 3. 큰따옴표 3개를 연속으로 써서 양쪽 둘러싸기: """Life is too short, You need python""" # 4. 작은따옴표 3개를 연속으로 써서 양쪽 둘러싸기: '''Life is too short, You need python''' # # ### 문자열 안에 작은따옴표나 큰따옴표를 포함시키고 싶을 때 # # 1) 문자열에 작은따옴표(') 포함시키기: Python's favorite food is perl # # 다음과 같이 문자열을 큰따옴표(")로 둘러싸야 한다. # # ```python # >>> food = "Python's favorite food is perl" # ``` # # 2) 문자열에 큰따옴표(") 포함시키기: "Python is very easy." he says. # # 다음과 같이 문자열을 작은따옴표(')로 둘러싸야 한다. # # ```python # >>> sqy = '"Python is very easy." he says.' # ``` # # 3) \ (백슬래시)를 이용해서 작은따옴표(')와 큰따옴표(")를 문자열에 포함시키기 # # ```python # >>> food = 'Python\'s favorite food is perl' # >>> say = "\"Python is very easy.\" he says." # ``` # # ### 여러 줄인 문자열을 변수에 대입하고 싶을 때 # # 1) 줄을 바꾸기 위한 이스케이프 코드 \n 삽입하기 # ``` # >>> multiline = "Life is too short \n You need python" # ``` # # 2) 연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""") 이용 # ``` # >>> multiline = ''' # Life is too short # You need python # ''' # ``` # --- # # ### 문자열 연산하기 # # #### 1) 문자열 더해서 연결하기(Concatenation) # In[5]: head = "Python" tail = " is fun!" head + tail # #### 2) 문자열 곱하기 # In[6]: a = "python" a * 2 # #### 3) 문자열 곱하기 응용 # In[7]: print("=" * 50) print("My Program") print("=" * 50) # --- # # ### 문자열 인덱싱과 슬라이싱 # # #### 문자열 인덱싱이란? # # *"파이썬은 0부터 숫자를 센다."* # In[2]: a = "Life is too short, You need Python" a[3] # #### 문자열 인덱싱 활용하기 # In[2]: print(a[-2]) print(a[-5]) # #### 문자열 슬라이싱이란? # In[3]: b = a[0] + a[1] + a[2] + a[3] b # In[4]: a[0:4] # #### 문자열을 슬라이싱하는 방법 # In[5]: print(a[0:2]) print(a[5:7]) print(a[12:17]) # In[6]: a[19:] # In[4]: a[:17] # In[5]: a[:] # In[6]: a[19:-7] # #### 슬라이싱으로 문자열 나누기 # In[7]: a = "20010331Rainy" date = a[:8] weather = a[8:] print(date) print(weather) # In[9]: year = a[:4] day = a[4:8] weather = a[8:] print(year) print(day) print(weather) # #### ["Pithon" 이라는 문자열을 "Python" 으로 바꾸려면?] # In[10]: a = "Pithon" a[1] # In[11]: a[1] = 'y' # In[12]: a[:1] + 'y' + a[2:] # --- # ### 문자열 포매팅 # # #### 문자열 포매팅 따라하기 # # In[13]: "I eat %d apples." % 3 # In[14]: "I eat %s apples." % "five" # In[15]: number = 3 "I eat %d apples." % number # In[17]: number = 10 day = "three" "I ate %d apples. so I was sick for %s days." % (number, day) # #### 문자열 포맷 코드 # # | 코드 | 설명 | # |:---:|:---:| # | %s | 문자열(String) | # | %c | 문자 1개(character) | # | %d | 정수(Integer) | # | %f | 부동소수(floating-point) | # | %o | 8진수 | # | %x | 16진수 | # | %% | Literal % (문자 % 자체) | # In[18]: "Error is %d%" % 98 # In[19]: "Error is %d%%" % 98 # #### 포맷코드와 숫자 함께 사용하기 # In[20]: # 정렬과 공백 "%10s" % "hi" # In[21]: "%-10s jane" % "hi" # In[22]: # 소수점 표현하기 "%0.4f" % 3.42134234 # In[23]: "%10.4f" % 3.42134234 # --- # ### 문자열 관련 함수들 # # - 문자열 내장함수: 문자열 자료형은 자체적으로 가지고 있는 함수들이 있다. # In[24]: # 문자 개수 세기(count) a = "hobby" a.count('b') # In[25]: # 위치 알려주기 1(find) a = "Python is best choice" print(a.find('b')) print(a.find('k')) # In[26]: # 위치 알려주기 2(index) a = "Life is too short" print(a.index('t')) print(a.index('k')) # In[27]: # 문자열 삽입(join) a = ',' a.join('abcd') # In[28]: # 소문자를 대문자로 바꾸기(upper) a = "hi" print(a.upper()) # 대문자를 소문자로 바꾸기(lower) a = "HI" print(a.lower()) # In[30]: # 왼쪽 공백 지우기(lstrip) a = " hi " a.lstrip() # In[31]: # 오른쪽 공백 지우기(rstrip) a.rstrip() # In[32]: # 양쪽 공백 지우기(strip) a.strip() # In[33]: # 문자열 바꾸기(replace) a = "Life is too short" a.replace("Life", "Your leg") # In[34]: # 문자열 나누기(split) a = "Life is too short" a.split() # In[35]: a = "a:b:c:d" a.split(":") # --- # ### [고급 문자열 포매팅] # In[1]: # 숫자 바로 대입하기 "I eat {0} apples".format(3) # In[2]: # 문자열 바로 대입하기 "I eat {0} apples".format("five") # In[3]: # 숫자 값을 가진 변수로 대입하기 number = 3 'I eat {0} apples'.format(number) # In[4]: # 2개 이상의 값 넣기 number = 10 day = "three" "I ate {0} apples. so I was sick for {1} days.".format(number, day) # In[5]: # 이름으로 넣기 "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3) # In[6]: # 인덱스와 이름을 혼용해서 넣기 "I ate {0} apples. so I was sick for {day} days.".format(10, day=3) # In[7]: # 왼쪽 정렬 "{0:<10}".format("hi") # In[8]: # 오른쪽 정렬 "{0:>10}".format("hi") # In[9]: # 가은데 정렬 "{0:^10}".format("hi") # In[10]: # 공백 채우기 "{0:=^10}".format("hi") # In[11]: "{0:!<10}".format("hi") # In[12]: # 소수점 표현하기 y = 3.42134234 "{0:0.4f}".format(y) # In[13]: "{0:10.4f}".format(y) # In[15]: # { 또는 } 문자 표현하기 "{{ and }}".format() # --- # ## 02-3 리스트 자료형 # # ### 리스트는 어떻게 만들고 사용할까? # # ``` # >>> odd = [1, 3, 5, 7, 9] # # >>> a = [ ] # >>> b = [1, 2, 3] # >>> c = ['Life', 'is', 'too', 'short'] # >>> d = [1, 2, 'Life', 'is'] # >>> e = [1, 2, ['Life', 'is']] # ``` # # - 비어있는 리스트는 a = list() 로 생성할 수도 있다. # ### 리스트의 인덱싱과 슬라이싱 # # - 리스트도 문자열처럼 인덱싱과 슬라이싱이 가능하다. # # #### 리스트의 인덱싱 # In[2]: a = [1, 2, 3] a[0] # In[3]: a[0] + a[2] # In[4]: a[-1] # In[5]: a = [1, 2, 3, ['a', 'b', 'c']] a[0] # In[6]: a[-1] # In[7]: a[3] # In[8]: a[-1][0] # In[9]: a[-1][1] # #### 리스트의 슬라이싱 # In[1]: a = [1, 2, 3, 4, 5] a[0:2] # In[2]: a[:2] # In[3]: a[2:] # --- # ### 리스트 연산자 # # #### 1) 리스트 더하기(+) # In[4]: a = [1, 2, 3] b = [4, 5, 6] a + b # #### 2) 리스트 반복하기(*) # In[5]: a = [1, 2, 3] a * 3 # --- # ### 리스트의 수정, 변경과 삭제 # # #### 1. 리스트에서 하나의 값 수정하기 # In[7]: a = [1, 2, 3] a[2] = 4 a # #### 2. 리스트에서 연속된 범위의 값 수정하기 # In[8]: a[1:2] # In[9]: a[1:2] = ["a", "b", "c"] a # In[10]: a[1] = ['a', 'b', 'c'] a # #### 3. [] 사용해 리스트 요소 삭제하기 # In[11]: a[1:3] = [] a # #### 4. del 함수 사용해 리스트 요소 삭제하기 # In[12]: a # In[13]: del a[1] a # --- # ### 리스트 관련 함수들 # # #### 리스트에 요소 추가(append) # In[14]: a = [1, 2, 3] a.append(4) a # In[15]: a.append([5, 6]) a # #### 리스트 정렬(sort) # In[16]: a = [1, 4, 3, 2] a.sort() a # In[17]: a = ['a', 'c', 'b'] a.sort() a # #### 리스트 뒤집기(reverse) # In[18]: a = ['a', 'c', 'b'] a.reverse() a # #### 위치 반환(index) # In[19]: a = [1, 2, 3] a.index(3) # In[20]: a.index(1) # In[21]: a.index(0) # #### 리스트에 요소 삽입(insert) # In[22]: a = [1, 2, 3] a.insert(0, 4) a # In[24]: a.insert(3, 5) a # #### 리스트 요소 제거(remove) # In[25]: a = [1, 2, 3, 1, 2, 3] a.remove(3) # 첫번째 3만 제거됨 a # In[26]: a.remove(3) a # #### 리스트 요소 끄집어 내기(pop) # In[27]: # pop()은 리스트의 맨 마지막 요소를 돌려주고 해당 요소는 삭제함 a = [1, 2, 3] a.pop() # In[28]: a # In[29]: a = [1, 2, 3] a.pop(1) # In[30]: a # #### 리스트에 포함된 요소 x의 개수 세기(count) # In[31]: a = [1, 2, 3, 1] a.count(1) # #### 리스트 확장(extend) # In[32]: # extend(x)에서 x에는 리스트만 올 수 있다. a = [1, 2, 3] a.extend([4, 5]) a # In[33]: b = [6, 7] a.extend(b) a # - a.extend([4, 5])는 a += [4, 5] 와 동일하다 # --- # ## 02-4 튜플 자료형 # # ### 튜플은 어떻게 만들까? # # 튜플(tuple)은 리스트와 거의 비슷하지만, 다른 점은 다음과 같다. # # - 리스트는 [ 과 ] 으로 둘러싸지만 튜플은 ( 과 ) 으로 둘러싼다. # - 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 **튜플은 그 값을 바꿀 수 없다.** # # ``` # >>> t1 = () # >>> t2 = (1,) # 단지 1개의 요소만을 가질 때에도 요소 뒤에 콤마(,)를 반드시 붙여야 한다. # >>> t3 = (1, 2, 3) # >>> t4 = 1, 2, 3 # 괄호()를 생략해도 무방하다. # >>> t5 = ('a', 'b', ('ab', 'cd')) # ``` # # #### 튜플 요소값 삭제 또는 변경 시 오류 # In[1]: t1 = (1, 2, 'a', 'b') del t1[0] # In[2]: t1[0] = 'c' # --- # ### 튜플의 인덱싱과 슬라이싱, 더하기(+)와 곱하기(*) # In[3]: # 인덱싱하기 t1 = (1, 2, 'a', 'b') t1[0] # In[4]: t1[3] # In[5]: # 슬라이싱하기 t1[1:] # In[6]: # 튜플 더하기 t2 = (3, 4) t1 + t2 # In[7]: # 튜플 곱하기 t2 * 3 # --- # ## 02-5 딕셔너리 자료형 # # - 딕셔너리(Dictionary) 자료형: key 와 value 를 한쌍으로 갖는 자료형 # - 대응 관계를 나타내는 자료형으로 연관 배열(Associative array) 또는 해시(Hash)라고도 한다. # - 리스트나 튜플처럼 순차적으로 요소에 접근하는 것이 아니고, key를 통해 value를 얻는다. # - 순서를 따지지 않는다. # # ### 딕셔너리는 어떻게 만들까? # # - {Key1:Value1, Key2:Value2, Key3:Value3...} # # ``` # >>> dic = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'} # ``` # # **딕셔너리 dic의 정보** # # | key | value | # | :---: | :---: | # | name | pey | # | phone | 0119993323 | # | birth | 1118 | # # ``` # >>> a = {1: 'hi'} # key로 정수값 1, value로 'hi'라는 문자열을 사용 # >>> a = {'a': [1, 2, 3]} # value에 리스트를 사용 # ``` # # ### 딕셔너리 쌍 추가, 삭제하기 # In[8]: # 딕셔너리 쌍 추가하기 a = {1: 'a'} a[2] = 'b' a # In[10]: a['name'] = 'pey' a # In[11]: a[3] = [1, 2, 3] a # In[12]: # 딕셔너리 요소 삭제하기 del a[1] a # ### 딕셔너리를 사용하는 방법 # # #### 딕셔너리에서 Key 사용해 Value 얻기 # In[13]: grade = {'pey': 10, 'julliet': 99} grade['pey'] # In[14]: grade['julliet'] # In[16]: dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'} dic['name'] # In[17]: dic['phone'] # In[18]: dic['birth'] # #### 딕셔너리 만들 때 주의할 사항 # # - 중복된 Key를 사용하지 말라. # - 존재할 경우 하나가 무시된다. # - key에 리스트를 사용할 수 없다. # In[19]: a = {1: 'a', 1:'b'} a # In[21]: a = {[1, 2]: 'hi'} # --- # ### 딕셔너리 관련 함수들 # # #### Key 리스트 만들기(keys) # In[22]: a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'} a.keys() # In[23]: # 다음과 같이 리스트처럼 사용할 수 있으나, 리스트 고유의 함수인 append, insert, pop, remove, sort 등은 사용할 수 없다. for k in a.keys(): print(k) # In[24]: # dict_keys 객체를 리스트로 변환 list(a.keys()) # #### Value 리스트 만들기(values) # In[25]: a.values() # In[26]: # Key, Value 쌍 얻기(items) a.items() # In[27]: # Key, Value 쌍 모두 지우기(clear) a.clear() a # In[28]: # Key 로 Value 얻기(get) a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'} a.get('name') # In[29]: a.get('phone') # In[30]: # 찾으려는 key 값이 없을 경우 디폴트 값 반환 a.get('foo', 'bar') # In[31]: # 해당 Key 가 딕셔너리 안에 있는지 조사하기(in) 'name' in a # In[32]: 'email' in a # --- # ## 02-6 집합 자료형 # # ### 집합 자료형은 어떻게 만들까? # # - set 키워드를 사용, 리스트나 문자열을 입력 # In[1]: s1 = set([1, 2, 3]) s1 # In[2]: s2 = set("Hello") s2 # ### 집합 자료형의 특징 # # - 중복을 허용하지 않는다. -> 중복을 제거하기 위한 필터 역할로 종종 사용한다. # - 순서가 없다(unordered) # In[3]: s1 = set([1, 2, 3]) l1 = list(s1) l1 # In[4]: l1[0] # In[5]: t1 = tuple(s1) t1 # In[6]: t1[0] # ### 집합 자료형을 활용하는 방법 # # #### 교집합, 합집합, 차집합 구하기 # In[7]: s1 = set([1, 2, 3, 4, 5, 6]) s2 = set([4, 5, 6, 7, 8, 9]) # In[8]: # 교집합 s1 & s2 # In[9]: s1.intersection(s2) # In[10]: # 합집합 s1 | s2 # In[11]: s1.union(s2) # In[12]: # 차집합 s1 - s2 # In[13]: s2 - s1 # In[14]: s1.difference(s2) # In[16]: s2.difference(s1) # ### 집합 자료형 관련 함수들 # In[18]: # 값 1개 추가하기(add) s1 = set([1, 2, 3]) s1.add(4) s1 # In[19]: # 값 여러 개 추가하기(update) s1 = set([1, 2, 3]) s1.update([4, 5, 6]) s1 # In[20]: # 특정 값 제거하기(remove) s1 = set([1, 2, 3]) s1.remove(2) s1 # --- # ## 02-7 자료형의 참과 거짓 # # - 자료형의 참과 거짓을 구분하는 기준은 다음과 같다. # # | 값 | 참 or 거짓 | # | :---: | :---: | # | "python" | 참 | # | "" | 거짓 | # | [1, 2, 3] | 참 | # | [] | 거짓 | # | () | 거짓 | # | {} | 거짓 | # | 1 | 참 | # | 0 | 거짓 | # | None | 거짓 | # # In[22]: a = [1, 2, 3, 4] while a: print(a.pop()) # --- # ## 02-8 자료형의 값을 저장하는 공간, 변수 # # - 아래 예에서 a, b, c를 변수라고 한다. # - = (assignment, 할당) 기호를 사용한다. # - C 언어나 JAVA처럼 자료형을 같이 쓸 필요가 없다. # # > 변수명 = 변수에 저장할 값 # # ``` # >>> a = 1 # >>> b = "python" # >>> c = [1, 2, 3] # ``` # ### 변수란? # # ``` # >>> a = 3 # ``` # # - 위의 코드가 실행되면 3이라는 값을 가지는 정수 자료형(객체)가 자동으로 메모리에 생성된다. # - a라는 변수는 그 정수형 객체가 저장된 메모리의 위치를 가리키게 된다. # - 변수 a는 3이라는 정수형 객체를 가리키는 레퍼런스(Reference)라고도 할 수 있다. # #### [파이썬에서 "3"은 상수가 아닌 정수형 객체이다] # In[1]: type(3) # - 아래 코드에서는 변수 a와 b가 모두 3이라는 정수형 객체를 가리키게 된다. # - 동일한 객체를 가리키고 있는지 여부를 판단하는 내장함수 is 함수로 확인한다. # In[2]: a = 3 b = 3 a is b # #### [a, b, c]는 정말 같은 객체를 가리키는 걸까?] # # - 입력한 자료형에 대한 참조 개수(Reference Count)를 알려주는 sys.getrefcount 함수가 있다. # In[4]: import sys sys.getrefcount(3) # 파이썬 내부적으로 이미 사용되고 있다. # In[12]: var1 = 3 sys.getrefcount(3) # In[13]: var2 = 3 sys.getrefcount(3) # In[14]: var3 = 3 sys.getrefcount(3) # ### 변수를 만드는 여러가지 방법 # # ``` # >>> a, b = ('python', 'life') # 튜플로 값을 대입 # >>> (a, b) = 'python', 'life' # 위 예문과 동일 # >>> [a, b] = ['python', 'life'] # 리스트로 # >>> a = b = 'python' # 여러 개의 변수에 같은 값을 대입 # ``` # In[1]: # 위의 방법을 이용하여 두 변수의 값 바꾸기 a = 3 b = 5 a, b = b, a print(a) print(b) # ### 메모리에 생성된 변수 없애기 # # - 생성된 정수형 객체를 없애려면 그 객체를 가키는 모든 변수를 삭제해야 한다. # - 즉, 그 정수형 객체에 대한 참조개수가 0 이 되어야 한다. # - Garbage collection(가비지 콜렉션)이라고도 한다. # In[2]: a = 3 b = 3 del(a) del(b) # ### 리스트를 변수에 넣고 복사하고자 할 때 # # - 아래 예에서 a = b 를 실행하면 리스트가 복사되는 것이 아니라 같은 리스트를 가리키는 변수가 되는 것이다. # In[3]: a = [1, 2, 3] b = a a[1] = 4 a # In[4]: b # - 실제 복사하여 다른 리스트를 생성하는 방법은 다음의 2가지가 있다. # # #### 1. [ : ] 이용 # In[5]: a = [1, 2, 3] b = a[:] a[1] = 4 a # In[6]: b # #### 2. copy 모듈 이용 # In[7]: from copy import copy b = copy(a) b is a