파이썬 3일차

Programing/Python 2012. 5. 9. 18:34 |

공부 참조 싸이트 : http://codejob.co.kr/docs/view/2/

 

[1] if문

and, or, not

c++ 생각하면

and 는 &&

or   는 ||

not 는 !

이렇게 생각하면 된다.

 

 

x in s, x not in s


>>> 1 in [1, 2, 3]
True
>>> 1 not in [1, 2, 3]
False
다중 조건 문은 elif 로 사용된다.
>>> pocket = ['paper', 'handphone']
>>> watch = 1
>>> if 'money' in pocket:
...      print "택시를 타고가라"
... elif watch: 
... print "택시를 타고가라" ... else: ... print "걸어가라" ... 택시를 타고가라
 
 

pass의 사용


가끔 조건문을 판단하고 참 거짓에 따라 행동을 정의 할 때 아무런 일도 하지 않게끔 설정을 하고 싶을 때가 생기게 된다. 다음의 예를 보자.

 

"지갑에 돈이 있으면 가만히 있고 지갑에 돈이 없으면 시계를 끌러라“  


위의 예를 pass를 적용해서 구현해 보자.

>>> pocket = ['paper', 'money', 'handphone']
>>> if 'money' in pocket:
...     pass 
... else: ... print "시계를 끌른다" ...

pocket이라는 리스트 안에 'money'란 문자열이 있기 때문에 if문 다음문장인 pass가 수행되었고 아무런 결과값도 보여주지 않는 것을 확인 할 수 있다.

 
 

[2] while문

while문은 C++문법과 다른게 없어서 그냥 넘어간다.

 

 

[3] for문

for문의 기본구조


for 문의 기본적인 구조는 다음과 같다.

for 변수 in 리스트(또는 터플, 문자열):
    <수행할 문장1>
    <수행할 문장2>

 

>>> jaeho_for_List = ['f','u','a']

>>> for i in jaeho_for_List:

...    print i

...

f

u

a

 

C++에서 for each 문하고 비슷하다고 생각하면 이해가 된다.

 

 

range함수

 

>>> a = range(10) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  

>>> a = range(1, 11) >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

 

 

다양한 for문의 사용

>>> a = [(1,2), (3,4), (5,6)] 
>>> for (first, last) in a: 
. . .     print first + last 
. . . 
3 
7 
11

 

>>> for i in range(2,10): ... for j in range(1, 10): ... print i*j, ... print '\n' ... 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81

'Programing > Python' 카테고리의 다른 글

파이썬 5일차 - 1  (0) 2012.05.14
파이썬 4일차  (0) 2012.05.11
파이썬 2일차 - 1  (0) 2012.05.09
파이썬 2일차 - 2  (0) 2012.05.08
파이썬을 쉽게 사용하는 PyScripter 설치하기  (0) 2012.05.07
Posted by 부우산사나이
:

공부 참조 싸이트 : http://codejob.co.kr/docs/view/2/

 

 

[3] 리스트 (List)

여러 가지 리스트의 생김새를 살펴보면 다음과 같다.

>>> a = []
>>> b = [1, 2, 3]
>>> c = ['Life', 'is', 'too', 'short']
>>> d = [1, 2, 'Life', 'is']
>>> e = [1, 2, ['Life', 'is']]

a 처럼 리스트는 아무 것도 포함하지 않는 빈 리스트([])일 수도 있고 b처럼 숫자를 그 요소 값으로 가질 수도 있고, c처럼 문자열을 요소값으로 가질 수 있고 d처럼 숫자와 문자열을 함께 요소값으로 가질 수 있으며 또한 e처럼 리스트 자체를 그 요소 값으로 가질 수 도 있다. 즉, 리스트 내에는 어떠한 자료형도 포함시킬 수 있다.

 

>>> a = [1, 2, 3, ['a', 'b', 'c']]

>>> a[0]
1
>>> a[-1]
['a', 'b', 'c']
>>> a[3]
['a', 'b', 'c']

 

이차원으로 생각하면 편할듯!!

>>> a[-1][1]
'b'
>>> a[-1][2]
'c'

 

>>> a = [1, 2, ['a', 'b', ['Life', 'is']]]

삼차원으로 생각하면 편할듯!!

>>> a[2][2][0]
'Life'

 

 

리스트의 슬라이싱

>>> a = [1, 2, 3, 4, 5]
>>> a[0:2]
[1, 2]

어제 했던 문자열의 슬라이싱하고 사용방법이 똑같다.

 

 

리스트를 더하고(+) 반복하기(*)

 

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]

>>> a = [1, 2, 3]
>>> a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

 

리스트의 수정 변경과 삭제

수정

>>> a = [1, 2, 3]
>>> a[2] = 4
>>> a
[1, 2, 4]

 

>>> a[1:2]
[2]
>>> a[1:2] = ['a', 'b', 'c']
>>> a
[1, 'a', 'b', 'c', 4]

 

삭제

a[1, 'a', 'b', 'c', 4]

>>> a[1:3] = []
>>> a
[1, 'c', 4]

>>> a
[1, 'c', 4]
>>> del a[1]
>>> a
[1, 4]

 

>>> a[0] = []

>>> a[0]

[]

이렇게 배열 하나만에 [] 넣어주면 빈공간이 들어가게된다.

삭제가 안되고 삭제 할려고하면

>>>  a[0:1] = []

이 문법을 써야한다. 이게 헷갈리니 그냥

>>> del a[0]

이 문법을 사용하게 속 편할거 같다.

 

 

[참고] 초보가 범하기 쉬운 리스트 연산 오류
우선 다음과 같은 예를 먼저 만들어보자.
>>> a = [1, 2, 3]
>>> a[2] + "hi"
Traceback (innermost last):
File "", line 1, in ?
a[2] + "hi"
TypeError: number coercion failed
TypeError 에러가 발생했다. 에러의 원인은 무엇일까?

a[2]는 3이라는 정수인데 "hi"는 문자열이다.
두 값(정수와 문자열)을 더한다는 것은 상식적으로 맞지 않는 방법이다. 
그래서 Type 에러가 발생하는 것이다. 숫자와 문자열을 더할 수는 없다.

만약 숫자와 문자열을 더해서 '3hi'처럼 만들고 싶다면 숫자 3을 문자 '3'으로 바꾸어 주어야 한다.

그 방법에는 두 가지가 있다.

>>> str(a[2]) + "hi"
>>> `a[2]` + "hi"
첫 번째 방법은 str 함수로 정수를 문자열로 바꾸어 주는 방법이고
두 번째 방법은 (`) Back Quote 문자를 이용한 것인데, 위에서 Back Quote문자(`)는
str 함수를 사용한 것과 완전히 동일한 결과값을 돌려준다.

 

리스트 함수 설명

함수 설명
a.append(x) 리스트 a의 마지막에 x추가
a.sort() 리스트 a를 정렬
a.reverse() 리스트 a의 순서를 거꾸로 만든다.
a.index(x) 리스트 a에서 x를 찾아서 그 위치 반환
a.insert(i, x) 리스트 a에서 i 위치에 x 삽입
a.remove(x) 리스트 a에서 처음 나오는 x 삭제
a.pop() 리스트 a의 맨 마지막 요소 반환하고 마지막 요소 삭제
a.count(x) 리스트 a 안에 x가 몇 개 있는지를 반환
a.extend(x) 리스트 a에 리스트 x를 더함(확장)

 

 

a.sort()

 

a = [9, 2, [10, 9,2]]

a.sort()

이러면 에러남 다중 배열로 들어가면 에러 나는듯

하지만

a[2].sort()

는 성공!!!!!!

>>> a
[9, 2, [2, 9, 10]]

 

앞부분 소트 시키는 법은 연구 해봐야겠다...

a[0:2].sort()

이렇게 하면 될줄 알았는데 안되네~

 

[4] 터플 (tuple)

터플 또는 튜플이라고 부른다.


터플이란 리스트와 몇 가지 점을 제외하곤 모든 것이 동일하다. 그 다른 점은 다음과 같다.

  • 리스트는 '[' 과 ']' 으로 둘러싸지만 터플은 '('과 ')'으로 둘러싼다.
  • 리스트는 그 값을 생성, 삭제, 수정이 가능하지만 터플은 그 값을 변화시킬 수 없다.

나머지는 리스트사용하던 방식대로 사용하면 된다.

 

 

 

 

'Programing > Python' 카테고리의 다른 글

파이썬 4일차  (0) 2012.05.11
파이썬 3일차  (0) 2012.05.09
파이썬 2일차 - 2  (0) 2012.05.08
파이썬을 쉽게 사용하는 PyScripter 설치하기  (0) 2012.05.07
파이썬(Python) 설치 방법 3.2.2버전  (0) 2012.05.07
Posted by 부우산사나이
:

공부 참조 싸이트 : http://codejob.co.kr/docs/view/2/

 

[5] 딕셔너리 (Dictionary)

 

>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}

key value
name pey
phone 01199993323
birth 1118

딕셔너리는 키와 값이 한쌍으로 이루어진 자료구조이다.

>>> dic['name']

'pey'

이런식으로 나온다.

 

딕셔너리 주의사항

키 값은 절대 중복 하면 안된다.

이유는 키값으로 값을 찾고 싶을때 중복이 있으면 사용자가 원하는 값이 안나올수 있다.

파이썬은 중복 키값이 있으면 앞에 있는 값을 알려준다.

 

함수 설명
a.keys() 딕셔너리 a의 Key들을 모아놓은 리스트를 돌려준다.
a.values() 딕셔너리 a의 Value들을 모아놓은 리스트를 돌려준다.
a.items() 딕셔너리 a의 (Key, Value)쌍의 터플을 모아놓은 리스트를 돌려준다.
a.clear() 딕셔너리 a의 모든 Key:Value 쌍들을 삭제한다.
a.get(x) 딕셔너리 a의 Key가 x인 것의 Value를 돌려준다.
a.has_key(x) 딕셔너리 a에 x라는 Key가 있는지 조사하여 참, 거짓을 돌려준다.

 

>>> a.get('foo', 'bar')

겟은 이렇게 디폴트 값을 줄 수 있다. a 딕셔너리에 foo 키 값이 없으면  bar라는 값을 알려준다.

 

 

 

[6] 참과 거짓

자료형  참 or 거짓
"python"
"" 거짓
[1, 2, 3]
[] 거짓 
() 거짓
{} 거짓 
참 
거짓 
None 거짓 

[7] 변수

파이썬에서

a = 1

a = 'a'

a = "안녕'

a = 1.3

a 변수 선언할때 왜 자료형을 선언 안하는가 궁금했는데

개념이 a = 1할때 1이라는 정수 객체가 생성되고 a는 단순이 1이라는 객체 주소만 저장하는 방식이라서 변수 선언 할필요가

없었네. 마찮가지로 a = 'a'할때도 a라는 문자형 객체가 생성되고 a는 'a'문자형 객체 주소만 저장하는 원리

 

변수 없애기


3이라는 정수형 객체가 메모리에 생성된다고 했다. 그렇다면 이 값을 메모리에서 없앨 수 있을까? 3이라는 객체를 가리키는 변수들의 개수를 레퍼런스 카운트라 하였는데, 이 레퍼런스 카운트가 0이 되는 순간 3이라는 객체는 자동으로 사라진다. 즉 3이라는 객체를 가리키고 있는 것이 하나도 없을 때 이 3이라는 객체는 메모리에서 사라지게 되는 것이다. 이것을 또한 어려운 말로 쓰레기 수집 - 가비지 콜렉션(Garbage collection)이라고도 한다.


다음의 예는 특정한 객체를 가리키는 변수를 없애는 예를 보여준다.

>>> a = 3 
>>> b = 3
>>> del(a)
>>> del(b)

위의 예를 살펴보면 a와 b가 3이란 객체를 가리켰다가 del이란 파이썬 내장함수에 의해서 가리키는 변수 a, b가 사라지게 되고 따라서 레퍼런스 카운트가 0이 되어서 객체 3도 메모리에서 사라지게 된다.

 

이거 쉽게 이해할라면 C++에서 스마트포인트랑 원리가 같다고 생각하면 될 듯 싶다.

 

변수를 만드는 여러 가지 방법


방법 1)

>>> a, b = 'python', 'life'

방법 1처럼 터플로 a, b에 값을 대입할 수 있다. 이 방법은 아래 소개된 방법 2와 완전히 동일하다.


방법 2)

>>> (a, b) = ('python', 'life')

방법 1과 방법 2는 사실상 같다. 터플 부분에서도 언급했지만 터플은 괄호를 생략해도 된다.


방법 3)

>>> [a,b] = ['python', 'life']

방법 3처럼 리스트로 만들 수도 있다.


방법 4)

>>> a = b = 'python'

여러 개의 변수에 같은 값을 대입할 수도 있다.

 

 

리스트 복사


여기서는 리스트라는 자료형에서 가장 혼동하기 쉬운 부분을 설명하려고 한다. 예를 보며 알아보도록 하자.

>>> a = [1,2,3]
>>> b = a
>>> a[1] = 4
>>> a 
[1, 4, 3]
>>> b
[1, 4, 3]

위의 예를 유심히 살펴보면 b라는 변수에 a가 가리키는 리스트를 대입하였다. 그런 다음, a 리스트의 a[1]을 4라는 값으로 바꾸었을 때, a리스트만이 바뀌는 것이 아니라 b리스트도 똑같이 바뀌게 된다. 그 이유는 a, b 모두 같은 리스트인 [1, 2, 3]을 가리키고 있었기 때문이다. a, b는 이름만 다를 뿐이지 완전히 동일한 리스트를 가리키고 있는 변수이다.

그렇다면 b 변수를 생성할 때 a와 같은 값을 가지면서 a 가 가리키는 리스트와는 다른 리스트를 가리키게 하는 방법은 없을까? 다음의 두 가지 방법이 있다.


방법 1) [:] 이용

 

첫 번째 방법으로는 아래와 같이 리스트 전체를 가리키는 [:]을 이용하는 것이다.

>>> a = [1, 2, 3] 
>>> b = a[:]
>>> a[1] = 4
>>> a[1, 4, 3]
>>> b[1, 2, 3]

위의 예에서 보듯이 a 리스트 값을 변형하더라도 b리스트에는 영향을 끼치지 않음을 볼수 있다.


방법 2) copy 모듈 이용

 

두 번째 방법은 copy 모듈을 이용하는 방법이다. 다음의 예제에서 보면 from copy import copy라는 처음 보는 형태가 나오는데 이것은 2장의 모듈 부분에서 자세히 다루게 된다. 여기서는 단순히 copy라는 함수를 쓰기 위해서 사용되는 것이라고만 알아두자.

>>> from copy import copy 
>>> b = copy(a)

위의 예 b = copy(a) 는 b = a[:]과 동일하다.


두 변수가 같은 값을 가지면서 다른 객체를 제대로 생성했는 지를 확인하려면 다음과 같이 하면 된다. 즉, is 함수를 이용한다. 이 함수는 서로 동일한 객체인지 아닌지에 대한 판단을 하여 참과 거짓을 돌려준다.

>>> b is a
False

위의 예에서 b is a 가 False를 돌려주므로 b와 a 가 다른 객체임을 알 수 있다.

'Programing > Python' 카테고리의 다른 글

파이썬 3일차  (0) 2012.05.09
파이썬 2일차 - 1  (0) 2012.05.09
파이썬을 쉽게 사용하는 PyScripter 설치하기  (0) 2012.05.07
파이썬(Python) 설치 방법 3.2.2버전  (0) 2012.05.07
파이썬 1일차  (3) 2012.05.07
Posted by 부우산사나이
: