* 이 글은 개인 공부정리로 쓰였기 때문에 c언어 지식을 전제로 정리했습니다
* python 3.4 기준
Python?
- 1990년 암스테르담의 귀도 반 로섬(Guido Van Rossum)에 의해 만들어짐
- 인터프리터 언어
- 인간다운 언어
- 문법이 쉬워 빠르게 학습가능
- 간결하고 강력하다
자료형
1.숫자형
- 정수, 실수, 8진수, 16진수가 있고 파이썬에서는 복소수를 내부적으로 지원
- 복소수 관련함수
>>>a = 1+2j #허수부분은 j로 표현
>>>a.real #실수값 리턴
1.0
>>>a.imag #허수값 리턴
2.0
>>>a.conjugate() #켤레복소수 리턴
(1-2j)
*파이선에서 주석은 # 이다.
2.숫자연산
- 다른 프로그래밍 언어와 마찬가지로 (+,-,*,/)로 사칙연산 수행
- x**y : x의 y제곱의 값을 리턴
- x%y : x를 y로 나눈 나머지값을 리턴
3.문자열
- 파이썬에서 문자열을 만드는 방법은 네가지로 구분
-"Hello World!"
-'Hello World!'
-"""Hello World!"""
-'''Hello World!'''
- 문자로써 " 나 ' 를 문자열에 포함시킬수 있는 방법은 "의 경우엔 '로 문자열을 감싸고
' 의 경우엔 "로 문자열을 감싼다. 다른방법으로는 \(역슬래시)를 이용한다
>>>string= "He\'s my brother"
- 여러 줄짜리 문자열 처리에는 \n(줄바꿈)을 삽입하거나 """을 이용한다
1)문자열 연산
-문자열 합치기 : +
-문자열 곱하기 : *
>>>string1 = "Hello"
>>>string2 = "Hi"
>>>print(string1 + string2*2)
HelloHiHi
2)인덱싱과 슬라이싱
- 문자열을 하나의 배열처럼 보고 인덱싱과 슬라이싱 가능
- a[0]일경우 문자열 a의 첫번째 문자를 가리킴 a[-1]은 뒤에서 첫번째 문자
- a[0:3] 은 문자열 a의 첫번째부터 3번째 문자까지 잘라냄 (0 <= a <3)
*뒤에 range 함수에서도 나오겠지만 범위를 나타내는 경우 ~이상 ~미만
- 문자열에서 문자 하나만을 바꿀경우 슬라이싱기법 이용
3)문자열 포매팅
>>>print("I am %d years old" % 18)
I am 18 years old
기본적으로 c언어의 문자열 포매팅과 같다
다른점은 %s의 경우 어떤 형태로든 에러가 나지 않고 변환이 가능하다.
4)문자열 관련 함수
변수명.upper() : 소문자->대문자 변경
변수명.lower() : 대문자->소문자 변경
변수명.count('x') : 문자 x의 개수를 셈
변수명.find('x') : 문자 x가 처음으로 나온 위치 반환 없을경우 -1 반환
변수명.index('x') : find함수와 같지만 찾는문자가 없을경우 에러발생
변수명.join('abc'): abc 각각의 문자 사이에 변수 a의 값 삽입
변수명.lstrip(), a.rstrip() : 각각 가장 왼쪽, 오른쪽의 연속된 공백을 지움
변수명.strip() : 양쪽의 연속된 공백을 모두 지움
변수명.replace(바뀔 문자열, 바꿀 문자열) : 문자열 내의 특정한 값을 다른값으로 치환
변수명.split('x') : x를 구분자로 문자열나눔. 아무런값x면 공백을 기준
변수명.swapcase : 대문자는 소문자로, 소문자는 대문자로 바꿈
3.리스트
- []로 감싸줌
- 리스트를 포함한 어떠한 자료형도 요소값으로 가질수 있다.
- 인덱싱와 슬라이싱 가능
- a = [1,2,3,[4,5,6]] 에서 5를 가리키려면 a[3][1] 또는 a[-1][-2] 로 가리킬 수 있다.
- 더하기, 곱하기(+,*) 도 가능. 문자열과 동일함
- 리스트는 요소 하나씩 수정, 삭제가 가능
리스트 관련 함수
변수명.append(x) : 마지막에 요소 x추가
변수명.sort() : 순서대로 정렬
변수명.reverse() : 순서를 역순으로 뒤집는다.
변수명.index(x) : x가 있으면 그 위치 반환
변수명.insert(x,y) :x 위치에 y 삽입
변수명.remove(x) :첫번째로 나오는 x 삭제
변수명.pop() : 맨 마지막 요소를 반환하고 그 요소 삭제
변수명.count(x) : x의 개수 반환
변수명.extend(x) :리스트 x를 더하여 확장
4.터플
- 기본적으로는 리스트와 완전히 동일
- [] 대신 ()로 둘러싸임
- 터플은 요소값을 변화시킬 수 없다.
5.딕셔너리
- {}로 둘러싸임
- 각각의 요소는 Key:Value 와 같이 쌍을 이루고있고, 쉼표로 구분됨
ex) dic = { key1:value1 , key2:value2, key3:value3}
- 리스트는 Key로 사용할 수 없음
- 중복되는 Key는 사용하지 않는게 좋다.
제어문
제어문으로는 if, while, for 가있는데, 기본문법은 여타 다른언어와 동일하다.
if문의 기본 구조
if <조건문>:
<수행할 문장1>
<수행할 문장2>
...
else:
<수행할 문장A>
<수행할 문장B>
...
*파이썬은 들여쓰기를 생략하면 문장이 실행이안되므로 유의하자
elif (C언어의 switch문)
if <조건문>:
<수행할 문장1>
<수행할 문장2>
...
elif <조건문>:
<수행할 문장A>
<수행할 문장B>
...
elif <조건문>:
<수행할 문장a>
<수행할 문장b>
...
...
else:
<수행할 문장 c>
<수행할 문장 d>
...
for문의 기본구조
for 변수 in 리스트(또는 터플, 문자열):
<수행할 문장1>
<수행할 문장2>
...
range 함수
a = range(10) #0부터 9까지의 숫자 range 객체를 만든다 (시작번호를 지정하지 않으면 0)
a = range(2,11) # 2부터 10까지의 range 객체
입출력
함수
def 함수명(입력 인수):
<수행할 문장1>
<수행할 문장2>
...
-입력값이 몇개가 될지 모를때에는 *args를 사용한다
def 함수이름(*args):
<수행할 문장1>
...
args라는 변수가 입력값들을 모아 터플로 만들어 주기 때문에 입력값이 몇개든지 상관이 없다.
- return값은 언제나 하나이며, 함수를 종료하고 싶을 때에도 사용한다
-입력인수의 초기치를 설정할 수 있다.
def info(name,old=18)
print("나의 이름은 %s입니다." %name)
print("나이는 %d살 입니다." %old)
자주 변하지 않는 값일때는 함수선언을 할 때 초기치를 미리 설정할 수 있다.
입력과 출력
입력은 input을 사용
ex) number = input("숫자를 입력 : ")
출력은 print 사용
>>> print("Hello" "World") #따옴표로 둘러싸인 문자열은 +연산과 동일
HelloWorld
>>> print("Hello","World") #문자열 사이에 콤마는 띄어쓰기
Hello World
-한 줄에 출력하려면 end 파라미터를 이용해 끝문자를 지정
파일 입력과 출력
-파일 생성하기
파일객체 = open(파일이름, 파일열기모드)
-파일 열기모드
r : 읽기모드
w : 쓰기모드
a : 추가모드
-파일 읽기
readline() : 파일의 내용을 한줄씩 읽어들임
readlines() : 파일의 모든 라인을 한꺼번에 읽어서 리스트로 반환
read() : 파일을 전부 읽어 문자열로 반환
-sys모듈 입력
도스창에서 프로그램을 실행할때 인자를 같이 주는 방식이다.
ex) #입력받은 인자를 그대로 출력
import sys
args = sys.argv[1:]
for i in args :
print(i)
클래스
클래스 : 함수나 변수들을 모아놓은 집합체
- 클래스의 구조
class 클래스이름[(상속할 클래스명)]
<클래스 변수 1>
...
def 클래스함수1(self,인수1,인수2...)
<수행할 문장1>
...
def 클래스함수2(self,인수1,인수2...)
<수행할 문장A>
...
...
- 인스턴스 : 클래스에 의해 생성된 객체
ex) cat = Animal()
cat은 객체=cat은 클래스 Animal의 객체 = cat은 클래스 Animal의 인스턴스
self 사용하기
>>>class service:
def setname(self,name):
self.name=name
def sum(self,a,b):
print("%s, %d+%d=%d" %(name,a,b,a+b))
>>>p = service
>>>p.setname("Lake")
>>>p.sum(3.6)
Lake, 3+6=9
setname은 __init__ 메소드(생성자)로 생략가능
>>>class service:
def __init__(self,name):
self.name=name
def sum(self,a,b):
print("%s, %d+%d=%d" %(name,a,b,a+b))
>>>p = service
>>>p.sum(3.6)
Lake, 3+6=9
__del__ 메서드(소멸자)는 인스턴스가 삭제되거나 종료될 때 호출된다
>>>class service:
def __init__(self,name):
self.name=name
def sum(self,a,b):
print("%s, %d+%d=%d" %(name,a,b,a+b))
def __del__(self)
print("bye,%s" %self.name)
>>>p = service
>>>del p
bye,Lake
모듈
모듈 :함수나 변수들, 또는 클래스들을 모아놓은 파일.다른 파이썬 프로그램에서 불러쓸 수 있음(c의 헤더파일)
# module.py
def sum(a,b):
print("module 불러옴")
return a+b
모듈을 추가할때는 import를 사용
>>>import module
>>>print(module.sum(2,6))
module불러옴
8
예외처리
유연한 프로그래밍을 위해선 에러처리가 필요하다
에러처리에는 다음과 같은 방법들이 있다
# try,except만 씀
try:
...
except:
...
#발생에러만 포함한 except문
try:
...
except 발생에러:
...
#발생에러와 에러메시지변수까지 포함한 except문
try:
...
except 발생에러 as 에러메시지 변수:
...