[Python] 의미 및 관련 예제 풀이

    반응형

     

    Python?

    • 기본적으로 인터프리터(해석기) 위에서 실행되는 언어
    • 인터프리터 언어는 프로그램의 코드가 한 라인씩 순서대로 해석되고 실행되기를 반복함
    • 코드가 완전히 작성되지 않아도 작성된 부분까지 테스트를 위해 컴파일 없이 바로 실행이 가능함
    • 들여 쓰기 조심해야 하고 세미클론이 없으며 확장자는 py

     

     

    Python의 기본 형태

    # hi 출력
    print("hi")
    
    # for문으로 0부터 9까지 출력
    for i in range(10):
    	print(i) # 들여쓰기를 하지 않으면 오류 발생
        
    # 변수 선언 : 뒤에 오는 자료형에 따라서 데이터 타입이 결정됨
    a = 15
    type(a) # <class 'int'>

     

     

    Python의 자료형

     

    01) 숫자 (Numeric)

     - 정수(Integer), 실수(Float), 복소수(Complex)

    # 정수
    a = 3
    b = -2
    type(a) # <class 'int'>
    type(b) # <class 'int'>
    
    # 실수
    a = 3.14
    b = 8.9
    type(a) # <class 'float'>
    type(b) # <class 'float'>
    
    # 복소수
    a = 3 + 4j
    type(a) # <class 'complex'>

     

    02) 문자열 (Str)

     - 단어나 문장이 작은따옴표('')나 큰 따옴표("")로 감싸져 있는 형태

     - ':(클론)'을 사용하여 문자열을 자를 수 있음

     - str [시작 문자:자를 문자:step]

     - 자를 문자를 안 적어주면 문자의 끝까지 가고 step을 안 적어주면 기본값은 1임

    # 문자열
    a = "hi"
    b = "Hello, World!"
    type(a) # <class 'str'>
    type(b) # <class 'str'>
    
    s = "가나다라마바사"
    print(s[0]) # 가
    print(s[0:2]) # 가나
    print(s[1:2]) # 나
    print(s[5:6]) # 바
    print(s[-1]) # 사
    print(s[-1:-5]) # 공백
    print(s[-3:]) # 마바사
    print(s[-3:-2]) # 마

     

    03) 논리 (Boolean)

     - True, False의 값으로 조건을 판단할 때 사용하며 첫 글자는 대문자 형태

    # 논리
    a = True
    type(a) # <class 'bool'>
    
    print(5 > 100) # False
    
    x, y = 100, 200
    print(x != y) # True

     

    04) 리스트 (List)

     - 다수의 데이터를 저장하는데 사용되며 리스트에 포함된 데이터는 '요소(Element)'라고 부름

     - 리스트는 각 요소의 고유한 위치(Index)를 가지고 이 위치를 통해 개별 요소에 접근함

     - '[]'를 사용하여 정의함

    # 리스트
    a = [1, 2, 3]
    type(a) # <class 'list'>
    print(a[0]) # 1
    print(a[1]) # 2
    print(a[2]) # 3
    
    arr = [10, 20, 30, 40, 50]
    print(type(arr)) # <class 'list'>
    print(arr) # [10, 20, 30, 40, 50]
    print(arr[0]) # 10
    print(arr[3:]) # [40, 50]
    print(arr[3:-1]) # [40]
    
    # append로 값 추가하기
    arr.append(60)
    print(arr) # [10, 20, 30, 40, 50, 60]
    arr.insert(1, 11) # 인덱스[1] 위치에 11을 넣어줌
    print(arr) # [10, 11, 20, 30, 40, 50, 60]
    
    # 값 삭제하기
    arr.remove(11)
    print(arr) # [10, 20, 30, 40, 50, 60]
    
    # 역순정렬
    arr.reverse()
    print(arr) # [60, 50, 40, 30, 20, 10]
    
    # 순차정렬
    arr.sort()
    print(arr) # [10, 20, 30, 40, 50, 60]
    
    # extend로 값 추가하기
    temp = [10, 11, 12]
    temp.extend('html')
    print(temp) # [10, 11, 12, 'h', 't', 'm', 'l']

     

    05) 튜플 (Tuple)

     - 리스트와 비슷하지만, 한 번 생성되면 변경이 불가함

     - 모든 자료형이 다 들어갈 수 있으며 통일되지 않아도 되고, 다른 튜플까지 포함할 수 있음

     - 불변의 데이터 구조를 지니고 각 요소의 Index를 가지고 있음

     - '()'를 사용하여 정의함

    # 튜플
    a = (1, 2, 3, 4)
    type(a) # <class 'tuple'>
    
    a = (10, False, 3.14, "Hi")
    
    print(a[0]) # 10
    print(a[1]) # False
    print(a[2]) # 3.14
    print(a[3]) # Hi
    print(a[4]) # 없는 인덱스는 오류 발생
    Traceback (most recent call last):
      File "<pyshell#7>", line 1, in <module>
        print(a[4])
    IndexError: tuple index out of range
    
    # a의 길이 출력
    print(len(a)) # 4
    
    # (a의 길이 - 1) = a[3] 출력
    print(a[len(a)-1]) # Hi
    
    # 중간에 값을 바꾸기 : 오류발생 (불변 객체라서 값 변경 불가)
    a[0] = 100
    Traceback (most recent call last):
      File "<pyshell#10>", line 1, in <module>
        a[0] = 100
    TypeError: 'tuple' object does not support item assignment
    
    # for문으로 출력
    for i in a:
        print(i)
        # 10
        # False
        # 3.14
        # Hi
        
    # a 튜플에 b를 연결하기
    a = (100, 200, 400, "hi", False)
    b = a + (500, 600)
    print(b) # (100, 200, 400, 'hi', False, 500, 600)
    print(b[3:]) # ('hi', False, 500, 600)

     

    06) 딕셔너리 (Dictionary)

     - 키(key)-값(value)이 쌍으로 구성된 형태로 키는 값을 식별하는 역할을 하며 동일한 키를 가질 수 없음

     - '{}'를 사용하여 정의함

    # 딕셔너리
    d = {"name": '한여름', 'age': 20, 'home': False}
    print(d) # {'name': '한여름', 'age': 20, 'home': False}
    
    # 데이터 타입
    print(type(d)) # <class 'dict'>
    
    # key가 name인 value 출력
    print(d['name']) # 한여름
    
    # key 출력
    print(d.keys()) # dict_keys(['name', 'age', 'home'])
    
    # value 출력
    print(d.values()) #d ict_values(['한여름', 20, False])
    
    print(type(d.keys())) # <class 'dict_keys'>
    print(type(d.values())) # <class 'dict_values'>
    
    # key에 해당하는 항목 포함 여부 (정확히 일치해야 True가 나옴)
    print('addr' in d.keys()) # False
    print('age' in d.keys()) # True

     

    07) 집합 (Set)

     - 순서와 중복이 없는 값들이 모인 데이터 구조로, 인덱스로 접근이 불가함

     - 특정 값이 포함되어 있는지 확인할 수 있음

     - '{}'를 사용하여 정의함

    # set
    s = {10, 20, 30, 40, 30}
    print(s) # {40, 10, 20, 30} 중복값 허용하지 않음
    
    # add로 값 추가하기 (순서는 랜덤으로 추가됨)
    s.add(50)
    print(s) # {40, 10, 50, 20, 30}
    print(type(s)) # <class 'set'>
    
    # update로 값 추가하기
    s.update([60, 70, 80])
    print(s) # {70, 40, 10, 80, 50, 20, 60, 30}
    
    # add는 한 가지의 값, update는 여러가지의 값을 추가할 수 있음
    
    # 70이라는 값 삭제
    s.remove(70) 
    print(s) # {40, 10, 80, 50, 20, 60, 30}
    
    # 뽑히는 순서가 없기 때문에 인덱스를 쓸 수가 없음
    for i in s:
        print(i)
        # 40
        # 10
        # 80
        # 50
        # 20
        # 60
        # 30
    
    # set에서 값이 있는지 확인
    # 70이 s안에 있어?
    print(70 in s) # False
    print (30 in s) # True
    print (11 not in s) # True

     

    08) 함수

     - 반복적으로 사용되는 부분을 효율적으로 관리하기 위해서 사용

     - def라는 키워드를 사용하여 입력

    # 함수
    def 함수_이름(매개변수):
    	수행할_문장1
    	수행할_문장2
    	...
    # 들여쓰기가 이어지면 함수를 계속 정의한다는 뜻
    
    # 예제 1
    def print():
    	abc
    	cd
    	efg
    type(print) # <class 'function'>
    
    # 예제 2
    def add(a, b):
    	return a+b
    a = 3
    b = 4
    c = add(a, b) # add(3, 4)의 리턴값을 c에 대입
    print(c) # 7
    
    # 예제 3
    class MyPass:
        def byPass(self): # 기본적으로 자기 자신이라는 뜻으로 self를 붙여줌
            print("pass")
    
    myPass = MyPass()
    myPass.byPass()  # pass

     

    09) 얕은 복사 vs 깊은 복사

     - 얕은 복사는 주소 값을 참조함

     - 깊은 복사를 완전히 다른 객체로 만들어줌

    # 얕은 복사
    s = {10, 80, 50, 40, 20, 60, 30}
    s1 = s
    s.remove(40)
    # 값이 같음
    print(s) # {10, 80, 50, 20, 60, 30}
    print(s1) # {10, 80, 50, 20, 60, 30}
    
    # 깊은 복사
    s2 = s.copy() # 다른 객체로 만들어줌
    s.add(100)
    print(s) # {100, 10, 80, 50, 20, 60, 30}
    print(s2) # {80, 50, 20, 10, 60, 30} 100의 값이 추가가 안됨

     

     

    Python 관련 예제

     

     

    예제 1 : 데이터 타입 'list []'

     

    a = "REMEMBER NOVEMBER"
    
    b = a[:3] + a[12:15]
    print(b) # REMEMB
    
    c = "R AND %s" % "STR" # %s는 뒤에 내용을 그 자리에 넣음
    print(c) # R AND STR
    
    print(b+c) #REMEMBR AND STR

     

     

    예제 2 : 데이터 타입 'set {}'

     

    a = {'일본','중국','한국'}
    a.add('베트남')
    a.add('중국') # 중복값 허용 안함
    a.remove('일본')
    a.update(['홍콩','한국','태국'])
    
    # 순서가 없음
    print(a) # {'베트남', '홍콩', '한국', '태국', '중국'}

     

     

    예제 3 : 데이터 타입 'list []'

     

    # 파이썬의 print() 기본 출력은 엔터
    # 엔터 안 치고 값이 옆에 붙이기
    print('출력', end='') 
    print('출력', end='')
    print('출력', end='')
    #출력출력출력
    
    lol = [[1,2,3],[4,5],[6,7,8,9]]
    print(lol[0]) # [1, 2, 3]
    print(lol[2]) # [6, 7, 8, 9]
    print(lol[2][2]) # 8
    
    print(lol[2][1]) # 7
    for sub in lol:
        for item in sub:
            print(item, end=' ')
        print()
    # 1 2 3
    # 4 5
    # 6 7 8 9

     

     

    예제 4 : 데이터 타입 'function'

     

    def exam(num1, num2=2):
        print('a=', num1, 'b=', num2)
        # 문자열을 나열하여 출력하면 중간에 공백이 들어감
        
    exam(20) # 값이 안 들어왔을 때 자동으로 num2는 2가 됨
    # a= 20 b= 2

     

     

    예제 5 : 데이터 타입 'list [], function'

     

    class good:
        li = ["seoul","kyeonggi","inchon","daejeon","daegu","pusan"]
        
    g = good()
    str01 = ''
    for i in g.li:
        str01 = str01 + i[0]
    
    print(str01) # skiddp

     

     

    반응형

    댓글