Chapter Prev. 들어가기
누가 만들었을까?
: Guid Van Rossum In Amsterdam 만듦.
파이썬의 특징
- 개발시간을 단축 시켜준다.
- 자료구조가 Data Type 형태로 들어가 있다. 코드라인 단축(간략한 코드)
- 제어문과 반복문에 대한 축약 문법이 존재.
- 배우기 쉽다(객체지향을 이해하고 있다면 언어습득에 용이하다.)
- 사용하기쉽다.
- 코드를 이해하기 쉽다.
- 코드가 짧아진다.
- 팀 프로젝트에 좋다.
- 확장성이 뛰어나다.(C, Java)
- C언어에서 Python Library 를 사용할 수 있다. 반대로 Python 에서 C Library 를 호출할 수 있다.
- 역사가 오래되어 Third party Library 가 풍부하다.
- 크게 Python의 버전 정보는 2.X 와 3.X가 있으나, Third party Library 사용으로 인해 많은사람들이 2.X버전 정보를 선호한다.
파이썬은 어떤 언어인가?
- 객체지향언어(- Python 은 순수 객체지향은 아니다.)
- 대화기능의 인터프리터 언어
- 동적인 데이터 타입 결정지원(JavaScript와 유사)
- 플랫폼에 독립적(OS에 상관 없이 Python Interpreter 만 존재 한다면 동작 가능)
- 개발기간 단축에 초점을 둔 언어
- 간단하고 쉬운 문법
- 고 수준의 내장객체 데이터형 제공(자료구조 - List, Queue...)
- 메모리 자동 관리(참조 계수 기법(Refrence Count)으로 메모리를 어떻게 관리하는지 파악)
- 무료
- 시스템관리(스크립팅)
- GUI(Window programming)
- 인터넷 프로그래밍(Flask, Jango)
- DB 프로그래밍(MongoDB etc...)
- 각종 텍스트프로세싱
- 분산처리
- 수치연산, 그래픽스 등등(nump, pandas)
- Big Data 처리에 있어서 개발하기 유용한 언어는 대채적으로 Python 이라고 함.
개발 환경
- python.org download(3.4.4)
- 개발 툴
1. pycharm(자동완성)
2. eclipse(Java runtime + eclipse.org)
3. atom
4. visuals studio 2015
5. ultra edit, editplus - Eclipse Marketplace -> pydev 설치
- pyDev 관련 Project 생성 후 Quick Auto Config 를 통해 path 설정
- eclipse 설정 관련하여 window->Preferences->pyDev->interpreters->Python interpreter를 통해 path 설정 관련하여 확인 가능하다. Library 위치 관련 정보 이다.
-추가로 window->Preferences->encoding->utf-8 설정을 해주도록 한다.
Chapter 1. 변수명 및 예약어
- 3.X 버전에서는 한글을 변수로 사용 가능함.(실제 한글을 변수로 사용하지는 않는다. 가능할뿐)
- # 은 주석으로 사용(단축기 : Ctrl + /), 단체 주석은 *** ~ ***을 사용하도록 함.
- Python에서 모든 것은 객체이다. 객체는 속성과 메소드로 구성 된다. 각각의 개체에 대한 속성과 메소드에 대한 접근은 .(닷) 연산자를 통해 접근한다.
- Python은 값이 우선이다. 따라서 메모리가 허락하는 한은 해당 변수에 대하여 할당된 수 만큼 할당한다.
a = 1013123131312312312313123123123123123123; print("a=", a) print(type(a)) |
- 2진수 및 다른 정수 형태에 대한 값 입력이 가능하다.
b = 0o14 #0b11 print("b =", b) print(type(b)) |
- 출력시 bin, oct, hex 메소드를 통해 십진수를 2진수(binary)로 출력 가능하다.
c = 13 print(bin(c)) print(oct(c)) print(hex(c)) |
0b1101 0o15 0xd |
- Float형 지정시 지수부 가수부를 나누어 지정 가능하다.
d = 3.14 e = 3.141592e3 (10의 3승) print("d =", d) print(type(d)) print("e =", e) print(type(e)) |
d = 3.14 <class 'float'> e = 3141.592 <class 'float'> |
- 복소수 타입
i = 3 + 4j print("i =", i) print(type(i)) print(i.real) #실수부 복사 print(i.imag) #허수부 복사 |
i = (3+4j) <class 'complex'> 3.0 4.0 |
Boolean : 시작시 반드시 대문자 기입
k = True # Ture + 1 이러한 연산 가능 print("k =", k) print(type(k)) |
k = True <class 'bool'> |
Chapter 3. 복합(컨테이너, iterable) 데이터 타입 : 4가지
Mutable type(수정 가능한 데이터 타입) : List, dict(dictionary), set
Immutable type(수정 불가능한 데이터 타입) : str(String), tuple [문자열은 모두 (bytes) 단위로 처리 된다.]
순서있는 type(인덱서, 슬라이싱) : list, tuple, str(bytes)
순서없는 type(인덱서, 슬라이싱X) : dict, set
문자열
s = 'abc' s1 = "abc"\ "def" #연결부호 s2 = '''korea hello hi''' s3 = 'abc "def"' s4 = 'abc \"def\"' #C에서 처리 되는 특수 문자 예외에 대하여 \에 대한 값도 적용 가능. s5 = 'abc' #s[0] = 'A' #(X) print("s =", s) print("s1 =", s1) print("s2 =", s2) print("s3 =", s3) print("s4 =", s4) print(s5[0]) print(type(s)) |
s = abc s1 = abcdef s2 = korea hello hi s3 = abc "def" s4 = abc "def" a <class 'str'> |
리스트
myList = [10, 3.14, True, 'abc'] myList[0] = 100 #수정 가능하다.(mutable) 배열과는 다름 print(myList) print(type(myList)) print(myList[0]) print(myList[-1]) #list에 대하여 -indexing 값이 존재한다.(거꾸로) s = "abcdef" print(len(myList)) print(len(s)) print(s[-1]) |
[100, 3.14, True, 'abc'] <class 'list'> 100 abc 4 6 f |
튜플
#tuple을 사용하는 주된 이유는 packing, unpacking 때문이다. #tuple ->immutable type 이기때문에 수정이 안된다. myT = (10, 20, 30) #myT[0] = 100 print(myT) print(type(myT)) print(myT[0]) a,b,c = 1,2,3 d = 1,2,3 #packing... e,f,g = (1,2,3) #unpacking... (괄호 안준 효과 발생) print(d) print(type(d)) |
[100, 3.14, True, 'abc'] <class 'list'> 100 abc 4 6 f (10, 20, 30) <class 'tuple'> 10 (1, 2, 3) <class 'tuple'>
|
Dictionary
#Dict : mutable type - 순서 없음, 수정가능 [JSON 형식과 동일] #Key는 유일하다. 중복 불가 myD = {10:'aaa', 20:'bbb', 30:'ccc'} myD[30] = 'ddd' #KEY가 존재할 경우 수정 된다. myD[40] = 'ddd' #KEY가 없을 경우 추가 된다. print(myD) print(type(myD)) #print(myD[0]) 불가능 print(myD[10]) |
{40: 'ddd', 10: 'aaa', 20: 'bbb', 30: 'ddd'} <class 'dict'> aaa |
Set(중복데이터 허용 하지 않는다)
#순서 없는 데이터 타입(index 사용 불가) - 내부 알고리즘 특성 때문 myS = {10, 20, 30, 40, 20} #중복데이터 입력시 제거됨. myS1 = {30, 40, 50, 60, 70} print(myS) print(type(myS)) print(myS | myS1) #합집합 print(myS & myS1) #교집합 print(myS - myS1) #차집합 print(myS ^ myS1) #집합 |
{40, 10, 20, 30} <class 'set'> {70, 40, 10, 50, 20, 60, 30} {40, 30} {10, 20} {70, 10, 50, 20, 60} |
Chapter 4. Type Casting(형변환)
#Type Casting - 형변환 myL = [10, 20, 30] # myL = dict(myL) #List-> dic X myL = enumerate(myL) #Dic 형변환 가능한 enumerate 객체를 리턴해준다. myL = dict(myL) # myD = {10:'aaa', 20:'bbb', 30:'ccc'} #Dic->List # myL = list(myD) # myL = (10, 20, 30) # myL = list(myL) #Tuple -> List로 # s = 100 # s = int(s) # s = str(s) # print(s) # print(type(s)) {0: 10, 1: 20, 2: 30} <class 'dict'> |
#문자열 전송 시 bytes type으로 변환 하여 보내야 한다.(통신 전송 단위) a = "abc" # a = bytes(a, 'utf-8') or a = a.encode(encoding='utf_8', errors='strict') print(a) print(type(a)) b = b"abc" # b = str(a, 'utf-8') or b = b.decode() # 내장함수 사용 print(b) print(type(b)) |
b'abc' <class 'bytes'> abc <class 'str'> |
Print 함수에 대하여...
print(10, 20, 30, sep='-') print('abc', end='\n') #print 함수에 기본적으로 end 인자가 들어가있음. print('def') |
10-20-30 abs def
|
Chapter 5. 연산자
- C언어 대비 ++, -- 연산자가 없으며, 논리 연산 표현 방식이 다르다.
- **(거듭제곱) 과 //(몫) 에 대한 연사자가 추가됨
- 삼항연산자가 없다.
a = 3 ** 2 print(a) b = 3 * (2 + 4) - 2 print(b) c = (10) #()의 표현은 Tuple이나, 이 번엔 연산자 우선 순위의()로 쓰임. (,) 가 적용 될 경우 tuple이 됨. print(c) print(type(c)) d = 15/4 #C에서는 결과 값이 3으로 나오다, 3.75의 값 실수로 나옴. print(d) e = 15//4 print(e) |
9 16 10 <class 'int'> 3.75 3 3 |
f = 15%4 print(f) g = 1 h = 2 # g = g + 3 g += 3 # h = h - 3 h -= 3 # h++ 오류 ++h # +(+h) 단항 연산식은은 우에서 자로 이동.따라서 향수 h에 양수 h의 의미를 가진다. # -(-h) 그렇다고 해서 -의미에 -의미에 대하여 (할당)의미가 적용되어 + 되는 것이 아니라 -이다. #할당이 발생되지 않음. 가능한 이러한 표현식은 쓰지 않는다. |
# a = int(input("반지름 입력:")) #문자열 -> 정수로 변환 # circle_area = a**2*3.14 # print(circle_area) # a = 10 == 10 # a = 'abc' == 'abc' # a = 10 > 0 # a = 10 >= 0 # a = 5 # b = 0 < a < 10 #python은 등가 연산이 가능. 따라서 python의 경우 논리연산식을 사용하는 경우가 드믊 # print(b) #비트연산 a = 3 & 4 #0 print(a) b = 3 | 4 #7 print(b) c = -3 & 2 #0 print(c) d = -3 & 2 #-1 print(d) #구성원 연산자 myList = [10, 20, 30,40] # in 과 not in의 결과 값은 반대. print(10 in myList) #True s = "hello korea" print('kor' in s) #True myD = {10:'aa',20:'bb', 30:'cc'} #Dictionary 의경우 Key에 대해서만 구성원 여부에 대하여 판단 가능하다. print(20 in myD) #True print('aa' in myD) #False |
문자열에 사용 가능한 연산자
+(결합), *(반복), %(나머지 연산자가 아닌 문자에 대한 포멧)
a = "abc" a = a + "def" print(a) a = a*3 print(a) b = 10 c = 3.14 d = "abc" s = "a=%d b=%f s=%s" % (b, c, d) # print("a=%d b=%f s=%s", b, c, d) 해당 용법은 사용할 수 없다. print(s) #Dictionary format myD = {"name":'홍길동', "age":20, "addr":"서울시"} s2 = "이름:%(name)s 나이:%(age)d 주소:%(addr)s" % myD print(s2) |
abcdef abcdefabcdefabcdef a=10 b=3.140000 s=abc 이름:홍길동 나이:20 주소:서울시 |
Chapter 6. 흐름제어
if문
a = -3 #python은 중괄호가 없다. 들여쓰기의 개념 if a > 0: print("a =", a) print("크다") elif a == -3: print("-3입니다.") else: print("작다")
print("hello") -3입니다. hello |
삼항 연사자(축약 문법)
#rst = a>0 ? 10:20 #C용법 a = 3 rst = 10 if a>0 else 20 rst = (20, 10)[a>0] #Tuple 앞이 False 뒤가 True(가능한 해당 문법 사용 지양한다. 혼란스러움) rst= {True:10, False:20}[a>0] #Dictionary print("rst =", rst) rst = 10 |
▶ ex2.
#두개의 정수를 입력받아 절대값의 합을 구하시오 num1 = int(input("정수(1) 입력 :")) num2 = int(input("정수(2) 입력 :"))
num1 = -1*num1 if num1<0 else num1 num2 = -num2 if num2<0 else num2
abs_value = 3
print("절대값의 합:", num1+num2) 정수(1) 입력 :5 정수(2) 입력 :3 절대값의 합: 8 |
▶ ex3.
""" 점수를 입력받아 (70~100) 90~100 : A 80~89 : B 70~79 : C 60~69 : D 나머지 : F 딕셔너리를 이용하여 구하시오 """ score = int(input("점수를 입력하시오 : ")) scoreDic = {10:'A', 9:'A', 8:'B', 7:'C', 6:'D'} print(scoreDic.get(score//10, 'F')) 점수를 입력하시오 : 90 A |
while 문
a = 0 while a<5: print("a=", a) if a==3: break a+=1 else: print('while end..') print('hello') a= 0 a= 1 a= 2 a= 3 hello |
for 문
myList = [10, 20, 30, 40] for n in myList: print(n) 10 20 30 40 |
s = "abcde" for n in s: print(n) a b c d e |
myDic = {10:'aaa', 20:'bbb', 30:'ccc'} for n in myDic: print(n) 10 20 30 |
rn = range(0, 10, 1) #0과 1값은 생략 가능 (start index, last index-1, gap) print(list(rn))
for n in range(3): #for문 대문에 last index의 전 까지만 수행 한다. 0,1,2(전이 아닐 경우 루프를 한번 더 돌게 됨) print(n) |
연습문제 1차.
1. 키와 몸무게를 입력받아 비만도를 구하고 결과를 출력하시오.
표준체중(kg)={신장(cm)-100}×0.85
비만도(%)=현재체중/표준체중(%)×100
비만도가90%이하
저체중,
90초과 ~∼110%
정상,
110초과~120%
과체중,
120%초과
비만
2. 다음에 대한 결과를 출력하시오
2-1) 하나의 수를 입력받아 약수를 출력하시오.
2-2) 3개의 수를 입력 받아 최대값을 구하시오.
2-3) 하나의 수를 입력받아 그수의 합을 구하는 최대숫자를 구하시오.
( 예,55를 입력했다면 1+2+3+.......+? <=55 는 10 이므로 10 이 출력되면됨 )
3. 다음형식으로 구구단을 출력하시오
==========================
1X1= 1 2X1= 2 3X1= 3
...
1X9= 9 2X9=18
==========================
4X1= 4 5X1= 5 6X1= 6
...
4X9 =36
==========================
7X1= 7 8X1= 8 9X1= 9
..
7X9=63
==========================
Answer.
#ex1 height = int(input("키를 입력하세요:")) weight = int(input("몸무게를 입력하세요:"))
avgWeight = (height-100) * 0.85 print("표준체중(kg):", avgWeight)
ponderalIndex = (weight/avgWeight)*100 print("당신의 비만도(%)는 :", ponderalIndex)
scoreDic = {12:'정상', 11:'정상', 10:"저체중", 9:'저체중'} print(scoreDic.get(ponderalIndex//10, '비만')) |
#ex2-1 inputNum = int(input("정수를 입력하세요:")) print("약수는") for n in range(1,inputNum+1): if inputNum%n == 0: print(n) |
#ex2-2 num1 = int(input("정수(1) 입력하세요:")) num2 = int(input("정수(2) 입력하세요:")) num3 = int(input("정수(3) 입력하세요:"))
step1 = num1>num2 if num1 else num2 bigNumber = step1>num3 if step1 else num3
print("가장큰수는 :", bigNumber) |
#ex2-3 inputNum = int(input("정수(1) 입력하세요:")) rn = range(1, inputNum+1, 1) value = 0
for n in list(rn): value = value + n if value == inputNum: print(n) break |
#ex3 rn = range(1, 10, 1) for n in list(rn): print("==========================") for h in list(rn): s = "%2d*%d=%2d " % (n, h, n*h) print(s, end="") if h%3 == 0: print('') print("==========================") |
'Data > Python' 카테고리의 다른 글
파이썬 선(禪)(Zen of Python) (0) | 2016.09.22 |
---|---|
Python 강좌(5) (0) | 2016.07.22 |
Python 강좌(4) (0) | 2016.07.20 |
Python 강좌(3) (0) | 2016.07.20 |
Python 강좌(2) (0) | 2016.07.19 |