본문 바로가기

Data/Python

Python 강좌(1)

Chapter Prev. 들어가기



누가 만들었을까?


Guid Van Rossum In Amsterdam  만듦.




파이썬의 특징

  • 개발시간을 단축 시켜준다.
    1. 자료구조가 Data Type 형태로 들어가 있다. 코드라인 단축(간략한 코드)
    2. 제어문과 반복문에 대한 축약 문법이 존재.
  • 배우기 쉽다(객체지향을 이해하고 있다면 언어습득에 용이하다.)
  • 사용하기쉽다.
  • 코드를 이해하기 쉽다.
  • 코드가 짧아진다.
  • 팀 프로젝트에 좋다.
  • 확장성이 뛰어나다.(C, Java)
    1. C언어에서 Python Library 를 사용할 수 있다. 반대로 Python 에서 C Library 를 호출할 수 있다.
    2. 역사가 오래되어 Third party Library 가 풍부하다.
    3. 크게  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