2019/01/29 - [Language/Python] - [Python 따라하기]1. Python 설치하기

2019/02/05 - [Language/Python] - [Python 따라하기]2. 자료형_part 1(String, Int,Float, List)

2019/02/12 - [Language/Python] - [Python 따라하기]3. 자료형_part2(Tuple,Set,Dictionary)

2019/02/19 - [Language/Python] - [Python 따라하기]4. 조건문

2019/02/26 - [Language/Python] - [Python 따라하기]5. 반복문(For, While, break, continue)

2019/03/05 - [Language/Python] - [Python 따라하기]6. 함수만들기(def, print, format)

2019/03/12 - [Language/Python] - [Python 따라하기]7. 파일 입출력 (File I/O)

2019/03/19 - [Language/Python] - [Python 따라하기]8. 클래스와 상속(Class, inheritance)

2019/03/26 - [Language/Python] - [Python 따라하기]9. 예외처리(try,except,finally)

유용한 내장 함수 및 외장 함수

파이썬을 더 잘 사용하기 위해서 많은 내장함수와 외장함수를 알고 있는 것이 중요하다. 남들보다 더 많이 알고 있다면 내가 만들고자 하는 프로그램의 작업량이 훨씬 줄을 수 있을 것이다.

내장함수

내장함수는 외장함수와는 달리 import가 필요하지 않다. 따라서 아무런 설정이 없어도 바로 사용할 수 있다.

abs

abs(x)는 어떤 숫자를 입력으로 받았을 때, 그 숫자의 절대값을 돌려주는 함수이다.


chr

chr(int)는 아스키 코드값을 입력으로 받아 그 코드에 해당하는 문자를 출력하는 함수이다.

divmod

divmod(a,b)는 2개의 숫자를 입력으로 받는다. 그리고 a를 b로 나눈 몫과 나머지를 튜플 형태로 반환하는 함수이다.


몫을 구하는 연산자 //와 나머지를 구하는 연산자 %로 구한 것과 같다.


filter

영어 단어의 뜻과 같이 조건에 맞는 값들을 걸러낸다는 동작을 한다. 첫 번째 인수로 함수 이름을, 두번째 인수로 iterable한 자료형을 받는다. 그래서 iterable한 자료형의 값들을 함수로 넣어 참인 것들만 묶어서 반환한다.

map

filter처럼 map(f,iterable)로 함수와 iterable한 객체를 받는다. map은 filter와 비슷한 역할을 하지만 iterable의 각 요소에 함수 f에 의해 수행된 결과를 묶어서 반환을 한다.

ord

chr의 반대성격을 가지는 함수이다. ord(c)는 문자의 아스키 코드값을 반환하는 함수이다.

외장함수

외장함수란 전 세계의 파이썬 사용자들이 만든 유용한 프로그램들을 모아 놓은 것이다. 이를 파이썬 라이브러리라고 부르는데, 모든 라이브러리를 다 알 필요는 없고 어떤 일을 할 때 어떤 라이브러리를 사용해야 한다는 정도만 알고 있으면 된다.

os

os 모듈은 환경 변수나 디렉토리, 파일 등을 제어할 수 있게 해주는 모듈이다.

os.environ

현재 시스템의 환경 변수 값들을 보여준다.

os.chdir

os.chdir을 이용하여 아래와 같이 현재 디렉토리의 위치를 변경할 수 있다.

os.getcwd

os.getcwd는 현재 자신의 디렉토리 위치를 반환한다.

glob

파일을 읽고 쓰는 기능이 있는 프로그램을 만들다 보면 특정 디렉토리에 있는 파일 모두를 가져와야 할 때가 있다. 이 때 사용하는 모듈이 바로 glob이다.

glob모듈은 디렉토리 내의 파일들을 읽어서 리스트로 반환한다. * , ? 등을 사용해서 원하는 파일만 읽을 수 있다.

datetime

datetime 패키지에서는 날짜와 시간을 함께 저장하는 datetime 클래스, 날짜만 저장하는 date 클래스, 시간만 저장하는 time 클래스가 있다.
그중 가장 많이 사용하는 datetime 클래스에 대해서 소개한다.

datetime.dateime 클래스

패키지 이름과 클래스 이름이 datetime으로 같기 때문에 사용할 때 주의해야 한다. datetime에서 반환하는 객체는 datetime.datetime이다. 가장 대표적인 것은 현재 시간을 출력하는 now()이다.


now()에서 생성된 객체들에 대해 다음과 같이 접근할 수 있다.


datetime.datetime에는 여러 메서드들도 제공하지만 그중 strftime()을 자주 사용하는 문자열을 반환해주는 함수이다. 이 메서드는 어떤 형식으로 문자열을 만들지 결정하는 문자열을 인수로 받는다. 자세한 것은 다음 링크에서 확인할 수 있다.

https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior


random

random은 난수를 발생시키는 모듈이다. 다음은 0~1.0 사이의 실수 중에서 난수값을 리턴하는 예시이다.

randint

random.randint(a,b)와 같이 사용하며 a에서 b 사이의 정수 중에서 임의의 값을 반환한다.

random.choice

random.choice(list)와 같이 사용하며 list 값 중 무작위로 하나를 선택하여 반환한다.

random.shuffle

random.shuffle(list)와 같이 사용하며 list를 무작위로 섞는다.



파일 입출력

 만약 당신이 엄청 긴 문자열 중에 특정 단어를 세야 하는 업무를 받았다고 하자. 그렇다면 문자열을 하나의 변수로 받아 count 함수를 사용해서 단어를 세면 된다고 생각할 수 있다. 이 일을 하기 위해 문자열을 변수에 저장하려고 했는데 이 문자열의 양이 너무 많았다. 직접 타이핑하는 것은 불가능하고 복사해서 붙여 넣는 방법을 사용하기에도 여러 페이지로 되어 있어서 오래 걸릴 작업이다. 그렇다면 이와 같은 경우에는 어떻게 해야 할까?

이럴 경우에는 이 문자열을 하나의 txt 파일로 저장을 한 뒤, 이를 입력으로 받아오면 된다. 이처럼 프로그래밍에서는 외부 파일을 '입력'으로 받아서 여러 작업을 할 수 있다. 또한 내가 프로그래밍을 하면서 작성한 내용을 txt에 출력도 가능한데, 이를 파일 입출력이라고 부른다.

import os

파일 입출력을 하기에 앞서 파일을 작성하거나 읽어오기 위해서는 현재 파이썬이 실행되고 있는 위치가 중요하다. 지금 파이썬이 실행되고 있는 위치에 있는 파일에만 읽어올 수 있거나 작성을 할 수 있기 때문이다. 따라서 이를 관리하기 위해서 python에서 파일의 경로에 관한 함수를 제공해주는 os라는 내장 모듈이 있다.

os.getcwd()

os.getcwd()는 현재 python이 작업하고 있는 파일 디렉토리의 경로를 얻어오는 함수이다. 현재 작업하고 있는 위치를 확인을 할 수 있고, 만약 작업 디렉토리의 경로를 이동한다면 잘 이동했는지 확인을 할 수 있다.


os.chdir()

os.chdir()는 작업 디렉토리의 경로를 바꿔주는 함수로 매개변수로 내가 바꾸고 싶은 경로를 입력해주면 된다.


다음은 예시 파일이다. file_example.txt

파일 입출력하는 방법

파일을 읽어오는 방법은 open이라는 함수를 사용하는 것이다. open은 보통 다음과 같이 사용하며 파일 객체를 반환한다.

file=open( <<파일 명>>, <<파일 모드>>,....)

 이외에도 encoding과 같은 매개변수가 존재하나, open은 위 두 개의 매개변수를 주로 사용한다. 첫 번째 매개변수는 내가 열 파일의 이름이거나 작성할 파일의 이름이고, 두 번째 매개변수는 모드를 선택하는 것이다. 모드는 'r' 모드, ' w ' 모드 , 'a' 모드가 있는데 r은 읽기 모드, w는 쓰기 모드, a는 추가 모드이다. 그리고 가장 중요한 것으로 항상 파일을 open을 했다면 close를 해 주어야 한다. 일반적으로 프로그램을 종료하면 자동으로 close가 되기는 하나 닫아주는 편이 좋다.

따라서 파일을 읽어 오는 방법은 다음과 같이 "r" 모드를 사용하면 된다.

쓰기 모드

쓰기 모드는 open(내가 작성할 파일 명,"w")과 같이 사용하며 내가 작성하고 있는 파일 공간에 그 파일 명의 txt 파일이 없다면 생성하여 작성한다. 만약 동일한 명의 txt 파일이 있다면 그 안의 내용을 지우고 새로 작성한다.


읽기 모드

위에서 본 것처럼 'r' 모드로 열면 파일의 내용이 아닌 파일 객체를 반환하게 된다. 이를 함수를 사용해서 읽어내야 하는데 3가지 방법이 있다.

readline

readline은 한 줄씩 읽는 방법이다. 하나의 readline 당 txt 파일의 한 줄을 읽어오며 txt 파일을 전부 읽어오려면 여러번의 readline을 사용해야 한다.



위처럼 readline으로 읽어와 print 할 경우 두 번 줄바꿈을 하는 것을 알 수 있다. 그 이유는 readline으로 읽어올 때, 문자열의 끝에 "\n"이 붙어 있기 때문이다. 따라서 이를 막기 위해서 문자열의 공백이나 줄바꿈을 없애주는 함수인 strip을 사용하도록 한다.


readlines

readlines 에서 더 발전된 형태로 파일을 모두 읽어서 각각의 줄을 하나의 요소로 가지는 리스트로 리턴 된다. 즉 ["......\n",".....\n",".......\n"]과 같은 형식을 가지고 있다.

read

read는 파일 내용 전체를 문자열로 리턴한다.








2019/01/29 - [Language/Python] - [Python 따라하기]1. Python 설치하기

2019/02/05 - [Language/Python] - [Python 따라하기] 2. 자료형_part 1(String, Int,Float, List)

2019/02/12 - [Language/Python] - [Python 따라하기]3. 자료형_part2(Tuple,Set,Dictionary)

2019/02/19 - [Language/Python] - [Python 따라하기]4.조건문

2019/02/26 - [Language/Python] - [Python 따라하기]5. 반복문(For, While, break, continue)


함수를 사용하는 이유

수학에서는 함수는 f(x)=x^2와 같이 만들고, f(2)=4 와 같이 활용한다. 여기서 f(x)를 함수라고 부르고, x^2은 함수의 내용, 2는 입력값, 4는 결과값이라고 한다. 이와 동일한 구조로 프로그래밍에서도 함수를 만들어서 사용한다.

프로그래밍에서 수학연산을 하기 위해서 함수를 만드는 것은 아니다. 프로그래밍을 하다가 보면 반복적으로 똑같은 작업을 해야 하는 경우가 있을 것이다. 이 작업을 줄이고자 의미가 있는 부분들을 묶어서  함수로 만드는 것이다. 수학에서의 함수와 같이 '하나의 함수당 함수의 내용이 있고, 입력값을 넣으면 출력값이 나온다' 와 같은 방법으로 만든다.

함수의 구조

파이썬 함수의 구조는 다음과 같이 구성된다.

def 함수명(매개변수):
<<수행할 문장들>>

def는 함수를 만들겠다는 예약어이며 함수명, 매개변수, 수행할 문장들은 사용자가 임의로 작성하는 것이다. 조건문과 반복문처럼 함수의 속하는 부분임을 나타내기 위해서 들여쓰기를 사용한다.

다음은 함수의 간단한 예시이다.


여기서 return은 함수의 결과값을 반환해주는 명령어이다.

이 함수는 두 개의 변수 x,y를 받아서 두 개의 합을 반환해주는 함수이다.



위 함수의 구조는 입력값이 있고, 결과값이 있는 일반적인 구조이다.

만약 입력값이 없거나, 결과값이 없는 함수의 구조도 가능할까??



다음과 같이 입력값 혹은 결과값이 없더라도 함수가 동작하는데엔 아무런 문제가 없다.

만약 입력값이 몇 개가 될지 모를 경우

입력값이 여러 개일 때 그 입력값을 다 더해주는 함수를 만들어보자. 하지만 몇 개가 입력될지 모른다면 어떻게 해야할까?
이와 같은 경우에는 *를 사용하면 된다.


매개변수 앞에 *를 사용하면 몇 개가 들어가던지, 전부 모아서 튜플로 바꾸어주기 때문에 상관이 없다.

*매개변수는 단독으로 사용하는 것 이외에도 다른 일반 변수와도 함께 사용가능하다.


return 

return은 함수 값을 반환해주는 명령어로써 사용한다면 하나의 함수에서 한 개만 사용이 된다. 이 점을 이용해서 함수를 끝내는 용도로 사용할 수 있다.
다음 함수는 number로 5를 받으면 return을 만나서 number를 print를 하지 않고 종료됨을 알 수 있다.

초기값을 미리 설정해둘 경우

함수의 매개변수에 미리 초기값을 정해둘 수 있다. 초기값을 정해둔 함수의 경우 함수를 사용할 때 그 값을 넣어 주지 않으면 미리 정해진 값으로 함수를 실행한다. 만약 초기값을 무시하고 값을 넣어준다면 초기값이 아닌 내가 설정한 값으로 함수를 실행한다.

Global , local

함수내에서 사용되는 변수의 성격은 local이라고 할 수 있다. 즉 함수내에서 정의되어 있는 변수는 함수 외부에는 영향을 주지 않는다는 것이다. 다음을 보면 함수 밖에 있는 number가 1로 정의 되어 있고 함수를 통해 number가 2배로 증가 되었을 것 같지만 그렇지 않다.

우리가 정의한 number는 함수 외부의 정의이고 함수 내부에서 2배를 해준 number는 단지 함수 내에서만 사용하는 변수지 밖의 number에는 영향을 주지 못한다는 것이다.


만약 함수 내부의 변수를 외부에 영향을 주려면 어떻게 해야 할까??


두 가지 방법이 있다.

return 

우리가 지금까지 외부의 변수에 영향을 줄 수 있었던 이유는 return을 사용했기 때문이었다.

Global

이 방법은 외부의 변수를 global이라고 재정의를 해서 직접 외부의 변수를 사용하겠다고 명시를 하는 것이다.

보통 global이라고 명시를 해서 사용하기 보단 return을 사용한 방법을 이용한다. 그 이유는 단순한 함수의 경우에는 문제가 없지만 함수가 복잡해질수록 global한 변수는 제어하기 힘들어지기 때문이다. 


Print

지금까지 출력하는 함수인 print를 별다른 설명없이 사용하고 있었다. 하지만 print 내에서도 여러 기능을 제공하고 있었다.
print의 구조는 다음과 구성되어 있다,

print(value,....sep=' ',end='\n',file=sys.stdout,flush=False)

보통 print의 sep이나 end까지만 사용하고 file이나 flush는 사용하지 않는다.

print 내에서 여러 문자열을 + 로 이어가거나 콤마(,)를 사용해서 출력한다. 이 둘의 차이점은 + 은 띄어쓰기를 지원해주지 않지만 콤마로 구분을 하면 띄어쓰기를 해주기 때문이다. 이 이유는 콤마가 sep을 나타내는데, sep의 기본값은 공백으로 설정되어 있기 때문이다.


위에서도 말했듯이 콤마가 sep이 공백으로 설정되어 있기 때문에 띄어쓰기를 했다면 sep값을 주면 콤마를 사용했을 때 그 사이사이에 sep이 들어가게 된다.



또한 출력을 하면 하나의 print 당 한 줄에 나타나게 되는데, 그 이유는 print의 end의 기본값이 줄바꿈으로 설정되어 있기 때문이다.



따라서 end값을 공백으로 변경해준다면 한 줄에 모든 값을 표시해 줄 수 있다.


문자열 포맷팅

한 과일가게가 있다고 하자. 이 가게는 과일의 남은 양들을 공지해주는 프로그램을 만들었다. 그 프로그램은 다음과 같이 공지한다.

"사과가 7개 있습니다."

손님이 와서 사과를 2개 사갔다고 하자. 그러면 다음과 같이 수정된다.

"사과가 5개 있습니다."

위의 두 문자열은 동일한데 숫자 7과 5만 다르다. 이렇게 큰 틀이 있고 특정 부분만 바꾸어서 계속 사용해야하는 문자열이 있다면 문자열 포맷팅을 사용하면 더 편하게 사용할 수 있다.

문자열 포맷팅을 하는 방법에는 크게 세 가지 방법이 있다.

1. % 사용하기
2. format 함수 사용하기
3. f 사용하기

1. % 사용하기

%를 사용할 경우 문자열 포맷코드가 있다. %+"..."와 같은 형태로 사용한다.

코드 

설명 

%d 

 정수형

%s 

 문자열

%f 

부동소수점 

%% 

단어 '%' 


2. format 함수 사용하기

format 함수를 사용하면 좀 더 유연하게 문자열 포맷팅을 하는 것이 가능하다. 포맷팅을 하고 싶은 부분들을 { }로 표시를 하며 { }에 숫자를 집어 넣어서 포맷팅의 순서를 지정할 수 있고, 숫자를 생략한다면 가장 먼저 만나는 { }부터 차례대로 포맷팅해준다.

3. f 사용하기

파이썬 3.6버젼부터 제공하는 기능으로 그 이전 버젼에서는 사용할 수 없다. 문자열 앞에 f를 붙여서 문자열 포맷팅을 할 수 있다.




2019/01/29 - [Language/Python] - [Python 따라하기]1. Python 설치하기

2019/02/05 - [Language/Python] - [Python 따라하기] 2. 자료형_part 1(String, Int,Float, List)

2019/02/12 - [Language/Python] - [Python 따라하기]3. 자료형_part2(Tuple,Set,Dictionary)

2019/02/19 - [Language/Python] - [Python 따라하기]4.조건문

반복문

 같은 작업을 반복적으로 해야할 때, 반복문을 사용한다면 작업의 양이 줄어들 뿐만 아니라 보기에도 깔끔해지게 된다.
반복문에는 크게 for와 while 두 가지가 있다.



For

for는 주로 list 혹은 String과 같이 반복가능한 객체를 한 번씩 훑어보기 위해서 사용한다. for의 구조는 다음과 같다.

for <<variable>> in <<iterable>>:
<<contents>>

if 절과 같이 for 즉 반복적으로 행할 내용들은 for에 속하는 것임을 나타내기 위해서 indentation(들여쓰기)을 설정해둔다.
if 절과 같이 들여쓰기는 스페이스바 4번이나 탭 한번으로 통일하여 사용한다.
variable은 사용자가 임의로 변수를 설정해서 사용하는데 주로 i , j, k .... 순으로 사용하는게 일반적이다.
다음과 같이 iterable에 String 값을 넣으면 한 글자(char)씩 반복하며 진행한다.


Range

for 반복문을 사용할 때 iterable 부분에 list나 String 값을 넣어서 직접 값을 탐색하며 진행을 하기도 하지만 range를 사용해서 인덱스로 접근을 하기도 한다.
range는 range((start),stop,(step))으로 구성되어 있다. start(선택사항)부터 stop(필수적)까지 step(선택사항)씩 연속적인 정수 객체를 만들어 준다.


range 함수로 만들어진 값은 list와 비슷하게 작동을 하지만 range라는 객체를 가지고 있다. 따라서 list에 사용하는 메소드들을 사용하는 것은 불가능 하므로 사용하기 위해서는 list로 변환 후 사용해야 한다.



다음은 range 와 len 함수를 사용해서 인덱스로 배열값들을 접근하는 경우이다. iterable 자리에 list 나 String을 넣어서 직접 값에 접근을 하게 되면 하나의 배열만 반복문을 사용할 수 있지만 다음과 같이 range와 len을 사용하면 길이가 같은 두 개의 배열을 동시에 반복문을 사용할 수 있다.



enumerate

range에선 인덱스로 접근할 수 없다는 단점을 보완하기 위해서 인덱스와 값을 동시에 접근 할 수 있도록 해주는 함수이다.
enumerate(iterable)로 사용을 하며 인덱스와 값을 쌍으로 가지는 튜플값을 하나의 원소로 가지는 enumerate 객체로 반환을 한다.
enumerate((0,iterable[0]),(1,iterable[1]),.....)



이중 반복문

이중 반복문이란 반복문안에 반복문을 사용하는 것으로 주로 행렬을 나타내고자 할 때, 서로 연관있는 두 개의 반복가능한 객체를 동시에 사용하고자 할 때 사용한다.


위처럼 두 개의 반복문을 사용할 때 서로 각각의 variable을 사용해야 하며 first의 한 값당 second가 한 루틴씩 실행됨을 알 수 있다.


또한 들여쓰기에 따라서 실행되는 횟수가 달라지는데 print(i+"번째 중"+j+"번째")는 i와 j 둘다 속해있는 부분이라 총 9번 실행됨을 알 수 있지만

print("---------------")는 i에만 해당하는 부분이므로 3번만 실행됨을 알 수 있다.


While

while 반복문은 내가 얼마나 반복문을 사용해야 할지 정확히 모를 때 사용하거나 중복적인 인덱스 혹은 값을 접근해야 할 경우에 사용한다.


while의 구조는 다음과 같다.


while <<condition>>:

<<contents>>


while은 for와 달리 순차적으로 진행을 하지 않고 condition이 참인 경우에만 while 내의 내용을 반복한다. 이 말은 condition이 거짓이 될 때까지 계속 반복한다는 뜻이다. 따라서 처음에는 condition이 참이어야 while문이 실행이 되지만 contents를 진행하면서 condition이 거짓이 되도록 만들어야 한다. 그렇지 않으면 무한반복에 빠지게 된다. 만약 무한반복에 빠지게 된다면 ctrl+c 혹은 쥬피터를 사용한다면 위의 정지버튼을 누르면 된다.



아래는 탈출 조건이 없으므로 무한반복에 빠지게 된다.



반복문을 더 효율적으로 활용하기 위해서 break와 continue를 사용할 수 있다.


break

반복문 진행중에 이미 원하는 바를 이뤄서 뒤의 진행이 필요가 없을 수 있다. 따라서 더 효율적으로 사용하기 위해 반복문이 한참 진행중이라도 일정 조건을 만나면 반복문이 끝나게 만들어주는 것이 break다. 또한 while에서는 condition이 아직 참이라도 break를 만나면 반복문이 바로 끝내도록 할 수 있다.
break는 다음과 같이 사용한다.

continue

break는 일정 조건을 만나면 반복문을 깨뜨리지만 continue는 일정 조건에서만 반복문이 진행되지 않도록 한다. 반복문 내에서 continue를 만난다면 아직 반복문 내에 남은 내용이 있더라도 작동하지 않고 다음 값으로 넘어간다. continue는 다음과 같이 사용한다.


2019/01/29 - [Language/Python] - [Python 따라하기]1. Python 설치하기

2019/02/05 - [Language/Python] - [Python 따라하기] 2. 자료형_part 1(String, Int,Float, List)

2019/02/12 - [Language/Python] - [Python 따라하기]3. 자료형_part2(Tuple,Set,Dictionary)

Bool Type

Bool Type은 이전에 소개했던 자료형처럼 참과 거짓을 나타내는 자료형이다.

Bool Type은 Boolean이라고도 부르며 True와 False 두개의 값만을 가진다. 또한 Boolean 연산자로는 and, or, not 이 있다.


not은 부정 연산자로 True면 False를 False이면 True를 리턴한다. 


and는 전부 참일 경우에만 True를 리턴하고 하나의 False만 있어도 False를 리턴한다.


or은 전부 거짓일 경우에만 False를 리턴하고 하나의 True만 있어도 True를 리턴한다.



Relation Operators(관계 연산자)

관계 연산자란 흔히 알고 있는 > , < , >=, 등을 일컫는다. 연산자의 리턴 값은 Bool이다.


관계 연산자 중 '같다' 가 수학에서 사용하는 기호와는 다르다는 점을 주의해야 한다. 수학에서는 ' = '이 '같다' 라는 의미를 가지고 있지만 프로그래밍 언어에서는 '변수에 값을 대입을 한다.' 라는 의미로 사용한다. 따라서 프로그래밍 언어에서 '같다' 라는 관계 연산자를 사용하고자 하면 '=='를 사용해야 한다.



관계 연산자는 숫자 값들에서만 사용할 수 있는 것이 아닌 String에서도 사용이 가능하다. 그 이유는 컴퓨터에서는 String을 표현하기 위해서 Ascii 코드를 사용하기 때문이다. Ascii 코드는 문자열이나 특수문자를 숫자로 변환한 코드로 미리 정해져 있다. Ascii 코드표는 구글에서 검색을 한다면 쉽게 얻을 수 있다.


If Statement(조건문)

if 절은 다음과 같이 구성되어 있다.

if <<condition>>:
contents

condition의 내용이 True 이면 contents의 내용을 수행하고 False이면 contents 내용을 수행하지 않고 넘어간다.
if에 속해있는 내용이라는 점을 구별하기 위해서 들여쓰기(indentation)를 사용한다. Python에서는 이 들여쓰기는 스페이스바 4번 혹은 tab키 1번으로 통일하여 사용하는데 자신이 편한 방향으로 통일하여 사용하면 된다. 같은 if 절에 속하는 내용이면 모든 content에 들여쓰기를 사용해야 하며 들여쓰기가 끝나는 지점부터는 if절에 속하지 않는 부분으로 판단하게 된다.
다음은 조건문을 사용한 간단한 예시이다.

input() 함수는 사용자가 직접 변수값을 입력하도록 하는 함수이다. 반환값은 항상 string이다. ()안에 다음과 같이 글귀를 넣으면 다음과 같이 글귀를 print 하면서 변수값을 받을 수 있다.


조건문에는 if 이외에도 else와 elif가 존재한다.


else는 해석 그대로 나머지를 뜻한다. if 절에서 if에 있는 조건문 이외의 모든 부분들을 수행한다. 다음과 같은 예시에서는 13세 이상 65세 미만의 경우에는 if절에 해당하는 조건이지만 그 외에의 나이 즉 13세 미만 65세 이상의 나이들은 else 절에 들어가게 된다.



하지만 어떤 경우에는 같은 변수에 대해서 여러 개의 조건을 취하고 싶은 경우도 있을 것이다. 그럴 경우 if를 여러 개 사용하여 조건문을 만들어도 상관이 없지만 다음과 같이 elif를 사용하면 간단하게 줄일 수 있다. elif란 else if 의 줄임말으로 if에 해당하지 않는 조건 중에 추가 조건을 걸어주는 것이다. 다음과 같이 elif를 사용하면 elif에 해당하는 조건으로 들어가게 된다.



else나 elif는 생략해도 무관하기 때문에 작성하지 않아도 괜찮지만 if절은 사용하면 무조건 contents에 하나의 코드라도 작성을 해야한다


만약 일부 조건에 대해서 아무런 조치를 취하지 않고 싶을 경우에는 pass 라는 사용하면 된다. pass는 말 그대로 코드를 실행하지 않고 넘긴다는 뜻이다.



2019/01/12 - [Language/Python] - [Python 따라하기]1. Python 설치하기


2019/01/21 - [Language/Python] - [Python 따라하기] 2. 자료형_part 1(String, Int,Float, List)


Tuple형

튜플은 값을 변경시킬 수 없다는 점을 제외하고는 리스트와 동일하다. 여기서 '값을 변경시킬 수 없다'라는 것은 값을 수정, 변경, 삭제를 할 수 없다는 것이다.


리스트와 동일하게 인덱싱과 슬라이싱을 할 수 있지만 값을 변경시키는 것은 불가능하다.



리스트와 같이 덧셈과 곱셈의 사칙연산을 지원한다.



 Tuple 자료형은 값을 변경시킬 수 없다는 점이 가장 큰 특징이며, 이 점을 이용해서 값이 변하면 안되는 것, 혹은 잘 변하지 않는 값을 사용하는 경우에 사용한다.


Set(집합형)

Set은 집합 자료형으로 집합에 관련된 연산을 지원해준다. set() 연산자를 이용하거나 {}를 사용해서 집합 자료형을 사용하며 2가지의 큰 특징이 있다.

1.순서가 없다

2.중복이 없다.


 '순서가 없다'라는 특징은 위의 Hello 와 같이 set으로 자료형을 변환하면서 각 글자의 위치가 달라졌다는 것을 의미한다. 따라서 '순서가 있다' 라는 특징을 가지는 리스트와 튜플과 달리 인덱싱과 슬라이싱 기능을 사용할 수 없다.


'중복이 없다'라는 특징은 Hello 두 개의 l 이 있지만 set 자료형에서는 하나의 l 만 있는 것을 확인 할 수 있다. 따라서 이 점을 이용해서 다른 자료형의 중복을 제거하기 위해 사용한다.


집합 사칙연산

집합 자료형이므로 교집합, 합집합, 차집합과 같은 연산을 지원한다.

교집합

두 집합 사이의 공통된 요소를 반환한다. & 를 사용하거나 intersection()을 사용한다.

합집합

두 집합을 합치는 작업을 수행한다. | (shift + \ )을 사용하거나 union()을 사용한다.

차집합

두 집합의 차를 수행한다. - 연산자를 사용한다.


내장함수

값 추가하기

하나의 값을 추가할 경우 add()를 사용하고 여러 값을 추가해야 할 경우 update()를 사용한다.

값 제거하기

값을 제거하고 싶을 경우 remove를 사용하면 된다.


Dictionary

Dictionary 자료형은 key 값과 value 값으로 구분되어져 있다. 즉 과일에 대한 dict 자료형이라고 하면 사과의 갯수 4개, 바나나의 갯수 5개...와 같이 대응 관계를 가지고 있는 자료형이다. 이와 같은 자료형을 다른 프로그래밍 언어에서는 해쉬(Hash)라고 부른다. 다음과 같이 사용하며 상당부분 set과 비슷한 성질을 가지고 있다.



일반 적으로 key에는 변하지 않는 값을 value에는 변하는 값을 넣도록 한다.

딕셔너리 자료형에 값은 다음과 같이 추가 및 제거를 한다.


딕셔너리도 set과 같은 성질을 가지고 있기 때문에 숫자로 인덱싱과 슬라이싱을 할 수 없다. 대신 key 값을 통해서 value 값에 접근 할 수 있다.


또한 중복을 허용하지 않으므로 같은 key 값은 존재할 수 없다.



내장 함수

key 리스트 만들기

keys()는 딕셔너리의 key 값들만 모아서 리스트로 반환을 한다. 이 때 우리가 알고 있는 list 자료형이 아닌 dict_keys라는 객체로 반환하는데 리스트와 동일하게 반복문에서 사용할 수 있다. 이를 리스트로 만들고자 하면 list()함수를 사용하도록 한다.


value 리스트 만들기

values()는 딕셔너리의 value 값들만 모아서 리스트로 반환을 한다. keys()와 마찬가지로 dict_values로 반환을 하고 동일하게 사용한다.

item 리스트 만들기

items()는 딕셔너리의 쌍들을 모아서 tuple로 묶어 리스트로 반환을 한다. keys()와 마찬가지로 dict_items로 반환을 하고 동일하게 사용한다.


2019/01/12 - [Language/Python] - [Python 따라하기]1. Python 설치하기


서론:


 Python을 배우기에 앞서서 Python의 자료형들에 대해서 알아야 한다. 영어를 배우려면 알파벳을 먼저 알아야 하는 것처럼 프로그래밍 언어를 배우기 위해서는 자료형을 우선 알고 시작하는 것이 중요하기 때문이다. Python의 자료형들은 비교적 단순해서 이해하기 쉬운 편이다.

String(문자열)


 String(문자열)은 문자나 단어로 구성되어 있는 자료형이다. 다른 프로그래밍 언어에서는 " "로 둘러싸이면 string ' '로 둘러싸이면 char로 표현되는 것과는 달리 Python에서는 " ", ' ' 상관 없이 둘다 string으로 표현이 된다.


따라서 숫자를 " "나 ' '로 묶으면 int형이 아닌 string이 된다.



만약 장문의 글을 쓰게 되어서 여러 줄을 표현을 해야 하거나, 글 중에 인용구등이 포함이 되어 있는 글이라 " "와 ' ' 를 섞어서 사용해야 할 경우가 있다. 

그럴 경우 다음과 같이 작성을 하면 된다.



다른 자료형을 str()함수를 사용해서 문자열로 바꿀 수 있다.


문자열 연산


문자열은 다음과 같이 더하기와 곱셈 연산을 지원한다.


문자열 인덱싱과 슬라이싱


문자열의 인덱싱과 슬라이싱을 이용하면 문자열의 일부분만을 불러 낼 수 있고, 인덱싱과 슬라이싱은 반복 가능한 개체에서는 모두 사용가능하다.
인덱싱과 슬라이싱은 다음과 같이 사용한다.



m은 ' 를 포함하여 세번째 글자이지만 2로 인덱싱을 해야 접근 할 수 있다.

그 이유는 파이썬은 0부터 숫자를 세기 때문이다. 이 말은 문자열의 첫 번째 글자의 위치가 1이 아닌 0이라는 뜻이다. 따라서 맨 끝의 인덱스로 접근 하기 위해서는 문자열의 길이로 접근 하는 것이 아닌 문자열의 길이-1 로 접근을 해야한다. 문자열의 길이를 구하기 위해서 내장함수 len()을 사용하도록 한다.



만약 길이보다 더 큰 값을 넣거나 음수(-) 값으로 인덱싱을 하면 어떻게 될까??



길이보다 더 큰 값을 넣으면 IndexError가 발생하지만 음수(-)는 오류가 발생하지 않았다. a[-1]은 a[len(a)-1]과 같은 값을 얻었는데, 그 이유는 음수(-)에선 맨 끝에서부터 다시 인덱싱을 할 수 있기 때문이다. 하지만 음수값도 길이 이상을 벗어난다면 IndexError가 발생한다.


문자열 내장함수

문자 개수 세기(count)

문자열 내 한 글자나 구절이 몇개가 있는지 확인 할 수 있는 함수이다.


문자 위치 찾기(1번)

 찾는 문자의 인덱스를 반환해주며, 만약 존재하지 않는 문자를 찾는다면 오류가 발생한다.


문자 위치 찾기(2번)

내장 함수 index와 같은 역할을 하지만 index와 달리 존재하지 않는 문자를 찾으면 오류가 아닌 -1을 리턴한다.


문자 구성 확인하기

isdigit은 문자열이 숫자로만 구성되어 있는가 확인해주는 함수이며, 숫자로만 구성 되어 있으면 True, 하나라도 문자가 있으면 False이다.
isalph는 isdigit과 반대로 문자로만 구성되어있는지 확인해주는 함수이다.

대소문자 변환하기

capitalize는 문자열의 첫 글자를 대문자로 만들어 주는 함수다.
islower는 문자열이 소문자로만 구성되어 있는지 확인하는 함수이며, 맞으면 True 아니면 False를 리턴한다.
isupper는 문자열이 대문자로만 구성되어 있는지 확인하는 함수이며, 맞으면 True 아니면 False를 리턴한다.
upper는 문자열 전체를 대문자로 만드는 함수이고, lower는 문자열 전체를 소문자로 만드는 함수이다.
swapcase는 대문자를 소문자로 소문자를 대문자로 만드는 함수이다.


문자열 분리하기

str.split(sep)으로 사용하며 str을 sep으로 분리하는 함수이다. 보통 " " 공백(띄어쓰기)를 기준으로 분리를 한다. 받는 변수가 없으면 리스트 값으로 분리를 한다.

문자열 붙이기

str.join(iterable) join은 반복가능(iterable)한 자료 사이에 str 값을 넣어주는 함수이다. 하지만 보통 str부분에 ""을 넣어서 문자열을 붙여주는 용도로 사용한다.



Int,Float(정수형, 실수형)

 int는 정수형(integer)를 뜻하고 Float는 소수점이 포함이 된 숫자(Floating-point)를 뜻한다.



Float 형으로 변환하기 위해서는 float()를 사용하고, int형으로 변환하기 위해서 int()를 사용한다. 소주점이 포함된 숫자에 int()를 사용하면 소수점 부분을 버린다.



사칙연산

숫자형과 평소에 알고 있는 연산자( +, - ,* ,/)를 사용해서 사칙연산을 할 수 있다.




 이 외에도 제곱(**), 나머지(%), 몫(//)을 수행하는 사칙 연산이 있다.



Python에서는 사칙연산을 축약하여 사용할 수 있으며, 내장함수나 라이브러리를 통해서 많은 연산을 지원해준다.


위의 사칙 연산을 다음과 같이 축약 할 수 있다.


round(반올림)

round(numbers,ndigits)로 사용 한다. 수(number)를 소숫점 ndigits번째 자리까지 나타내도록 ndigits + 1 번째에서 반올림을 하는 함수이다. ndigits의 고정값(default)은 0으로 고정되어있다.

하지만 .5 와 같은 경우에는 일반적으로 알고 있는 반올림 연산을 따르지 않는 경우가 생기는데, 그 이유는 컴퓨터에서 소숫점을 표현하는 방식 때문이다.
(ex 4.5 == 4.44444444449와 같이 표현이 되기 때문)


pow(제곱)

pow(x,y,z)로 사용을 한다. (x**y)%z 와 같은 연산을 한다. z의 고정값(default) 값이 None으로 되어 있어 값을 주지 않으면 나머지 연산은 하지 않는다.

import math

다음은 수학연산을 지원하는 내장 라이브러리인 math이다. import math로 불러오며 다양한 수학 연산을 지원한다. 연산자는 다음 링크에서 확인 할 수 있다.


List(배열)

List는 배열 자료형이며 여러 개의 자료형을 담는 역할을 한다. List는 다음과 같이 표현이 되며 문자열(string)과 같이 인덱싱과 슬라이싱이 가능하다


List 안에 List를 사용하는 것을 2중 배열문이라고 하는데 행렬을 표현하고자 할 때 주로 많이 사용한다. 2중 배열문은 다음과 같이 인덱싱을 한다.



List 역시 string과 동일하게 덧셈과 곱셈 연산을 지원한다.



List는 String과 비슷한 기능을 지원하지만 값을 수정 할 수 있다는 점은 다르다.


리스트 내장함수

요소 값 추가하기(1)

list.append(x)를 사용하면 list에 x의 값을 list의 끝에 추가하는 작업을 수행한다.

요소 값 추가하기(2)

append는 항상 list의 맨 끝에 넣는다는 점을 보완하기 위해서 사용한다. insert(a,b)는 a번째 위치에 b를 넣는 작업을 수행한다.

요소 값 제거하기(1)

list.pop()을 사용하면 list의 끝 값을 제거하는 작업을 수행하며, .pop(a)로 사용하면 list의 a번째 위치의 값을 제거한다.

요소 값 제거하기(2)

list.remove(x)를 사용하면 첫 번 째로 나오는 x의 값을 제거하는 작업을 수행한다.

요소 값 정렬하기(1)

list.sort()를 사용하면 list를 오름차순으로 정렬한다.

요소 값 정렬하기(2)

sorted(iterable,key=None,reverse=False)는 정렬함수이면서 다양한 기능을 제공한다. sort()는 리스트 자체를 정렬시키면서 반환값이 없지만, sorted는 반환값으로 제공하기 때문에 정렬 전의 상태와 정렬 후의 상태가 동시에 필요할 때 사용한다. 또한 reverse=True로 조건을 켜두면 오름차순이 아닌 내림차순으로 정렬을 하며 key 값을 넣어주면 key를 기준으로 정렬을 한다.

요소 값 뒤집기

reverse는 리스트 전체를 뒤집는 작업을 한다. 내림차순으로 정렬을 하는 것이 아닌 단순히 리스트를 뒤집는 일만 한다.

요소 값 위치 찾기

index(x,a,b)를 사용하면 list 내 a이상 b미만의 인덱스에서 x가 처음 나타는 위치 값을 반환한다. 고정값으로 a는 시작점으로, b는 마지막 점으로 설정 되어 있다.

요소 값 세기

count(x)를 사용하면 list 내 x의 갯수를 세서 반환을 해준다.


프로그래밍 언어를 처음 배우려는 사람에게 추천하는 언어가 Python이다. 그 이유는 Python은 문법이 쉬워서 빠르게 배울수 있기 때문이다.

Python의 문법 자체가 간결하며 이해하기 쉽다. 따라서 독학으로도 충분히 Python을 공부할 수 있다.

 필자도 Python을 독학으로 공부를 하였고 다른 사람들에게 조금이라도 도움이 되고자 Python을 독학으로 공부를 했을 때 작성했던 Python 정리 노트를 [Python 따라하기]로 정리해서 올리기로 하였다. 따라서 Python을 시작하기에 앞서서 Python을 설치하는 방법을 소개한다.


1. 공식 홈페이지에서 다운 받기  

 파이썬 공식 홈페이지인 https://www.python.org/downloads/windows/ 에 들어가서 가장 최신 버젼을 다운받아서 사용하면 된다. 작성일 기준 최신 버젼은 3.7.2 버전이며 대부분 Download Windows x86-64 executable installer를 선택해서 다운받으면 된다.






설치 파일을 실행하면 다음과 같은 화면에서 아래 항목을 다 체크한 뒤 [Install Now]를 누르면 바로 설치가 진행된다.



다음과 같이 시작프로그램에 추가되어 있으면 잘 설치 된 것 이다. 이 중 IDLE를 클릭해서 Python를 작성하면 된다.



IDLE를 클릭하면 다음과 같은 Shell 창을 얻게 되는데 이 Shell 창에서는 대화형으로 코드를 진행해 나갈수 있다.



File-New File을 누르면 다음과 같은 또 다른 에디터 모드 Shell 창을 얻을 수 있는데, 이 창에선 간단한 프로그램을 작성하려 할 때 사용하면 되고, 코드를 작성 한 뒤 F5 를 눌러서 코드를 진행시킬 수 있다.



하지만 더 복잡한 프로그램을 작성하기 위해서는 IDLE보다는 전문적인 에디터를 사용하는 것이 유용하다.


2. 파이참(PyCharm)

 파이참은 많은 사람들이 주로 사용하는 에디터로 자동 완성 기능이나, 문법 체크등 다양한 기능을 제공한다. 따라서 IDLE를 사용하기 보다는 파이참을 사용하는 것을 추천한다.
파이참은 http://www.jetbrains.com/pycharm/download/#section=windows 으로 들어가서 Community 버젼을 받아도 큰 문제가 없다.




3. Anaconda(Jupyter Notebook)

  Jupyter Notebook은 웹기반으로 실행되는 에디터로, 데이터 분석 패키지가 잘 적용 되어 있다. Jupyter Notebook은  Anaconda를 통해서 다운 받을 수 있다. https://www.anaconda.com/download/에 들어가서 자신에게 맞는 버젼을 찾아서 다운을 받으면 다음과 같이 시작프로그램에 추가되어있을 것이다.



그중 Jupyter Notebook을 클릭하면 Prompt창이 뜨고 잠시 기다리면 다음과 같은 창이 등장한다.



우측 상단에 New 를 클릭해 Python3를 클릭하면 코드를 작성할 수 있는 Notebook이 실행이 된다. 코드를 작성한 뒤에 Shift+Enter를 누르면 코드가 진행이 된다.








 앞으로 Jupyter Notebook을 이용해서 앞으로 내용을 진행할 예정이니, Jupyter Notebook의 대한 기능은 추후 기회가 될 때 조금씩 설명할 예정입니다. 



+ Recent posts