본문 바로가기

파이썬 (python)

[Python 35] 오류 메시지를 통해 본 파이썬 타이틀을 "오류 메시지를 통해 본 파이썬"이라고 조금 거창하게 붙였다. 모든 컴퓨터 언어들이 컴파일하거나 실행할 때 에러가 발생하면 "어디서 무슨 에러가 났는지"에 대한 정보를 보여준다. 물론, 코드에 존재하는, 내가 미처 파악하지 못했던 에러를 찾는 (아주 감사한, 가끔은 너무 힘든) 기회를 제공하지만, 그와 별개로 컴퓨터 언어의 내부를 들여다 볼 수 있는 기회가 되기도 한다. 파이썬에서 흔히 보게 되는 몇가지 대표적인 오류 메시지와 해결방법에 대해서 한번 살펴보자. ○ NameError : name '-----' is not defined 가장 대표적인 에러로 NameError가 있다. (억지로 만든) 간단한 예를 한번 보자. 아래의 In[3]에서 Something 이라는 이름의 클래스를 하나 선언하.. 더보기
[Python 34] 파이썬의 matplotlib와 예제 이번 글에서는 파이썬의 그래픽 라이브러리인 matplotlib에 대해서 살펴보도록 하자. (matplotlib의 기초에 대한 소개는 다음에...) 학교의 수업 중에 파이썬의 matplotlib 과제로 인터넷 기사에서 임의로(?) 구한 그래프와 최대한 유사하게 만들어서 제출하라는 과제를 내었다. 모범적인 여러 답안들이 나와서 이 글에서 소개해 보고자 한다. 가장 모범적인 답안이었던 1학년 김태희 학생의 답안을 비롯해 몇가지 재밌는 아이디어를 소개해 보고자 한다. ○ 문제 아래의 그래프를 파이썬의 matplotlib를 이용해서 최대한 비슷하게 그릴 것. 단 matplotlib의 함수적 접근인 pyplot 을 사용하지 않고 객체지향적 접근을 사용할 것. ○ 모범답안 1 (20학번 학생) 우선 결과부터 보자. .. 더보기
[Python 32] 객체 : Encapsulation 객체지향을 설명하는 3가지 원리 (principles)로 Encapsulation (캡슐화), Inheritance (상속), Polymorphism (다형성)을 얘기한다. 이번 글에서는 그 중에서 첫번째 원리인 Encapsulation에 대해서 살펴보도록 한다. 이 과정을 통해 인스턴스 변수는 객체의 상태를 나타내고, 객체의 메쏘드는 객체에 대한 인터페이스 (interface)에 해당한다는 것을 이해하기를 바란다. 항상 하는 말이지만, 객체는 변수와 함수를 묶어 놓은 것이다. 그러면 바로 떠오르는 질문은 "왜 묶은거지?"이다. 같이 답을 한번 찾아보도록 하자. 객체란 변수와 함수를 묶어 둔 것이라고 했으니 우선 변수와 함수를 제대로 이해하는 것이 먼저겠다. 앞의 글에서도 계속해서 말해왔던 부분이지만 객.. 더보기
[Python 31] 코딩, 이것만 알자 의외로 코딩은 단순하다. 아주 전형적인 패턴이 하나 있는데, 리스트와 For 이다. 이 리스트와 For 만 잘 활용할 수 있으면 코딩은 의의로 매우 단순해 진다. 그런 의미에서, 리스트와 For 에 대해 한번 더 복습해 보는 시간을 갖도록 하자. 과연, Coding = List 와 For 일까? ○ 데이터 구조와 알고리즘은 하나의 문제에 대한 2개의 관점으로서, 서로 연관되어 있다. 컴퓨터학과에서 전공필수로 배우는 과목 중에 "데이터구조와 알고리즘" 이라는 수업이 있다. 이것은, 알고리즘은 별개로 독립되어 있는 것이 아니라, 그 알고리즘에서 다루어지는 데이터가 어떤 구조로 만들어져 있는가에 따라 달라진다는 뜻이다. 즉, 데이터 구조가 달라지면, 알고리즘도 달라지게 된다는 의미이다. 내가 다룰 데이터가 리.. 더보기
[python 25] 파이썬 1부, 알고리즘 편을 끝내며 처음에 블로그를 시작하게 된 계기는 코딩을 처음으로 배우는 대학교 1학년 학생들에게 알고리즘을 중심으로 파이썬을 공부할 수 있는 "제대로 된" 교재를 만들어 보자는 목적이 있었다. 물론, 시중에 정말 좋은 파이썬 교재들이 많지만, 우리 학과에서 시작하려고 하는 파이썬 수업에 "딱 맞는" 교재를 찾기는 어려워서이다. 많은 내용을 담고 있는 교재 보다는 처음으로 파이썬을 공부하는 학생들에게 알고리즘의 탄탄한 기초를 제공할 수 있는 교재가 목표였다. 기초만 탄탄하면 사실 파이썬의 많은 내용들은 이미 인터넷에 무수히 올라와 있다. 인터넷 검색을 통해 지식을 체계화 하는 능력 (아이큐 같은 천부적 능력을 말하는 것이 아니라, 공부에 시간과 노력을 투자할 수 있는 능력을 말하는 것임)과 약간의 영어 독해 능력 (대.. 더보기
[python 24] 알고리즘 연습 - 4 : 두번째로 큰 값 찾기 리스트 중에서 가장 큰 값을 찾는 알고리즘을 만들어 본 후에, 그 문제를 확장하는 의미에서 "리스트에서 두번째로 큰 값을 찾는 알고리즘을 만들고 코드를 제시하라" 라는 과제를 내었다. 대학 1학년 1학기 학생들이 대상이다. 아주 다양한 아이디어가 제시되었다. 그 중에 몇가지 우리 학생들의 아이디어를 공유해 보고자 한다. ○ 큰 값을 구한 후에 그 값을 제거하고 나머지 값 중에 제일 큰 값을 구한다. 첫번째 아이디어는 (1) 먼저 리스트에서 가장 큰 값을 먼저 구한다 (2) 가장 큰 값을 가장 작은 값으로 대체한다. 그러면, 원래는 두번째로 큰 값이었던 값이 가장 큰 값이 된다. (3) 변경된 리스트에서 가장 큰 값을 구한다. 먼저 기본적인 아이디어를 스케치해 보고, 실제 그 아이디어가 작동하는지를 확인해.. 더보기
[python 23] 알고리즘 연습 - 3 : 정렬 알고리즘 데이터 처리에서 가장 중요한 2가지 문제는 검색(search) 과 정렬(sorting) 이다. 이 중에서 데이터를 크기 순으로 정렬하는데 사용할 수 있는 알고리즘은 정말 많이 제안되었다. 그 중에서 가장 흔하게 활용되는 것이 셀렉션 소팅(Selection sorting)과 버블 소팅 (bubble sorting), 퀵 소팅 (Quick sorting), 바이너리 소팅 (Binary sorting) 등이다. 우선 가장 기본적인 선택정렬(selction sorting)을 먼저 다루어 보자. ○ 선택 정렬 (selection sorting) 보통 정렬의 이름에 그 정렬의 특징이 드러나는데, 선택정렬은, 예를 들어 오름차순이라면, 가장 큰 값을 "선택"하여 가장 마지막 값과 바꾸는 방식을 통해 데이터를 정렬하게.. 더보기
[python 22] 디버깅의 2가지 방법 (*작성중*) ○ 알고리즘 (algorithm) 이란? 우리가 만든 파이썬 코드가 우리가 만들려고 했던 알고리즘대로 움직이는지 확인하는 과정이 필요하다. 이러한 확인 과정을 보통 테스트(test), 디버깅(debugging)이라고 부른다. 물론, 그 알고리즘이 올바르게 동작한다는 것이 검증이 되었다는 가정 하에 하는 말이다. 우리에게 어떤 문제 (Problem) 가 주어져 있다 (What). 우리는 그 문제에 대한 해답(solution)을 찾아야 한다. 근데 문제가 너무 복잡하여 금새 답을 떠올릴 수가 없다. 무엇인가 논리의 흐름, 즉 어떤 절차, 을 만들어야 해답을 찾아낼 수 있다. 문제와 해답을 잇는 "논리의 흐름" 을 찾는 것이 중요한데, 이를 보통 알고리즘 (algorithm)이라고 한다. 무엇(What)인가 .. 더보기