ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 02-1. 파이썬 기초
    파이썬 2023. 8. 21. 16:12

    파이썬 기본 문법

    1.주석(comment)과 출력(print)

    • 주석
    • - 코드에 대한 설명이나 중간에 코드를 실행시키고 싶지 않을때 사용
    • 출력(print함수)
    • - 변수 또는 특정한 값들을 화면에 보여주게 하는 방법 - 코드 중간에 변수에 들어있는 값을 확인하고 싶을때 사용
    # 1,2,3,을 출력하는 코드
    print(1)
    """주석을 작성합니다"""

    ->1
    '주석을 작성합니다'


    2.변수 선언

    • RAM 저장공간에 값을 할당하는 행위->1->AI->3->3 4->5 5->1 2->4
    • c = 3 b = 4 print(b)
    • # 변수 값 수정 a = 1 b = 2 print(a,b)
    • f = g = 5 print(f,g)
    • # 다중할당 d, e = 3, 4 print(d,e)
    • a = 1 b = 2 c = a+b c
    • b = ""AI" print(b)
    • a = 1 print(a)

    3.식별자

    • 변수, 함수, 클래스, 모듈들의 이름을 식별자라고 합니다
    • 식별자 규칙
      • 소문자(a-z), 대문자(A-Z), 숫자, 언더스코어(_)를 사용
      • 가장 앞에 숫자 사용 불가
      • 예약어(이미 python에서 문법적으로 정의되어 있는 식별자)의 사용 불가
        • print, def, class, try, except ...
      • 컨벤션
        • snake case:변수, 함수 deep_noid
        • camel case: 클래스 LowDashError
    10a = 5

    ->SyntaxError: invalid decimal literal

    def 1 = 4

    ->SyntaxError: invalid syntax


    4. 데이터 타입

    • 변수를 선언할 때 메모리에 저장공간이 만들어지는데, 저장공간에 저장하는 데이터의 자료 타입을 설정
    • RAM 공간을 효율적으로 사용하기 위해서 저장공간의 타입을 설정
    • 동적타이핑(파이썬 특징)
      • 변수 선언시 저장되는 값에 따라서 자동으로 데이터 타입이 설정
    • 변수의 데이터 타입을 확인하는 함수 : type(<변수명>)

    4. 1. integer(정수), float(실수), string(문자열)

    a = 1
    # int a = 1
    b = 'python'
    c = 5.6
    type(a), type(b), type(c)

    ->(int, str, float)

    # 문자열
    a, b = 'data', ""
    print(type(a))
    print(type(b))

    -><class 'str'>
    <class 'str'>

    c = 'AI DX Deepnoid'
    print(c)

    ->AI DX Deepnoid

    c = 'AI "DX" Deepnoid'
    print(c)

    ->AI "DX" Deepnoid

    c = "AI 'DX' Deepnoid"
    print(c)

    ->AI 'DX' Deepnoid

    c = "AI \"DX\" Deepnoid"
    print(c)

    ->AI "DX" Deepnoid

    4.2.Boolean:True, False

    a, b = True, False
    print(type(a), a, type(b), b)

    -><class 'bool'> True <class 'bool'> False

    4.3.데이터 타입에 따른 연산

    a = 3+9
    print(a)

    ->12

    a, b = 5, 6
    print(a+b)

    ->11

    a, b = 'deep', 'noid'
    a + b

    ->'deepnoid'

    a = 'AI' * 6
    print(a)

    ->AIAIAIAIAIAI

    # 문자열의 길이 확인
    a = '12345'
    print(len(a))

    ->5


    4.4.오프셋(offset) - 머신러닝에서 데이터 처리할 때, 비전 딥러닝 과정에서 많이 사용

    - 특정 위치에 데이터를 선택하는 방법
    - [index] : 특정 위치의 하나의 데이터를 선택
    - [start : end] : 시작과 끝 위치 사이의 데이터를 선택
    - [start : end : stride] : 시작과 끝을 범위로 선택하되 점프하여 선택

    a = 'abcde'
    print(a[2])

    ->c

    a = 'abcde'
    print(a[5])

    ->『IndexError: string index out of range』

    print(a[1:3])

    ->bc

    print(a[:])

    ->abcde

    print(a[::2])

    ->ace

    # 오프셋에서의 음수
    print(a, a[3:], a[:-2])

    ->abcde de abc

    print(a[::-1])

    ->edcba


    4.5.문자열함수

    # 대문자로 변환하는 함수 : upper()
    d = 'abcde'
    e = d.upper()
    print(e)

    ->ABCDE

    f = ' DEEPNOID '
    # 소문자로 변환하는 함수 : lower()
    f.lower()

    ->' deepnoid '

    # strip() : 공백제거
    f.strip()

    ->'DEEPNOID'

    # 특정 문자열 치환 : replace()
    f.replace('DEEP', 'Sallow')

    ->' SallowNOID '

    # 특정 문자열 위치를 찾아주는 함수
    a = 'DEEP NOID AI DX'
    print(a.find("AI"))

    ->10


    4.6.컬렉션 데이터 타입 : list, tuple, dict

    - list [] : 순서가 있는 수정이 가능한 데이터 타입
    - tuple () : 순서가 있는 수정이 불가능한 데이터 타입
    - dict {} : 순서가 없고 키:값으로 구성되어 있는 데이터 타입

    4.6.1.list()

    # list 변수 선언하는 방법
    ls = [1,2,3,'four','five',6,True, 1.2]
    type(ls), ls

    ->(list, [1, 2, 3, 'four', 'five', 6, True, 1.2])

    # 리스트 데이터를 문자열로 합쳐주는 함수
    a = ['big', 'data','AI']
    b = ' '.join(a)
    print(b, type(b))

    ->big data AI <class 'str'>


    4.6.1.1.리스트의 오프셋

    - 문자열은 하나의 문자를 오프셋 단위로 인식
    - 리스트는 하나의 값을 오프셋 단위로 인식

    ls[3]

    ->'four'

    ls[1:3], ls[::-1], ls[-2:]

    ->([2, 3], [1.2, True, 6, 'five', 'four', 3, 2, 1], [True, 1.2])

    # ls[-2:]의 0번째 값
    ls[-2:][0]

    ->True

    txt = 'apple mango juice'
    ls = ['apple', 'mango', 'juice']
    result = txt.split(" ")
    print(result)

    ->['apple', 'mango', 'juice']

    4.6.1.2.list 함수

    - append: 데이터를 추가
    - sort: 데이터를 정렬
    - reverse: 데이터를 역순으로 정렬
    - pop: 가장 마지막 데이터를 출력하고 출력한 데이터는 삭제

    ls = [1,5,2,4]
    # append : 가장 뒤에 값을 추가
    ls.append(3)
    ls

    ->[1, 5, 2, 4, 3]

    # sort : 오름차순으로 정렬
    ls.sort()
    ls

    ->[1, 2, 3, 4, 5]

    ls.sort(reverse=True)
    ls

    ->[5, 4, 3, 2, 1]

    # reverse : 역순으로 정렬
    ls.reverse()
    print(ls)

    ->[1, 2, 3, 4, 5]

    # pop : 가장 마지막 데이터를 출력하고 출력한 데이터를 삭제
    number = ls.pop()
    number, ls

    ->(2, [1])

    ls = [1,5,2,4]
    num = ls.pop(2)
    num

    ->2

    del ls[2]
    ls

    ->[1, 5]

    # remove : 삭제하고 싶은 데이터 값을 직접 입력하여 삭제
    ls.remove(1)
    ls

    ->[5]

    # 리스트 복사
    ls1 = [1,2,3]
    ls2 = ls1 # 얕은 복사 : 주소값을 복사해준다
    ls1, ls2

    ->([1, 2, 3], [1, 2, 3])

    ls1[2] = 5
    ls1, ls2

    ->([1, 2, 5], [1, 2, 5])

    ls3 = ls1.copy()  # 원본을 유지하기 위해서 되도록이면 깊은 복사를 하자
    ls1, ls3

    ->([1, 2, 5], [1, 2, 5])

    ls1[0] = 20
    ls1, ls3

    ->([20, 2, 5], [1, 2, 5])

    tuple()

    - 리스트와 같이 순서가 있지만 수정이 불가능한 데이터 타입

    # 튜플 선언
    tp1 = 1,2,3
    tp2 = (4,5,6)
    type(tp1), type(tp2), tp1, tp2

    ->(tuple, tuple, (1, 2, 3), (4, 5, 6))

    tp1[0] = 6

    ->『TypeError: 'tuple' object does not support item assignment』

    # offset index 사용
    tp1[1], tp1[::-1]

    ->(2, (3, 2, 1))

    4.6.3.dict{}

    - 순서가 없고 {키:값} 으로 구성되어 있는 데이터 타입

    dic = {
        1 : 'one',
        'two':2,
        'Three':[1,2,3],
    }
    print(type(dic), dic)

    -><class 'dict'> {1: 'one', 'two': 2, 'Three': [1, 2, 3]}

    dic[1], dic['Three']

    ->('one', [1, 2, 3])

    # 데이터 수정
    dic['two'] = [1,2]
    dic

    ->{1: 'one', 'two': [1, 2], 'Three': [1, 2, 3]}

    # 딕셔너리에서는 오프셋 인덱스 사용 불가
    dic[2]

    ->『KeyError: 2』


    딕셔너리 함수

    - keys() : 키 데이터만 가져오는 함수
    - values() : 값 데이터만 가져오는 함수
    - items() : 키와 값을 가져오는 함수
    - update() : 두 개의 딕셔너리를 합쳐주는 함수

    dic = {
        'a':1,
        'b':2,
        'c':3
    }
    dic

    ->{'a': 1, 'b': 2, 'c': 3}

    # keys
    result = dic.keys()
    print(type(result), result)

    -><class 'dict_keys'> dict_keys(['a', 'b', 'c'])

    # values
    result = dic.values()
    print(type(result), result)

    -><class 'dict_values'> dict_values([1, 2, 3])

    # items
    result = dic.items()
    result

    ->dict_items([('a', 1), ('b', 2), ('c', 3)])

    # update
    dic1 = {1:'a', 2:'b'}
    dic2 = {2:'c', 3:'d'}
    dic1.update(dic2)
    dic3 = dic1
    print(dic3)

    ->{1: 'a', 2: 'c', 3: 'd'}


    5. 형변환

    - 데이터 타입을 변환하는 방법
    - 문자열을 숫자로, 숫자를 문자열로 형 변환
    - 딕셔너리의 values를 리스트로 변환
    - 문자열, 숫자, 리스트 데이터 타입을 boolean 형 변환

    # 문자열을 숫자로 형 변환
    a = 1
    b = '2'
    a + int(b)

    ->3

    data = 'abc'
    int(data)

    ->『ValueError: invalid literal for int() with base 10: 'abc'』

    # 숫자를 문자열로 형 변환
    str(a) + b

    ->'12'

    # boolean 형 변환
    bool(1), bool(0), bool(-1)

    ->(True, False, True)

    bool(''), bool('python'), bool(' ')

    ->(False, True, True)

    bool([1,2,3,4]), bool({})

    ->(True, False)

    bool({1:'one', 2:'two'}), bool({})

    ->(True, False)


    6. 입력과 출력

    # 입력
    value = input('insert string: ')
    print(type(value), value)

    ->insert string: AI
    <class 'str'> AI

    # 숫자 입력
    value = input('insert integer: ')
    value = int(value)
    print(type(value), value)

    ->insert integer: 1234
    <class 'int'> 1234

    # 개행이 된다
    print('deep')
    print('noid')

    ->deep
    noid

    # string format
    a, b = 1234, 'ESG'
    a, b

    ->(1234, 'ESG')

    result = 'a:' + str(a) + 'b' + b
    print(result)

    ->a:1234bESG

    result = 'detail :{} data2:{}'.format(a,b)
    print(result)

    ->detail :1234 data2:ESG


    7. 연산자

    - 산술연산자 : +,-,,/,//,%,* -> 사칙연산이 있는 연산자
    - 할당연산자 : 변수에 누적시켜서 연산 : +=, //=, **=
    - 비교연산자 : >, <, ==, !=, <=, >= : 결과로 True, False -> 두 개의 데이터를 비교하여 같다 크다 연산을 하는 연산자
    - 논리연산자 : True, False를 연산 -> or, and, not
    - 멤버연산자 : 특정 데이터가 있는지 확인할 때 사용 -> not in, in

    7.1.산술연산자

    (1+4)/2**2

    ->1.25

    a = 1
    b = 2
    c = a+b
    c

    ->3

    print(2-6)
    print(2+3)
    print(20/3)
    print(20//3)
    print(20%3)
    print(3**3)

    ->-4
    5
    6.666666666666667
    6
    2
    27


    부동소수점 문제

    - 10진수를 2진수로 변환하여 계산할 때 발생하는 문제

    0.1 + 0.2

    ->0.30000000000000004

    a, b = 0.1, 0.2
    a+b == 0.3

    ->False

    # 해결방법 1 : 정수 형태로 변환하여 진행
    a = a*10
    b = b*10
    (a+b)/10

    ->0.3

    # 해결방법 2 : 반올림
    a,b = 0.1, 0.2
    round(a+b, 1)

    ->0.3

    # 해결방법 3 : 고정소수점으로 변환 -> Decimal 안에는 string 타입만 들어와야 함
    from decimal import Decimal
    float(Decimal(str(a)) + Decimal(str(b)))

    ->0.3

    # 연산자 우선순위 : ** -> *,/,//,% -> +, -

    7.2. 비교연산자

    【 ==, !=, >, <, >=, <= 】

    # 조건문에서 많이 사용
    a, b = 20, 30
    print(a,b)
    a<b, a==b, a!=b

    ->20 30
    (True, False, True)

    7.3.할당연산자

    - 대입연산자와 산술연산자를 사용하여 만들어진 연산자
    - +=, -=, /=, *=, %=, //=

    data = 10
    print(data)

    ->10

    data = data+10
    print(data)

    ->20

    data+=10
    print(data)

    ->30

    7.4.논리연산자

    - 논리의 참과 거짓을 나타내는 연산자
    - and : 두 개의 논리가 모두 True인 경우 True를 출력
    - or : 두 개의 논리가 모두 False인 경우 False를 출력
    - not : True는 False로, False는 True로 변환

    print(True and False)
    print(True and True)
    print(False and False)

    ->False
    True
    False

    print(True or False)
    print(True or True)
    print(False or False)

    ->True
    True
    False

    print(not(True or False))
    print(not(True))

    ->False
    False

    a,b = 1,2
    (a<b)and(a==b)

    ->False

    7.5.멤버연산자 -> 데이터 집합에서 특정 데이터가 있는지 없는지 판단하는 연산자

    - <특정데이터> in <데이터집합> : 데이터 집합에서 특정 데이터가 있는지 확인해서 있으면 True
    - <특정데이터> not in <데이터집합> : 데이터 집합에서 특정 데이터가 있는지 확인해서 있으면 False, 없으면 True

    ls = ["jin",'john','endy']
    'endy' in ls, 'andrew' in ls, 'jin' in ls

    ->(True, False, True)

    'john' not in ls

    ->False

    data = {1:'one', 3:'three', 5:'five'}
    3 in data, '2' in data, 'three' in data # 딕셔너리에선 키값만 가능

    ->(True, False, False)

    'three' in data.values()

    ->True

    '파이썬' 카테고리의 다른 글

    02-4. 클래스와 예외처리  (0) 2023.08.28
    02-3. 함수  (0) 2023.08.27
    02-2.조건문과 반복문  (0) 2023.08.27
Designed by Tistory.