[부스트캠프 AI-Tech] 1주차 Day 1

LKM·2022년 1월 23일
0

✏️학습 정리


1. 개발 환경 설정

  • 운영체제(Operating System) 장,단점
    • Window: 초기엔 쉬움 / 모듈설치 어려움
    • Linux: 모듈설치 쉬움, 참고문서 많음 / OS 자체 사용이 어려움
    • Mac: 모듈설치 쉬움, 참고문서 많음 / 비쌈
  • Python Interpreter

    • 현재 2.7 버전과 3.X 버전이 존재
    • 현재는 3.X 기준으로 모든 시스템이 작동됨
  • 코드 편집기

    • anaconda: 간편한 파이썬, 패키지 관리도구, ML의 사실상 표준
    • vs code: MS에서 제공하는 코드 편집 도구, 최근 가장 빨리 발전중
    • jupyter notebook: 웹 기반, 인터랙티브, 코드 편집기의 표준
    • google colab: 구글에서 제공하는 클라우드 기반, 인터랙티브 코드 편집기



2-1. Variable & List

  • Variable
    • 가장 기초적인 프로그래밍 문법 개념

    • 변수는 값을 저장하는 장소이며, 메모리 주소를 가지고 있고, 값은 메모리 주소에 할당됨

    • 변수와 메모리 주소

      선언되는 순간 메모리 특정영역에 물리적인 공간이 할당됨

      ref.https://m.blog.naver.com/sarang2594/221249066921

  • Dynamic Typing

    • java와 c언어의 경우 변수를 선언할 때 type을 지정해야한다.
    • python의 경우 변수를 선언할 때 type을 지정하지 않아도 된다. (코드 실행시점에 변수의 type을 결정한다!)
  • Basic Operations

    • 기본 자료형: int, float, string, bool
    • 연산자: +, -, *, / 같은 기호들
    • 피연산자: 계산이 되는 숫자들
    • 데이터 형 변환
      • float ↔ int : float → int 로 변환시 소수점 이하 내림
      • type 함수: 변수의 데이터 형을 확인하는 함수
  • List

    • 시퀀스 자료형으로 int, float, string 같은 데이터 타입 포함 (하나의 list에 다양한 데이터 타입 들어갈 수 있다)
    • Indexing
      colors = ['Red', 'Blue', 'Green']
      print(colors[0])  # Red
      print(colors[1])  # Blue
      print(colors[-1])  # Green
      print(len(colors))  # 3
    • Slicing
      colors = ['Red', 'Blue', 'Green', 'Black', 'White', 'Yellow', 'Gray']
      print(colors[0:3], colors[-2:0])  # 0부터 2까지, -2부터 끝까지
      print(colors[:])  # 처음부터 끝까지
      print(colors[-50:50])  # 범위를 넘어갈 경우 자동으로 최대 범위 지정
      print(colors[::2], a[::-1])  # 2칸 단위로, 역으로 슬라이싱
    • 리스트 연산 및 시간복잡도 ref. https://gomguard.tistory.com/181

    • 리스트 메모리 저장 방식
      • 해당 리스트 변수에는 리스트 주소값이 저장됨
      ref. https://bearwoong.tistory.com/85
      • copy issue??

        num1 = [1, 5, 2, 3, 4]
        num2 = num1
        print(num2)  # [1, 5, 2, 3, 4]
        num1.sort()
        print(num2)  # [1, 2, 3, 4, 5]
        
        ## 해결법 ##
        # 1
        num2 = num1[:]
        
        # 2
        num2 = list(num1)
        
        # 3
        num2 = num1.copy()
        
        # 4
        num2 = [] + num1
    • 패킹과 언패킹
      • 패킹: 한 변수에 여러 개의 데이터를 넣는 것

      • 언패킹: 한 변순의 데이터를 각각의 변수로 변환

        num = [1, 2, 3, 4]  # 패킹
        a, b, c, d = num  # 언패킹
    • 2차원
      • 리스트 안에 리스트를 만들어 행렬을 생성
      ref. https://dojang.io/mod/page/view.php?id=2291
      • 2차원 리스트 복사

        import copy
        
        a = [[10, 20], [30, 40], [50, 60]]
        b = copy.deepcopy(a)  # copy.deepcopy 함수를 사용하여 깊은 복사
        b[0][0] = 100
        
        print(a)  # [[10, 20], [30, 40], [50, 60]]
        print(b)  # [[100, 20], [30, 40], [50, 60]]



2-2 Function and Console I/O

  • Function
    • 어떤 일을 수행하는 코드의 덩어리

      def 함수 이름 (parameter1, ....):
      	수행문1 (statements)
          	수행문2 (statements)
      	return <반환값>
    • parameter: 함수의 입력 값 인터페이스

    • argument: 실제 parameter에 대입된 값

  • Console I/O
    • input 함수: 콘솔창에서 문자열을 입력 받는 함수
    • print 함수: 모니터에 결과물을 출력하는 함수
    • print formatting
      • %-format (과거에 사용)

        print('%s %s' % ('red', 'blue'))
        print('%d %d' % (1, 2))
        
        num = 1; color = 'red'
        print("color: %s and number: %d" % (color, num))
      • str.format 함수

        print('{} {}'.format('red', 'blue'))
        print('{} {}'.format(1, 2))
        
        num = 1; color = 'red'
        print("color: {} and number: {}".format(color,num))
        print("color: {0} and number: {}".format(color,num))
      • f-string (최근에 많이 사용)

        num = 1; color = 'red'
        print(f"color: {color} and number: {num}")
        
        # padding
        print(f'{num:10}')    1
        print(f'{num:>10}')            1
        print(f'{num:*<10}')  1*********
        print(f'{num:*>10}')  *********1
        print(f'{num:*^10}')  ****1*****



2-3 Conditionals and Loops

  • Condition

    • 조건에 따라 특정한 동작을 하게하는 명령어
    • if - else
      if <조건>:
      	<수행 명령>  # 조건이 True일 경우
      else:
      	<수행 명령>  # 조건이 False일 경우
    • 조건 판단
      • x == y: x와 y의 값이 같은지 검사

      • x is y: x와 y의 메모리 주소가 같은지 검사

        # tip. -5 ~ 256은 정적 메모리로 저장되어 있다!
        a = 100
        b = 100
        a is b  # True
        
        a = 300
        b = 300
        a is b  # False
    • 논리 키워드
      • and 연산

        • T and T ⇒ T
        • T and F ⇒ F
        • F and T ⇒ F
        • F and F ⇒ F
      • or 연산

        • T or T ⇒ T
        • T or F ⇒ T
        • F or T ⇒ T
        • F or F ⇒ F
      • not 연산
        - not T ⇒ F
        - not F ⇒ T

        # 참고
        a = 100
        b = 10
        c = 0
        d = ''
        
        a and b  # 10
        c and d  # 0
        
        a or b  # 100
        c or d  # ''
    • 삼항 연산자
      value = 12
      is_even = True if value % 2 == 0 else False  # True
  • Loop

    • 정해진 동작을 반복적으로 수행하게 하는 명령문
    • for loop
      for 변수 in iterator_object:
          <수행 명령>
    • while
      • 조건이 만족하는 동안 반복 명령문 수행

        while 조건:
            <수행 명령>
    • 반복 제어
      • break: 특정 조건에서 반복 종료
      • continue: 특정 조건에서 남은 반복 명령 skip
      • else: 반복 조건이 만족하지 않을 경우 반복 종료시 1회 수행 (break로 종료된 반복문은 else block이 수행되지 않음)
  • Debugging

    • 코드의 오류를 발견하여 수정하는 과정
    • 문법적 에러: Error 메시지 분석하여 수정
    • 논리적 에러: 중간 중간 print문을 찍어서 확인해보자!



2-4 String and Advanced function concept

  • String

    • 시퀀스 자료형으로 문자형 data를 메모리에 저장

    • 1 byte(8 bit) 크기로 한 글자씩 메모리 공간이 할당됨

    • Indexing (List와 같은 형태로 데이터를 처리함)

    • Slicing (List와 동일)

    • 덧셈, 뺄셈 연산 가능, in 명령으로 포함여부 체크

    • 내장함수

      함수명기능
      len(s)문자열 길이 반환
      s.upper()대문자로 변환
      s.lower()소문자로 변환
      s.capitalize()첫 문자를 대문자로 변환
      s.title()제목 형태로 변환 (띄워쓰기 후 첫 글자만 대문자)
      s.count(’a’)문자열 s에 ‘a’가 들어간 횟수 반환
      s.find(’a’)문자열 s에 ‘a’가 들어간 위치 반환 (처음 찾은 위치 반환)
      s.rfind(’a’)문자열 s에 ‘a’가 들어간 위치 반환 (가장 마지막에 찾은 위치 반환)
      s.startswith(’a’)문자열 s는 ‘a’로 시작하는 문자열여부 반환
      s.endswith(’a’)문자열 s는 ‘a’로 끝나는 문자열여부 반환
      s.strip()좌우 공백 제거
      s.rstrip()오른쪽 공백 제거
      s.lstrip()왼쪽 공백 제거
      s.split()공백 기준으로 나눠 리스트로 반환
      s.split(’a’)a를 기준으로 나눠 리스트로 반환
      s.isdigit()문자열이 숫자인지 여부 반환
      s.islower()문자열이 소문자인지 여부 반환
      s.isupper()문자열이 대문자인지 여부 반환
    • 특수문자

      • 백슬래시 “\”를 사용하여 키보드로 표시하기 어려운 만자들 표현
      • \n: 줄 바꾸기, \t: tab 키 ...
    • raw string

      • 특수 기호인 \ escape 글자를 무시하고 그대로 출력

        print(r"첫번째 줄. \n 두번째 줄")  # 첫번째 줄. \n 두번째 줄
  • Function 2

    • 함수에서 parameter를 전달하는 방식
      • call by value
        • 인자를 넘길 때 값만 넘김 (인자값 변경시 호출자에게 영향을 주지 않음)
      • call by reference
        • 인자를 넘길 때 메모리 주소를 넘김 (인자값 변경시 호출자의 값도 변경됨)
      • call by object reference (파이썬)
        • 객체의 주소가 함수로 전달되는 방식

        • 전달된 객체 변경시 호출자에게 영향을 주나, 새로운 객체 생성시 영향 X

          def func(nums):
          		nums.append(1)  # 기존 객체의 주소값에 [1] 추가
          		nums = [1, 2, 3]  # 새로운 객체 생성
    • Scoping Rule
      • 지역변수: 함수내에서만 사용
      • 전역변수: 프로그램 전체에서 사용 (함수 내에서 사용시 global 키워드 사용)
    • Recursive Function
      • 자기자신을 호출하는 함수
      • 재귀 종료 조건 존재, 종료 조건까지 함수호출 반복
      • 대표적인 예시: factorial, fibonacci
    • Function Type hints
      • 함수의 리턴 type, parameter type 표시
      • 장점
        • 사용자에게 인터페이스를 명확히 알려줄 수 있다.
        • 안정성 확보
        • 코드의 발생 가능한 오류를 사전에 확인
    • Docstring
  • 코딩 컨벤션

    • flake8로 검사
    • black으로 컨벤션 준수
profile
함께 자라기

0개의 댓글