Light Tutorial Python
Studybee 2주차 스터디, 가볍게 보는 파이썬!!!
가볍게 파이썬에 대해서 공부하는 시간입니다~
**http://www.studybee.kr 에서 운영하는 '초심자를 위한 웹개발' 클래스에서 만드는 교재이며,
장고를 이용해 간단하게 블로그를 만드는 것을 목표로 하고 있습니다.
1. 1. Python Essential
이번에는 Python Language를 알아보겠습니다. 단 시간안에 공부하기란 결코 쉽지 않지만 가볍
게 보도록 하겠습니다.
단, Python이 처음이신 분은 모든 예제를 직접 작성해보시길 권합니다. 기억력은 비단 머리만 있
는 것이 아니라고 합니다. 모든 조직이 갖고 있다고 합니다. 그렇기 때문에 머리부터가 아니라 손
의 기억력을 활용하길 원합니다. 그래야 하루 빨리 프로그래밍에 대한 두려움을 떨쳐낼 수 있습니
다. 손은 알고 있습니다.
1.1 Python Basic
0) 실행 및 파일
[Figure 1. Python 실행 화면]
콘솔창의 아무 경로에 가서 python 을 입력하고 실행하면 됩니다.
1) 대화식 인터프리터
바로 위에 화면이 대화식 인터프리터 입니다. 대화를 나누듯이 코드를 맥락 단위로 실행할 수 있습
니다. 앞으로 자주 보게 될 화면입니다. 수시로 들어가서 맞게 코드를 작성했는지 테스트도 해볼
것입니다.
1
2. 2) 들여쓰기
파이썬의 가장 큰 특징이며 처음에 가장 익숙하지 않은 것이 들여쓰기로 맥락(Context)상 블록
(Block)을 구분합니다. 관례상 4칸의 스페이스를 두지만, 들여쓰기 칸 수는 마음대로 정하셔도 됩
니다.
you_are_here = True
if you_are_here:
print "Good Job!" # 들여쓰기 4칸 적용
3) Block의 시작은 콜론(:)
파이썬을 처음하는 사람들이 제일 짜증내(?)하는 부분입니다. Java와 같은 언어는 블록을 {, }으로
명확하게 처리하지만 파이썬에서는 단지 콜론(:)으로만 처리합니다.
you_are_here = True
if you_are_here: # 블록의 시작, 끝을 의미하는 기호는 없음
print "Good Job!"
print "and"
print "you are good."
4) 주석처리
파이썬의 주석처리는 아래와 같이 세 가지 방법이 있습니다. 개발자에게 주석처리 습관은 매우 중
요합니다. 소스를 나만 볼 것이 아니기 때문에 어떤 의도로 작성했는지 주석으로 말해줄 필요가 있
습니다.
1. Multiple Comment
1. Double Quotation
2. Single Quotation
2. Single Comment
1. # (Sharp)
"""
3. 너가 만약에
프로그램
"""
'''
만든 날짜: 2015년 07월 어느날
만든 사람: initialkommit
'''
you_are_here = True
# 너가 만약 여기 있다면 잘했다고 칭찬해라
if you_are_here:
print "Good Job!"
5) 변수
객체의 종류가 무엇이든 상관없이 = 를 사용해 선언해 사용합니다. Java처럼 변수명 앞에 데이터
타입을 선언해줄 필요도 없습니다.
you_are_here = True # 변수에 True값 할당
if you_are_here:
print "Good Job!"
6) 한글 사용
파이썬 파일(.py)에서 한글을 사용하기 위해서 두 가지를 유의하셔야 합니다.
1. 문서의 최상단에 입력(# coding: UTF-8)
2. 한글을 작성했을 때는 문자열 앞에 영문자 u를 입력해줍니다. unicode라는 뜻입니다.
# coding: UTF-8
you_are_here = True
if you_are_here:
print u"잘했어!"
4. 7) 0부터 시작
파이썬은 숫자를 샐 때 0부터 시작을 합니다. 참 컴퓨터스럽지요.
1.2 객체 지향 프로그래밍
1) 객체 지향 언어의 특징
파이썬은 객체 지향 언어입니다. 객체를 지향한다는 말에서 알 수 있듯이 모든 것을 객체화해 취급
합니다. 객체 지향 프로그램이라는 것은 공부하기가 쉽지 않습니다. 하지만 가장 중요한 것을 살펴
보면 아래와 같습니다.
1. 행동(Method or Function)이 있습니다.
2. 속성(Attribute)이 있습니다.
3. class를 통해 만들 수 있습니다.
4. 부모 class로 부터 Method와 Attribute를 상속(Inheritance) 받을 수 있습니다.
5. 상속받은 Method의 로직을 바꿀 수 있습니다.
6. 상속받은 Attribute의 데이터를 바꿀 수 있습니다.
무슨 말인지 모를 수 있습니다. 아래의 두 가지 생활 예를 살펴봅시다.
2) 붕어빵
1. 붕어빵을 판매하시는 분은 프로그래머입니다.
2. 붕어빵을 찍어내는 틀은 class입니다.
3. 붕어빵 틀인 class로부터 나온 붕어빵은 객체(혹은 인스턴스)입니다.
4. 붕어빵의 속성(Attribute)에는 재료=팥, 색깔=노랑이 있습니다.
5. 붕어빵의 행동(Method)에는 ‘한국어 하기’, ‘수영하기’가 있습니다.
6. 붕어빵의 속성은 변경이 가능합니다. 팥에서 아이스크림으로.
7. 붕어빵의 행동은 변경이 가능합니다. ‘한국어 하기’에서 ‘영어 하기’로.
3) 인간
1. 인간을 만든 조물주는 프로그래머입니다.
5. 2. 인간을 만든 원형은 class입니다.
3. 인간을 만든 원형인 class로부터 나온 인간은 객체(혹은 인스턴스)입니다.
4. 인간의 속성(Attribute)에는 나라=한국, 성별=남자가 있습니다.
5. 인간의 행동(Method)에는 ‘걷기’, ‘밥먹기’가 있습니다.
6. 인간의 속성은 변경이 가능합니다. 한국에서 미국으로.
7. 인간의 행동은 변경이 가능합니다. ‘걷기’에서 ‘뛰기’로.
4) 파이썬의 모든 것은 객체
파이썬의 모든 것은 객체입니다. 즉 행동과 속성이 있습니다. 변수, 숫자 상관없이 모든 것은 객체
이고 행동과 속을 가지고 있습니다. 뭔 말이냐구요? 아래를 실행해볼까요!?
dir("A")
dir(1)
dir()는 해당 객체가 갖고 있는 속성과 Method를 보여주는 함수입니다. 실행해보면 단지 문자와 숫
자였을 뿐인데 거기에는 다양한 것들이 있습니다. 이 특징을 잘 알고 있으면 Django도 쉽게 공부
할 수 있습니다.
1.3 데이터 타입
2
6. [Figure Python의 데이터 타입 개요 ]
1) 순서열(sequence) 객체 - 문자열
순서열(sequence)은 양의 정수로 색인(index)되도록 순서대로 객체들을 모아놓은 자료형입니
다. 문자열, 리스트(list), 튜플(tuple)이 순서열 자료형입니다.
str = "boys be ambitious"
print str[1] # Indexing(색인, 선택하기)
print str[1:3] # Slicing(추출하기)
문자열 객체는 색인(index)되도록 순서대로 객체들이 모아져 있는 자료형이기 떄문에 아래 예제도
가능합니다.
str = "boys be ambitious"
# for 반복문
for seq in str:
print seq
for 반복문을 아직 공부하진 않았지만 잠시 살펴보겠습니다. str이라는 객체는 색인되도록 순서대
로 객체들을 모아놓은 자료형이기 때문에 for 반복문에서 str이라는 객체에서 색인된 객체 b, o, y,
s, … 하나 하나를 가져와 seq라는 변수에 할당하고 이를 출력하는 것입니다.
3
7. 단순히 문자열이라고 생각하면 절대 안됩니다.
2) 리스트(list)/튜플(tuple) 객체
이 둘은 거의 동일합니다. 문자열은 각 방(room)에 문자만 들어간다면, 리스트나 튜플은 각 방에
어떤 객체든지 담습니다. Java같은 언어에서 배열이랑 같다고 보시면 됩니다.
리스트와 튜플의 차이점은, 리스트는 변경 가능한(mutable) 자료형이고 튜플은 불변(immutable)
자료형이라는 점입니다. 그외엔 동일합니다.
파이썬에서는 Trailing comma(,)라는 것이 있습니다. 아래 예제처럼 아이템 나열이 끝났는데도
comma(,)로 마무리하는 것이 가능합니다. 안붙여도 되긴 하지만 어느 때는 trailing comma(,)를
붙여야 실행이 될 때가 있으니 관례상 comma(,)를 붙이는 게 좋습니다.
listvar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ]
tuplevar = (1, 2, 3, 4, 5, 6, )
print listvar[:2] # 0부터 2앞까지 추출하기
print tuplevar[1:-2] # 1부터 뒤에서 -2앞까지 추출하기
# 중첩 리스트
listA = ['a', 'b', 'c', ]
listB = [listA, '2', '3', ]
print listB[0][1]
3) 사전(dict) 객체
{'key1': 'value1', 'key2': 'value2'}
위와 같이 중괄호로 묵고 그 안에 Key: Value 쌍이 모인 객체를 사전 객체라고 합니다. 사전 객체
도 리스트나 튜플처럼 다양한 객체를 묶어냅니다. 다만, 순서대로(sequential) 객체를 나열해 담지
않고, 각 방(room)에 접근하는 별도 구분자(key)가 있어서 이 구분자로 각 방에 접근합니다.
순서열과 마찬가지로 대괄호 안에 접근할 방 구분자를 넣어 색인 및 추출을 할 수 있습니다. 순서
열은 색인 정수를 넣고, 사전은 키를 넣습니다.
dictvar = {"one": 1, "two": 3}
8. print dictvar['one']
print dictvar['two']
dictvar['two'] = 2 # 값 수정
print dictvar['two']
# 중첩 구조
dictvar["three"] = {'math': 100, 'english':90} # 새로운 아이템 삽입
print dictvar
print dictvar["three"]["english"] # 중첩 구조 접근 방법
del dictvar["two"] # 사전형 객체 내 아이템 지우기
1.4 객체 메소드
1) 객체 타입 확인하기
객체는 메소드(행동)와 속성을 가지고 있습니다. 속성이라는 단어는 멤버 변수라고도 부릅니다.
해당 객체가 어떤 메소드를 가지고 있는지 파악하기 전에 먼저 객체가 어떤 데이터 타입인지 알아
보겠습니다. 아래와 같이 type()이라는 함수로 알아볼 수 있습니다.
type(객체명)
2) 객체 메소드 확인하기
해당 객체가 가지고 있는 메소드와 속성들에는 무엇이 있는 지 알아보는 명령어는 아래와 같습니
다.
dir(객체명)
3) 객체의 메소드 사용법
9. 아래와 같이 점()으로 메소드 또는 속성에 접근할 수 있습니다.
객체.메소드
4) 문자열 객체의 메소드
아래와 같이 아무 문자열이나 검색해보면 알 수 있습니다.
dir("studybee")
많은 메소드 중에는 이상하게 _(underbar) 2개로 시작하는 메소드도 있습니다. 이런 메소드는 지
금은 볼 필요가 없고 나중에 더 깊게 배울 때 조금씩 보면 좋을 거 같습니다. 이런 메소드 중에는
Operator Overloading이라는 것이 있는데 이는 연산자(+, -, /와 같은)들을 만날 때 자동으로 수행
하는 메소드도 있습니다. (ex. __add__())
많은 메소드를 가지고 있지만 자주 쓰이는 문자열 메소드를 보겠습니다.
메소드 설명
startswith(suffix,[start],
[end])
지정한 문자열(suffix)로 시작하는지 검사. start와 end는 위
치값
endswith(suffix,[start].[end]) 지정한 문자열(suffix)로 끝나는지 검사. start와 end는 위치
값
join(순서열객체) 문자열을 분리자로 하여 순서열 항목을 이어 붙임
lower() 문자열을 소문자로 바꿈
upper() 문자열을 대문자로 바꿈
strip() 문자열의 앞뒤에 있는 공백 문자 제거
split([sep, [maxsplit]]) 문자열을 지정한 구분자(sep)로 분할, maxsplit은 최대분할횟
수
replace(old, new) 대상 문자열(old)을 대체할 문자열(new)로 바꿈
str = "studybee"
print str.startswith("s")
10. str = "study-bee"
print str.replace("-", "")
str="real-python"
print str.split("-")
5) 리스트/튜플 객체의 메소드
메소드 설명
append(item) 리스트의 끝에 새로운 item 추가
count(str) 리스트나 튜플에서 str의 갯수를 변환
pop([i]) 리스트의 지정한 색인(i)에 있는 아이템을 반환하고 제거. 색인이 지정되지 않
으면 가장 마지막 아이템이 대상.
remove(str) 리스트에서 str을 찾아 제거하고 따로 반환하지는 않음
리스트와 튜플의 차이점은 수정 가능하냐, 가능하지 않느냐임을 명심하면 좋겠습니다.
lst = []
for item in range(4): # range라는 함수는 파이썬 내장 함수
lst.append(item)
print lst
str = "study-bee"
lst = []
for seq in str.split("-"):
lst.append(seq)
print lst
11. 6) 사전형 객체의 메소드
메소드 설명
clear() 사전 객체의 모든 항목 제거
copy() 사전 객체의 사본 생성
has_key(key) 지정한 key가 있는지 검사
get(key, [value]) key의 value을 반환, 없으면 지정한 별도의 value값 반환
keys() 사전 객체의 모든 key를 순서열로 변환
values() 사전 객체의 모든 value를 순서열로 변환
items() 사전 객체의 모든 항목을 (key, value) 형태로 변환
uid="studybee"
passwd="12345"
customer_info = {"studybee": "12345"}
if uid in customer_info.keys():
if customer_info[uid] == passwd:
print "Log In"
else:
print "Wrong Password"
else:
print "ID is Not Found"
# coding: UTF-8
posting = {"id": 1, "title": "blah blah", "views": 300}
author = posting.get('authour', 'studybee')
if not author.startswith("s"):
print u"s로 시작하지 않는군요."
else:
print u"s로 시작하는군요."
12. 1.5 조건문
분기문이라고도 합니다. 이는 논리적 사고를 표현하는데 유용합니다. 사용법은 간단합니다. 아래
와 같습니다.
if condition1:
statement1
elif condition2:
statement2
elif conditionN:
statementN
.
.
else:
last statement
1.6 반복문
반복문은 논리적 구조에 있어서 반복적으로 실행할 필요가 있을 때 쓰입니다. 두 가지가 있습니다.
1. for 반복문
2. while 반복문
for item in items:
items 의 값을 하나씩 꺼내 item 에 assign 하며 모든 항목 반복
continue
이번 수행을 하지 않고 다음으로 이동한다.
break
loop를 빠져나간다.
for 반복문으로 반복처리를 하다가 특정 조건을 만났을 때 continue를 통해 다음문으로 이동할 수
도 있고 break를 통해 반복문을 빠져나올 수도 있습니다.
items = "initialkommit@gmail.com"
13. for item in items:
if item == "@":
break
print item.upper(),
1.7 함수
함수는 판도라의 상자와 같습니다. 특정 Input이 특정 Output으로 나오는데 그 과정을 다른 이들
은 모르는 것입니다. 여기서 input은 함수의 인자값(Argument or Parameter)라고 하고 Output
은 함수의 반환값이라고 합니다.
1) 내장 함수
파이썬에는 이미 몇 가지 함수를 만들어 제공해주고 있습니다. 이를 내장 함수(Built-in Function)
이라고 합니다. 자세한 건 공식문서를 참고하시길 바라고, 여기서는 간단히 몇 개만 소개하겠습니
다.
내장 함수 설명
len(객체) 객체 내 항목 개수, ex) len([1,2,3]) -> 3개
any(객체) or와 같음, 한 개라도 참이면 참, 한 개라도 빈 값이 있으면 False
all(객체) and와 같음, 모두 값이 있거나, 모두 빈 값이어야 True
int(객체) 객체를 Integer 형태로 바꿈
str(객체) 객체를 String 형태로 바꿈
max(객체1, 객체2) 객체를 비교하여 큰 것을 반환
min(객체1, 객체2) 객체를 비교하여 작은 것을 반환
2) 함수 만들기
파이썬에서 함수는 실행(호출)가능한 객체(Callable Object)라고 합니다. 왜냐면 파이썬의 모든 것
14. 은 객체이기 때문이지요. 형태는 아래와 같습니다. 함수명 앞에 def 라는 예약어를 사용합니다.
def hihello(name, country="Korea"):
print "Hi, " + name
print "Hello, " + country
return name + "-" + country
print hihello("initialkommit")
위에서 보듯이 함수는 호출을 해야 실행을 합니다. 함수는 인자값으로 2개가 있는데 막상 호출할
때는 한 개만 넣었습니다. 이는 그 한 개의 값이 name이 되고 county는 인자값으로 넣어주지 않았
음에도 작동하는 이뉴는 default값으로 “Korea”를 선언해줬기 때문입니다.
그리고 함수는 반환값이 있을 수도 있고 없을 수도 있습니다. 만약 반환을 해야한다면 return이라
는 명령어를 사용합니다.
1.8 클래스
Class는 객체 지향 프로그래밍을 구현하는 역할을 합니다. 붕어빵 장사하시는 사장님이 붕어빵을
만들어내듯 우리 개발자는 한 개의 틀만으로 여러 개의 객체를 만들어낼 수 있습니다. 형식은 아래
와 같습니다.
class 클래스명(상속받아올 부모 클래스):
멤버변수1 = 값1
멤버젼수2 = 값2
def 메소드명(self):
pass
객체1 = 클래스명()
객체2 = 클래스명()
위와 같이 만든 클래스를 통해서 객체 혹은 인스턴스를 만들 수 있습니다. 객체와 인스턴스는 동일
한 말입니다. 객체에는 메소드와 속성을 가질 수 있다고 했습니다. 위에서 봐서 알 수 있듯이 속성
(멤버변수라고도 합니다.)과 메소드가 있는 것을 볼 수 있습니다.
클래스에서 부모 클르스로부터 상속받아 올 수도 있습니다. 이는 괄호에 상속받아올 부모 클래스
를 적어주면 됩니다.
15. 만든 메소드의 괄호 안에 self라는 것이 있습니다. 이는 인스턴스를 만들 때 해당 인스턴스를 통해
서 실행하는 메소드를 의미합니다. 이 부분은 어려우니 나중에 설명하도록 하겠습니다.
위와 같이 하나의 클래스로부터 여러 개의 객체를 만들 수도 있습니다.
클래스는 부분은 우선 짧게 여기까지만 보고 넘어가겠습니다.
2. Python Example
아래 예제 문제를 풀면서 파이썬 프로그래밍에 더 친숙해져보는 시간을 갖겠습니다. 어려운 수준
은 아닙니다.
2.1 메르스 조심! camelCase를 잡자!
메르스가 창궐했습니다. IT 세계에서도 낙타를 조심해야합니다. 변수 Naming 방법 중에
camelCase라는 것이 있습니다. varName, numAge 처럼 중간 단어 혹은 키워드의 첫 글자만 대
문자로 하는 방법입니다. 물론 메르스는 쌍봉낙타의 경우에만 발생한다고 하지만, 우선 우리는
camelCase의 중간에 튀어나온 대문자를 찾아내 소문자로 바꿔봅시다.
http://bit.ly/1HSrGQe
2.2 Hashtag를 추출해 list에 담기
Instagram, Twitter 등 우리에게 친숙한 SNS에는 #를 붙인 해쉬 태그 개념이 있습니다. 해당
posting의 성격을 사용자의 자유에 맏기는 것입니다. 이 해쉬태그만을 추출해 데이터베이스에 저
장하는 경우가 많습니다. 우선 우리는 해쉬태그를 추출해 list에 담아보겠습니다.
http://bit.ly/1SdOrxu
16. 2.3 모스 암호 해독하기
모스 신호가 들어왔습니다. 이를 해석하는 프로그램을 만들어 봅시다.
http://bit.ly/1fuKLvj
3. Summary
이번 챕터에서는 파이썬 이라는 언어를 살펴보았습니다. 많은 내용을 보았지만 제일 중요한 것은
한 번은 직접 작성해서 실행해보는 것입니다. 그리고 어렵게 생각지 마시고 필요할 때 다시 본다는
마음으로 가져가면 좋을 것 같습니다.
Written by initialkommit@Study-Bee.
1. 파이썬 기본 부분은 차경묵님의 자료를 인용했습니다.
2. 파이썬 데이터 타입 부분은 차경묵님의 자료를 인용했습니다.
3. 파이썬 데이터 타입 개요 부분은 차경묵님의 자료를 인용했습니다.