Blog | Tag | Local | Media | Guest | Login  RSS
파이썬에 해당되는 글 14건
2009.10.06 :: python class
2009.09.22 :: python function
2009.09.22 :: python for
2009.09.22 :: python while
2009.09.22 :: python if
2009.09.22 :: python 변수
2009.09.18 :: python boolean
2009.09.18 :: python dictionary
python class
class 클래스이름[상속클래스명[, 상속클래스명...]]:
    <클래스 변수 1>
    <클래스 변수 2>
    ...
    def 클래스함수1(self[, 인수1, 인수2,,,]):
        <수행할 문장 1>
        <수행할 문장 2>
        ...
    def 클래스함수2(self[, 인수1, 인수2,,,]):
        <수행할 문장1>
        <수행할 문장2>
        ...
    ...
다중 상속 가능.

텅 빈 클래스
class CEmpty:
    pass

CEmpty 클래스의 인스턴스
empty = CEmpty()

클래스
>>> class CNotEmpty:
...     literal1 = "Life is short."
...     literal2 = "You need a Python"
...     def power(self, a, b):
...         result = a ** b
...         print "%s의 %s 승은 %s 입니다." % (a, b, result)
...
>>> ne = CNotEmpty()
>>> ne.power(2,10)
2의 10승은 1024입니다.
>>> print ne.literal1
Life is short

self가 C++의 this와 같음. 자신의 레퍼런스 변수.

클래스 생성자와 파괴자 __init__, __del__
>>> class CNotEmpty:
...     literal1 = "Life is short."
...     literal2 = "You need a Python"
...     def __init__(self, val):
...         self.initval = val
...     def power(self, a, b):
...         result = a ** b
...         print "%s의 %s 승은 %s 입니다." % (a, b, result)
...     def __del__(self):
...         print '객체 %s 파괴됨' % (self)
...
>>> ne = CNotEmpty(10)
>>> print ne.initval
10
>>> del ne
객체 <__main__.ne instance at 0x02827E90> 파괴됨
>>>
생성자와 파괴자를 명시적으로 쓰지 않으면 아무 일도 하지 않는 디폴트 생성자, 디폴트 파괴자가 자동으로 호출됨

클래스 멤버의 접근
>>> class c:
...     li1 = "ab"
...     def __init__(self, i):
...         self.i = i
...
>>> ic = c("abc")
>>> c.li1
'ab'
>>> c.i
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class c has no attribute 'i'
>>> ic.li1
'ab'
>>> ic.i
'abc'
>>> del ic
>>> ic.i
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ic' is not defined
>>>

연산자 오버로딩도 되나 + 연산자의 함수이름은 __add__와 같이 연산자의 함수 이름이 특이하므로 알아둘 필요가 있음.

연산자
 __init__
 생성자
 __del__  소멸자
 __add__  a + b
 __or__
 a | b
 __repr__  레퍼런스 print a
 __call__  함수호출 a()
 __getattr__  속성 참조 .연산 a.blah
 __getitem__  인덱싱 a[i]
 __setitem__  인덱스 치환 a[i] = v
 __getslice__  슬라이싱 a[:]
 __cmp__  비교 a > b
파이썬 라이브러리는 요기에 http://www.python.org/doc/current/download.html

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

우월한 나눔 폰트  (0) 2009.12.29
python __name__  (0) 2009.10.06
python class  (0) 2009.10.06
python system arguments  (0) 2009.10.06
python file read/write  (0) 2009.10.06
python function  (0) 2009.09.22

 태그 : 
sys_arg.py
import sys

args = sys.argv[:]
for i in args:
    print i

python sys_arg.py abcd aaaa dcba

결과
sys_arg.py
abcd
aaaa
dcba

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

python __name__  (0) 2009.10.06
python class  (0) 2009.10.06
python system arguments  (0) 2009.10.06
python file read/write  (0) 2009.10.06
python function  (0) 2009.09.22
python for  (0) 2009.09.22

 태그 : 
쓰기
f = open("새파일.txt", 'w')

for i in range(1, 11):
    data = "%d 번째 줄입니다.\n" % i
    f.write(data)

f.close()

읽기 (C/C++ 스타일)
f = open("새파일.txt", 'r')

while 1:
    line = f.readline()
    if not line: break
    print line

f.close()

리스트로 읽기
f = open("새파일.txt", 'r')
lines = f.readlines()


for line in lines:
    print line

f.close()
파일 전체를 읽어 줄 단위로 끊어 리스트에 넣음. readlines 함수를 사용.

파일 통채로 한번에 읽기
f = open("새파일.txt", 'r')
data = f.read()

print data

f.close()

C/C++의 FILE 구조체와 같이 tell 함수와 seek 함수를 사용할 수 있다.
만약 seek(-1) 처럼 인자로 음수 값을 넘기면 어떻게 되는지 직접 확인해보자.

 r (읽기 모드)  파일을 읽기만 할 때
 w (쓰기 모드)  파일에 쓸 때
 a (추가 모드)  파일의 마지막에 새로운 내용을 추가 시킬 때

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

python class  (0) 2009.10.06
python system arguments  (0) 2009.10.06
python file read/write  (0) 2009.10.06
python function  (0) 2009.09.22
python for  (0) 2009.09.22
python while  (0) 2009.09.22

 태그 : 
python function
def 함수이름(입력 인수):
    <수행할 문장1>
    <수행할 문장2>
    ...

가변인자 리스트를 사용하는 함수
>>> def sum_many(*args):
...     sum = 0
...     for i in args:
...         sum = sum + i
...     return sum
...
args라는 변수는 입력값들을 전부 모아서 튜플로 만들어 줌

튜플을 반환하는 함수
>>> def sum_many(*args):
...     sum = 0
...     for i in args:
...         sum = sum + i
...     return True, sum
...

튜플은 반환하는 함수를 사용해서 하나의 변수에 담으면 변수는 튜플 레퍼런스가 되고 각각 따로 담으면 각 데이터형의 레퍼런스가 된다.

즉,
>>> a = sum_many(1,2,3,4,5)
>>> a, b = sum_many(1,2,3,4,5)
둘 다 에러가 없다. 변수 a가 레퍼런스 하는 것이 다를 뿐.
그렇다면 3개의 값을 반환하는 함수의 결과를 2개의 변수에 담으면 어떻게 될까?

디폴트 파라미터를 가지는 함수
def say_myself(name, old, sex=1):
    print "나의 이름은 %s 입니다." % name
    print "나이는 %d살입니다." % old
    if sex:
        print "남자입니다."
    else:
        print "여자입니다."
C++과 마찬가지로 디폴트 파라미터 오른쪽에는 디폴트 파라미터만 사용할 수 있다.

재귀함수 Recursion
def countdown(n):
    print n
    if n == 0:
        print "0 입니다."
    else:
        countdown(n-1)


저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

python system arguments  (0) 2009.10.06
python file read/write  (0) 2009.10.06
python function  (0) 2009.09.22
python for  (0) 2009.09.22
python while  (0) 2009.09.22
python if  (0) 2009.09.22

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


>>> test_list = ['one', 'two', 'three']
>>> for i in test_list:
...     i is test[1]
...
False
True
False
for 문을 진행하면서 순서대로 i가 test_list의 요소를 레퍼런스함

continue, break 역시 for 문에서 사용가능

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와 range의 결합
>>> fac = 1
>>> for i in range(1, 11):
...     fac = fac * i
...
>>> print fac
3628800

for 문을 이용해 리스트의 요소 접근하기
>>> test_list = ['one', 'two', 'three']
>>> for i in range(len(test_list)):
...     print test_list[i]
...
one
two
three

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

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

python file read/write  (0) 2009.10.06
python function  (0) 2009.09.22
python for  (0) 2009.09.22
python while  (0) 2009.09.22
python if  (0) 2009.09.22
python 변수  (0) 2009.09.22

 태그 : 
python while
# -*- coding: euc-kr -*-
# coffee.py

coffee = 10
while 1:
    money = int(raw_input("돈을 넣어 주세요: "))
    if money == 300:
        print "커피를 줍니다."
        coffee = coffee -1
    elif money > 300:
        print "거스름돈 %d를 주고 커피를 줍니다." % (money -300)
        coffee = coffee -1
    else:
        print "돈을 다시 돌려주고 커피를 주지 않습니다."
        print "남은 커피의 양은 %d개 입니다." % coffee
    if not coffee:
        print "커피가 다 떨어졌습니다. 판매를 중지 합니다."
        break

>>> a = 0
>>> while a < 10:
...     a = a+1
...     if a % 2 == 0:
...         continue

...     print a
...

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

python function  (0) 2009.09.22
python for  (0) 2009.09.22
python while  (0) 2009.09.22
python if  (0) 2009.09.22
python 변수  (0) 2009.09.22
python boolean  (0) 2009.09.18

 태그 : 
python if
>>> a = 1
>>>
if a == 1:
...     print 'T'
... elif a == -1:
...     print '?'
... else:
...     print 'F'
...
T

조건문의 뒤에는 반드시 콜론(:)을 붙여주고 실행문은 반드시 같은 깊이로 들여쓰기 해야한다.
들여쓰기가 단 한칸이라도 맞지 않으면 오류.

비교연산자
x < y    -  x가 y보다 작다 
x > y    -  x가 y보다 크다
x == y   -  x와 y가 같다 
x != y    -  x와 y가 같지 않다 
x >= y   -  x가 y보다 크거나 같다 
x <= y   -  x가 y보다 작거나 같다

참고
>>> a = [1 , 2, 3]
>>> b = copy(a)
>>> a is b
False
>>> a == b
True

논리연산자
x or y     x와 y둘증에 하나만 참이면 참이다
x and y  x와 y 모두 참이어야 참이다
not x      x가 거짓이면 참이다

요소연산자
x in 리스트, x not in 리스트
x in 튜플, x not in 튜플
x in 문자열, x not in 문자열
>>> 'a' in ('a', 'b', 'c')
True
>>> 'j' not in 'python'
True

조건문의 통과
>>> pocket = ['cellphone', 'key']
>>> if 'coin' in pocket:
...     pass
... else:
...     print 'call operator'
...
조건문과 제어문에서의 탈출 방법은 다르다는 것을 명심
저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

python for  (0) 2009.09.22
python while  (0) 2009.09.22
python if  (0) 2009.09.22
python 변수  (0) 2009.09.22
python boolean  (0) 2009.09.18
python dictionary  (0) 2009.09.18

 태그 : 
python 변수
모든 변수는 객체의 레퍼런스
>>> a = 3
>>> b = 3
>>> a is b
True
변수는 모두 레퍼런스. 따라서 a, b는 정수형 객체 3을 레퍼런스하고 있다. a와 b는 가리키고 있는 대상이 동일하므로 a is b의 결과가 1로 나온다. 이 점은 C/C++과는 다른 점. 다시 말해 변수를 선언하면 = 연산자 오른쪽에서 객체가 없으면 객체가 생성되고 레퍼런스 카운트가 증가.

변수 없애기
>>> a = 3
>>> b = 3
>>> del(a)
>>> del(b)
변수를 모두 제거해서 레퍼런스 카운트가 0이 되면 가비지 컬렉터가 정수형 객체 3을 삭제함

튜플, 리스트로 변수만들기
>>> a, b = 'python', 'life'
>>> (a, b) = ('python', 'life')
>>> [a, b] = [
'python', 'life']
>>> a, b = fuction_to_return_tuple()
튜플은 괄호 생략이 가능함.

변수 값 swap 하기
>>> a, b = 'python', 'life'
>>> a, b = b, a
>>> a
'life'
>>> b
'python'

참고
>>> a = [1, 2, 3]
>>> b = a
>>> a[0] = 0
>>> a
[0, 2, 3]
>>> b
[0, 2, 3]
>>> a is b
True
모든 변수는 레퍼런스 변수이므로 '='로 대입시 shallow copy가 일어남
따라서 리스트의 deep copy가 필요한 경우에는 리스트의 모든 요소를 대입해주면 됨.
>>> a = [1, 2, 3]
>>> b = a[:]
>>> a[0] = 0
>>> a
[0, 2, 3]
>>> b
[1, 2, 3]
>>> a is b
False
>>> from copy import copy
>
>> b = copy(a)

정수형, 문자형, 문자열형 객체와 같이 객체의 요소를 얻을 수 없는 객체의 deep copy는?

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

python while  (0) 2009.09.22
python if  (0) 2009.09.22
python 변수  (0) 2009.09.22
python boolean  (0) 2009.09.18
python dictionary  (0) 2009.09.18
python list, tuple  (0) 2009.09.18

 태그 : 
python boolean
참, 거짓 표
 ""가 아닌 문자열 (예: "python")  참
 ""  거짓
 []가 아닌 리스트
 참
 []  거짓
 ()  거짓
 {}  거짓
 0 이 아닌 숫자
 참
 0  거짓
 None  거짓

>>> a = [1,2,3,4]
>>> while a:
...     a.pop()
...
4
3
2
1
리스트에서 pop하다가 아무것도 없는 None이 되면 거짓이 되어 while loop 탈출
저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

python if  (0) 2009.09.22
python 변수  (0) 2009.09.22
python boolean  (0) 2009.09.18
python dictionary  (0) 2009.09.18
python list, tuple  (0) 2009.09.18
python string format  (0) 2009.09.18

 태그 : 
python dictionary
딕셔너리 기본
>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118', 'age':23, have:['coin', 'bill']}
C++의 std::map 과 비슷한 성질을 가졌음.
해쉬임. 키에는 리스트를 제외한 모든 변수형을 사용할 수 있음.
딕셔너리의 키로 쓸 수 있고 없고의 구별은 키의 값이 변할 수 있는지 없는지로 판단함.
즉, 리스트는 내용이 변할 수 있으므로 키로 사용할 수 없음. 반면에 튜플은 내용이 변하지 않으므로 사용할 수 있음.

키로 값 얻기
>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99

딕셔너리 추가
>>> a = {1: 'a'}
>>> a[2] = 'b'
>
>> a
{2: 'b', 1: 'a'}
C++의 std:map과는 다르게 정렬이 되지 않는다. 무조건 첫번째 요소로 들어간다.

딕셔너리 함수
------------------------------------------------------------------------------------------------
함수           설명
------------------------------------------------------------------------------------------------
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가 있는지 조사하여 참, 거짓을 돌려준다.


딕셔너리 주의사항
Key는 고유한 값이므로 중복되는 값을 설정해 놓으면 하나를 제외한 나머지의 것들은 무시된다. 이 때 꼭 딕셔너리를 만들 때 앞에 썼던 것이 무시되는 것은 아니고 어떤 것이 무시될지는 예측이 불가능하다. 중복되는 Key를 절대 사용하지 말아야 한다.

저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'프로그래밍' 카테고리의 다른 글

python 변수  (0) 2009.09.22
python boolean  (0) 2009.09.18
python dictionary  (0) 2009.09.18
python list, tuple  (0) 2009.09.18
python string format  (0) 2009.09.18
python string  (0) 2009.09.18

 태그 : 

티스토리 툴바