패스트캠퍼스 프로그래밍 첫걸음, 열 두 번째 학습 후기
프로그래밍 첫걸음도 곧 있으면 100% 진도다.
이번 진도도 파이썬 진도다.
스피디한 진행이 마음에 들었고
깃허브 문서로 여느 책 못지 않은 자세한 보충 설명으로
비전공자와 전공자 모두 만족시켜주는 강의다.
강의 영상은 대체로 10분이 넘었다.
이론 설명은 짧게 하고 대부분 실습을 진행하며
어떻게 동작하는지 자세히 알려주었다.
직접 따라쳐서 몸으로 익히면서 귀로 자세한 코드 설명을 듣고
시간을 정말 효율적으로 사용한다는게 마음에 들었다.
10주차 진도에서는
- 06. [PYTHON] 컬렉션(set_tuple)
- 과제1. 내장 함수로 컬렉션 정렬하기
- 07. [PYTHON] 문자열 처리
- 과제2. formatting, split 문자열 메서드 사용하기
- 08. [PYTHON] 함수
- 과제3. 정렬 함수 정의 하기
- 09. [PYTHON] 예외 처리
- 과제4. 예외 발생 시켜보기
- 10. [PYTHON] 엑셀 처리
- 과제5. 엑셀 파일 불러와서 출력하기
06. [PYTHON] 컬렉션(set_tuple)
1 2 3 4 | num_tuple = (1, 2, 3) # num_tuple[0] = 0 # TypeError # del num_tuple[0] # TypeError print(num_tuple) # (1, 2, 3) | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | num_set = {1, 1, 2, 2, 3, 3} num_set.add(4) print(num_set) # {1 2 3 4} set1 = {1, 2, 3, 4} set2 = {1, 2, 3} print(set1 & set2) # 교집합 {1, 2, 3} print(set1 | set2) # 합집합 {1, 2, 3, 4} print(set1 - set2) # 차집합 {4} test_list = [1, 2, 3] sub_list = [1, 2] print(test_list + sub_list) # [1, 2, 3, 1, 2] print(test_list * 2) # [1, 2, 3, 1, 2, 3] test_list2 = [1, 2, 3, 1, 2, 3] test_set = set(test_list2) print(test_set) # {1, 2, 3}s # list(), dict(), set(), tuple() # print(test_set[0]) # TypeError not support indexing | cs |
과제1. 내장 함수로 컬렉션 정렬하기
1 2 3 4 5 6 7 8 9 10 | num_set = {1, 1, 2, 2, 3} print(num_set) # {1, 2, 3} str_set1 = {'abcabc'} print(str_set1) # {'abcabc'} str_set2 = set('abcabc') print(str_set2) # {a, c, b} hangul1 = {'안녕안녕ㅎㅎ'} print(hangul1) # {'안녕안녕ㅎㅎ'} hangul2 = set('안녕안녕ㅎㅎ') print(hangul2) # {'ㅎ', '녕', '안'} | cs |
실습할 때 봤던 메소드들도 있다. 여기서 집합 연산 메소드는 따로 연산자로 대신할 수 있다.
앞서 봤던 교집합, 합집합, 차집합 등이 그 예다.
1 2 3 4 5 6 | a = {1, 2, 3} b = {1, 2, 4} print(a & b) # 1, 2 교집합 print(a | b) # 1, 2, 3, 4 합집합 print(a - b) # 3 차집합 print(a ^ b) # 3, 4 대칭차집합 | cs |
실습에서 보지 못한 연산은 대칭차집합 연산이다. 대칭차집합은 두 집합에서 공통 부분을 뺀 모든 요소들을 반환한다.
파이썬에서는 어떻게 연산자로 메소드로 대체할 수 있는 것인가? 라는 의문이 들었다.
찾아보니 연산자 오버로딩(Operator Overloading) 개념이 있기 때문이다.
그 전에 오버라이딩과 오버로딩의 차이점을 알아보자.
오버라이딩은 어떤 클래스를 상속할 때 그 클래스에 있는 메소드들을 자식 클래스가 입맛에 맞게 변경한다는 것을 의미한다.
오버로딩은 같은 이름을 가지고 중복해서 여러가지 매개 변수들을 받을 수 있게 해주는 것을 의미한다.
연산자 오버로딩은 연산자 기능을 중복으로 정의해서 설계자가 원하는 행위를 해주게 한다.
클래스 메소드에 파이썬이 정해놓은 특수한 메소드로 연산자 오버로딩을 가능케 해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | object.__add__(self, other) object.__sub__(self, other) object.__mul__(self, other) object.__matmul__(self, other) object.__truediv__(self, other) object.__floordiv__(self, other)¶ object.__mod__(self, other) object.__divmod__(self, other) object.__pow__(self, other[, modulo]) object.__lshift__(self, other) object.__rshift__(self, other) object.__and__(self, other) object.__xor__(self, other) object.__or__(self, other) | cs |
1 2 | a = {x for x in 'abcdef' if x not in 'abc'} print(a) # {'d', 'e', 'f'} | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 1번 코드 rainbow = 'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet', # 2번 코드 rainbow[0] = 'black' # TypeError 에러 발생! # 3번 코드 tup = (rainbow, [1, 2, 3, 4, 5]) print(tup) # (('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'), [1, 2, 3, 4, 5]) numbers = tup[1] numbers[0] = 0 # 에러 없음 # 4번 코드 int1 = (1) print(int1) # 1 # 5번 코드 tuple1 = (1,) # 같은 표현: tuple1 = 1, print(tuple1) # (1,) | cs |
1 2 3 4 5 | rainbow = 'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet' # Packing tup = (rainbow, [1, 2, 3, 4, 5]) # Packing r, l = tup # Unpacking print(r[0], l[0]) # red 1 | cs |
1 2 3 4 5 6 7 | numbers = [1, 1, 2, 2, 3] # 1번 코드 no_dup_numbers = list(set(numbers)) print(no_dup_numbers) # [1, 2, 3] tuple_numbers = tuple(numbers) print(tuple_numbers) # (1, 1, 2, 2, 3) | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | numbers = [1, 5, 4, 3, 2] numbers = sorted(numbers) print(numbers) # [1, 2, 3, 4, 5] numbers = sorted(numbers, reverse=True) print(numbers) # [5, 4, 3, 2, 1] def double(x): return x * 2 numbers = [1, 2, 3, 4, 5] numbers = list(map(double, numbers)) print(numbers) # [2, 4, 6, 8, 10] def grater_than_2(x): return x > 2 numbers = [1, 2, 3, 4, 5] numbers = list(filter(grater_than_2, numbers)) print(numbers) # [3, 4, 5] numbers = [1, 2, 3, 4, 5] double = list(map(lambda x:x * 2, numbers)) grater_than_2 = list(filter(lambda x:x>2, numbers)) print(double) # [2, 4, 6, 8, 10] print(grater_than_2) # [3, 4, 5][3, 4, 5] | cs |
07. [PYTHON] 문자열 처리
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | test1 = "Life is too short, %s" result1 = test1 % "You need python." print(result1) test2 = "Life is too short, %s %s %s" result2 = test2 % ("You", "need", "python.") print(result2) test3 = "Life is too short, %.2f" result3 = test3 % 100 print(result3) test4 = "Life is too short, {} {} {}" result4 = test4.format("You", "need", "python.") print(result4) test4 = "Life is too short, {} {} {}" result4 = test4.format("You", "need", "python.") print(result4) test5 = "Life is too short, {} {} {}" result5 = test5.format("You", "need", 10) print(result5) | cs |
문자열 객체에 있는 format 메소드를 이용할 때는 별다른 지시어를 쓰지 않아도 된다.
마지막으로 이스케이프 문자를 배운다.
이스케이프 문자는 문자열을 만들 때 고유한 의미를 갖는 문자를 뜻한다.
문자열 안에 넣기에 문법적으로 맞지 않는 것들도 포함된다.
이스케이프 문자의 종류는 다음과 같다.
[ QUIZ ]
1. '포맷팅'은 문자열을 원하는 스타일로 표현하기 위해서 사용된다.
2. '지시어(%)'를 이용해서 원하는 문자열의 자료형을 표현한다.
3. 'format() 함수'는 문자열 포맷을 지정하기 위한 함수이다.
4. '이스케이프 문자'는 고유한 의미를 갖는 문자이며, 역슬래시가 붙는다.
과제2. formatting, split 문자열 메서드 사용하기
1 2 3 4 5 6 7 8 9 | test_string = "My name is Seongjae Moon." print(test_string.split()) # ['My', 'name', 'is', 'Seongjae', 'Moon.'] for i in test_string.split(): print(i, end = ' ') # My name is Seongjae Moon. replace = test_string.replace('Seongjae Moon.', 'Super Moon!') for i in replace: print(i, end = '') # My name is Super Moon! |
08. [PYTHON] 함수
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | def sum(x, y, test=1): return x + y + test x = 1 y = 1 print(sum(x, y)) # 3 print(sum(x, y, 3)) # 5 def sum2(x, *y): result = 0 for i in y: result += i print(x + result) sum2(1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) # 56 def sum3(one, two): return one + two print(sum3(two=1, one=1)) # 2 | cs |
과제3. 정렬 함수 정의 하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | def sum(a, b): return a + b s = sum print(s(1, 2)) # 3 def sum(a, b): return a + b def multiply(a, b): return a * b func = [sum, multiply] print(func[0](1, 1), func[1](2, 2)) # 2, 4 # 1번 코드 def sum(a, b): return a + b # 2번 코드 def func(a, b): return sum(a, b) print(func(1, 1)) # 2 # 1번 코드 from time import time # 2번 코드 def run_time(f): # 시작 시간 start = time() f print(time() - start) # 종료 시간 - 시작 시간(총 수행 시간)을 계산하여 정수 값으로 출력합니다. # 3번 코드 def sum(): sum = 0 while sum < 100: sum += 1 print(sum) # 1 2 3 ... 100 # 4번 코드 run_time(sum()) # 0, 코드 실행시간 출력 | cs |
09. [PYTHON] 예외 처리
finally 블록은 없어도 된다.
반면 일부로 예외를 발생시킬 수 있다.
raise Exception("예외")
코드로 의도적으로 예외를 발생시킬 수 있다.
1 2 3 4 5 6 7 8 9 10 11 | arr = [1, 2, 3] try: print(arr[3]) except: print("오류!") # 실행 test = 10 if test == 10: raise Exception("test is 10.") # Exception: test is 10. 예외 발생 | cs |
과제4. 예외 발생 시켜보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Cat(): def __init__(self, name): if not name: print("이름이 필요합니다!") self.name = name cat = Cat("냥") # 에러가 발생하지 않습니다. try: cat = Cat() # TypeError가 발생합니다. 객체 생성시 필요한 인자인 "name"이 없기 때문에 발생합니다. except: print("Type Error가 발생합니다.") cat = Cat("") # 이름이 필요합니다! | cs |
10. [PYTHON] 엑셀 처리
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | from openpyxl import load_workbook as load DIR = 'test.xlsx' wb = load(DIR) ws = wb.create_sheet('test') ws['A1'] = "제목1" ws['B1'] = "제목2" ws['A2'] = "10" ws['B2'] = "20" wb.save(DIR) wb.close() wb = load(DIR) ws = wb['test'] a1 = ws['A2'].value a2 = ws['B2'].value print(a1, a2) wb.close() | cs |
과제5. 엑셀 파일 불러와서 출력하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | from openpyxl import load_workbook as load DIR = 'test.xlsx' def save_excel(ws): idx = 65 for i in range(1, 10): for j in range(1, 10): ws[chr(idx) + str(j)] = "{} x {} = {}".format(i, j, i*j) idx += 1 wb.save(DIR) def get_excel(ws): idx = 64 for i in range(1, 10): for j in range(1, 10): print(ws[chr(idx + i) + str(j)].value) print() wb = load(DIR) ws = wb.create_sheet('99단') try: save_excel(ws) get_excel(ws) except Exception as e: print(e) finally: wb.close() | cs |
엑셀 파일과 콘솔 모두 실행이 잘 된다.
10주차 학습을 마무리 했다.
다음 진도는 본격적으로 웹 크롤러를 만들어본다.
웹 크롤러를 다 만들고 나면 파이썬 진도는 마무리 된다.
이후에 개발자 커리어 조언까지 준비되어 있으니
정말 알찬 강의 아닌가?
패스트캠퍼스 프로그래밍 첫 걸음 강의 정말 가성비 최고인 강의다!
'자유 > 대외 활동' 카테고리의 다른 글
패스트캠퍼스 프로그래밍첫걸음 학습후기 ) #14.12주차 학습후기, 진도 100% (0) | 2019.05.28 |
---|---|
패스트캠퍼스 프로그래밍첫걸음 학습후기 ) #13.11주차 학습후기, 파이썬 웹크롤러 만들기 (0) | 2019.05.27 |
패스트캠퍼스 프로그래밍첫걸음 학습후기 ) #11.9주차 학습후기, 파이썬 프로그래밍 시작 (0) | 2019.05.12 |
패스트캠퍼스 프로그래밍첫걸음 학습후기 ) #10.8주차 학습후기, 자바스크립트 완전 정복! (0) | 2019.05.09 |
패스트캠퍼스 프로그래밍첫걸음 학습후기 ) #9.7주차 학습후기, 자바스크립트 정복하기! (0) | 2019.05.06 |
댓글