부스트 캠프 ai tech 1주 3일차 Python Basic for AI (9)


14. Exception Handing

  • 사전에 인지했거나 예측 하지못한 각종의 예외들을 대처하기위한 방법
  • 개발자가 반드시 명시적으로 정의해야한다
  • try ~ except
1
2
3
4
try:
예외 발생 가능 코드
except (exception 종류):
예외 발생시 대응하는 코드
  • try ~ except ~ else
    • else : 예외가 발생하지 않을때 진행하는 부분
1
2
3
4
5
6
try:
예외 발생 가능 코드
except (exception 종류):
예외 발생시 대응하는 코드
else:
예외가 발생하지 않을 때 동작하는 코드
  • try ~ except ~ finally
    • finally : 예외가 발생해도 진행하는 부분
1
2
3
4
5
6
try:
예외 발생 가능 코드
except (exception 종류):
예외 발생시 대응하는 코드
finally:
예외에 상관없이 동작하는 코드
  • 기본적으로 제공하는 exception 종류 : 링크
  • raise 함수를 사용하여 강제로 Error나 Exception을 발생시킬 수 있다.

15. File Handing

  • 코드로 파일을 처리하기 위한 방법
  • 파일 처리를 위해서 open 을 사용한다
    1
    2
    3
    4
    f = open('파일이름', '접근모드')
    ...
    ...
    f.close()
    모드 설명
    r 읽기모드 - 파일 내용을 읽어올 때 사용
    w 쓰기모드 - 파일 내용을 수정할 때 사용
    a 추가모드 - 파일에 내용을 추가할 때 사용
    b 바이너리 모드 - 바이너리형식으로 파일을 읽기/수정/추가할 때 사용
    + 파일을 읽고 쓰기용으로 열기
    (앞의 모드에 따라서 파일 포인터의 위치차이가 존재한다)
    x 쓰기모드로 생성하는데 이미 파일이 존재할 경우 예외를 발생시킨다

16. Logging Handling

  • Log
    프로그램이 실행되는 동안 일어 나는 정보를 말한다. 이런 기록들을 모아 분석하여 의미있는 결과를 도출 할 수 있기 때문에 Log를 따로 관리하는 모듈을 사용한다
  • Python의 기본 Log 관리모듈 logging이 존재한다
  • logging level에 관련한 표 : 아래로 내려갈수록 높은 레벨의 log이다

logging level

부스트 캠프 ai tech 1주 3일차 Python Basic for AI (8)


12. Module 모듈

  • 작은 프로그램 조각
    이 조각들을 모아서 하나의 큰 프로그램을 만든다
  • 사용하는 이유 : 다른 프로그램에서 사용하기가 편하다
    편하면 무조건 해야지
  • module == .py 파일
  • import 문을 사용하여 같은폴더 내의 module 이나 package를 호출한다
  • module을 호출하는 방법
    1. 별칭으로 호출
    2. 특정 함수 또는 클래스만 호출
    3. 모듈에 모든 함수또는 클래스를 호출
1
2
3
import numpy as np  # 1
from numpy import ndarray # 2
from numpy import * # 3
  • python에는 수많은 Built-in Modules이 존재한다
    • random, tqdm, time, collection, heap, Math …

13. package

  • 다양한 모듈이 모여서 이루어진 코드 묶음
  • 오픈소스들이 모두 패키지로 관리된다
  • 각 폴더별로 필요한 모듈을 구현하고, __init__.py를 구성한다
  • 추후에 __init__.py 와 __main__.py 작성법에 관련되어 포스팅을 할 예정이다

tree

Week1 Peer Session


Peer Session 정리

  • 일주일동안 피어세션에서 주고받았던 질문에 대해서 추려서 정리한 글이다

1. python 메모리 관리는 어떤 방식으로 이루어지나?

2. list 구조체의 메모리는 어떤방식으로 할당 될까

  • python의 list는 다른 언어의 array와 다르게 list 내부에 여러가지 데이터 형식이 들어가는 것이 가능하다
    • linked list 형태로 data가 추가 될 때마다 그 형식에 맞는 메모리를 할당해서 연결하기 때문에 가능하다

3. python float의 할당 방식은 어떻게 이루어 질까? + int 형과의 비교

  • python의 float 형은 64bit의 부동소수점으로 표현을 한다
  • 기억 범위 : $4.9×10^{-324}\sim1.8×10^{308}$
  • 부동소수점 표현
    • 부호, 지수비트, 가수비트로 나눠서 수를 표현하는 방식을 말한다
    • 자세한 설명은 따로 포스팅 할 예정이다

3.1 python에서 int형의 범위는 어떻게 될까

  • python3 버전으로 넘어오면서 int형의 overflow가 사라졌다
  • 그래서 int형으로 표현할 수 있는 범위는 메모리가 허용하는 한도내에서 무제한이다
  • 조금더 자세하게 설명하자면 python2 버전에서는 int와 long 타입을 같이 사용하는 구조였는데 int의 범위가 넘어가면 자동으로 long 타입으로 넘어가는 형식이었다.
  • python3에서는 아에 long 타입이 int와 결합해서 수의 크기에 따라 탄력적으로 가용메모리를 추가적으로 할당하는 Arbitrary presicion을 사용한다

Week1 - Day 3 Review


오늘 하루 한 것

  • 강의듣기
    • Ai Math 5강까지
  • 과제
    • Gradient Descent 완료
  • 정리
    • 경사하강법 완료
    • python 5-1까지 정리 완료

피어세션

  • numpy dtype float32 최대 최소값에 관해서
    • int형은 단순 비트계산이지만 float형은 부동소수점형으로 지수비트와 유효자리비트로 나뉘어있기 때문에
    • int형 -> 정확함
    • float형 -> 자세히보면 잘라먹음

내일 할것

  • 역전파, 통계, CNN, RNN 정리
  • 심화과제 2, 3

주말에 할 것

  • 추가 정리
    • 정규식
    • pickles
    • __init__.py, __main__.py
    • numpy, pandas 정리

느낀점

  • 아직도 할게 많다… 정리 빨리 끝내고싶다

부스트 캠프 ai tech 1주 3일차 Python Basic for AI (7)


11. Object Oriented Programming (객체 지향적 프로그래밍, OOP)

  • 객체(Object)란?
    프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간, 독립된 단위를 의미한다
  • OOP는 여러개의 독립된 객체들의 모임으로 프로그램을 구성하는것을 이야기한다

11.1 Object in Python

  • Python에서의 객체는 class로 선언이 가능하다

  • class는 속성(Attribute)와 명령어(Method)을 가지고 있다

    • Attribute
      해당 class가 가지고 있는 특별한 변수를 말한다. 이 변수는 다른 객체가 될 수도 있다. __init__(self) 메서드로 속성을 미리 설계할 수 있다
    • Method
      해당 class가 내장하고 있는 함수들을 지칭한다. 메서드는 class 안에 기존 함수와 같은 방식으로 정의가 가능하나, 반드시 self를 추가해야 메서드로 인정된다. 또한 python에는 특별한 메서드 들이 존재한다
  • class의 이름 선언과 함께 __init__메서드에 parameter 값들을 입력하면 객체를 생성 할 수 있다

  • class_name.method_name()과 같은 형식으로 객체의 메서드를 호출 할 수 있다

  • 예시 축구선수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class SoccerPlayer(object):
def __init__(self, name, position, back_number):
self.name = name
self.position = position
self.back_number = back_number

def change_back_number(self, new_number):
print("선수의 등번호를 변경합니다 : From %d to %d" % (self.back_number, new_number))
self.back_number = new_number

def kick(self):
pass

def heading(self):
pass

def moving(self):
pass

jinhyun = SoccerPlayer("Jinhyun", "MF", 10)
print("현재 선수의 등번호는 :", jinhyun.back_number)
jinhyun.change_back_number(5)
print("현재 선수의 등번호는 :", jinhyun.back_number)
==================================================
output:
현재 선수의 등번호는 : 10
선수의 등번호를 변경합니다 : From 10 to 5
현재 선수의 등번호는 : 5

11.1.1 Special method

  • class에는 __init__ 과 같이 특정한 일을 전담하는 정해진 메서드들이 존재하고 이것들을 Special method라고 부른다
  • class 내부에 Special method를 정의하면 객체간의 operator 연산 등 여러가지를 할 수 있다.
  • 자세한 내용은 링크로 남기고 생략한다.
  • 여러가지 스페셜 메서드

11.2 OOP의 특징

  • Visibility 가시성
    • 객체의 정보를 볼수 있는 레벨을 조절한다
    • 유저에게 필요한 부분은 보여주고(추상화), 노출할 필요가 없는 정보들은 숨긴다(캡슐화)
    • __ 를 속성이나 메서드 앞에 붙여서 객체 외부에서 접근할 수 없게 한다
    • 결론 : docstring 잘 쓰는게 중요하다
  • Inheritance 상속
    • 부모클래스로부터 속성과 Method를 물려받은 자식클래스를 생성 하는 것을 말한다
    • super를 통해 부모클래스의 메서드를 호출 할 수 있다
    • 코드의 재사용이 목적이다
  • polymorphism 다형성
    • 같은 이름의 메서드의 내부로직을 다르게 사용할 수 있다.
    • 자식클래스에서 메서드를 재정의(overiding)하여 새로 맞춰서 사용이 가능하다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class TeamAPlayer(SoccerPlayer):
def __init__(self, regular):
super().__init__(name, position, back_number)
self.regular = regular

def is_regular(self):
print(self.name, '선수는 주전', '입니다' if self.regular else '이 아닙니다')

def change_back_number(self, new_number):
print(f"팀 A {self.name}선수의 등번호를 변경합니다")
super().change_back_number()
self.back_number = new_number

jinhyun = TeamAPlayer("Jinhyun", "MF", 10, False)
jinhyun.is_regular()
jinhyun.change_back_number(5)
=============================
output:
Jinhyun 선수는 주전 이 아닙니다
팀 A Jinhyun선수의 등번호를 변경합니다
선수의 등번호를 변경합니다 : From 10 to 5

참고 자료

객체 지향 프로그래밍 - wikipedia

부스트 캠프 ai tech 1주 2일차 Python Basic for AI (6)


10. Pythonic Code

  • Python 스타일의 효율적인 코딩기법
  • 사용하면 코드를 간결하고 이쁘게 작성할 수 있다. 그리고 잘하는 사람처럼 보인다
    • 그러니 모두 잘 익히고 사용하자

10.1 List comprehension

  • 기존의 list를 사용하여 간단한 list를 만드는 기법
  • for 문 + list.append 보다 속도가 빠르다
  • 조건문과 함께 더 다양한 list를 표현 가능하다
    1
    2
    3
    4
    5
    6
    # 기존 방법
    a = []
    for i in range(10):
    a.append(i)
    # list comprehension
    a = [i for i in range(10)]

10.2 enumerate & zip

  • enumerate
    • for 문에서 iterable object의 element를 추출할 때 인덱스 번호와 함께 추출
      1
      2
      3
      4
      5
      for i, x in enumerate('apple'):
      print(i, x) # 0 a, 1 p, ... , 4 e

      list(enumerate('apple'))
      output = [(0, 'a'), (1, 'p'), (2, 'p'), (3, 'l'), (4, 'e')]
  • zip
    • 여러개의 list값을 병렬적으로 추출해서 하나의 list로 재결합 시킨다.
      1
      2
      3
      4
      5
      a = (1, 2, 3)
      b = (4, 5, 6)
      print(list(zip(a, b)))
      ######################
      [(1, 4), (2, 5), (3, 6)]

10.3 map & lambda & reduce

  • map
    • iterable object의 element에 각각 특정한 함수를 적용할 수 있는 함수
    • 아래의 lambda와 병행하여 자주, 많이 쓰인다
    • 실행시점의 값을 생성해서 메모리를 효율적으로 사용한다
      1
      2
      3
      4
      5
      6
      7
      def function(x):
      return x**2

      a = [1, 2, 3, 4, 5]
      print(list(map(function, a)))
      #############################
      output => [1, 4, 9, 16, 25]
  • lambda
    • 함수를 따로 정의할 필요 없이 사용할 수 있는 익명 함수
    • PEP8에서 권장하지는 않지만 아직도 많이쓰고 스스로도 많이 쓰고있다
      • 어려운 문법, 테스트하기 힘듬, docstring 지원안함, 코드해석이 어려움 등등의 문제가 있다
    • 간단한 명령문인 경우 따로 정의하지 않고 lambda를 사용하는 편이다
      1
      2
      3
      4
      a = [1, 2, 3, 4, 5]
      print(list(map(lambda x: x**2, a)))
      #############################
      output => [1, 4, 9, 16, 25]
  • reduce
    • map과 비슷한 동작으로 list에 똑같은 함수를 적용해서 합쳐나간다
    • 2년 넘게 공부하면서 한번도 쓴적이 없다
    • python3 버전에서 lambda와 같이 사용을 권장하지 않는다
      1
      2
      from functools import reduce
      print(reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]))

reduce 이미지

10.4 iterable object

  • 시퀸스형 자료형에서 데이터를 순서대로 추출하는 object
  • object 내부적으로 __iter__와 __next__라는 함수(메서드)가 존재한다
  • .iter() 와 .next() 함수로 iterable 객체를 iterator object로 사용이 가능하다
  • 아래의 generator와 같이 사용하면 정말 강력한 성능을 보이게 된다
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cities = ["Seoul", "Busan", "Jeju"] 
    iter_obj = iter(cities)
    print(next(iter_obj))
    print(next(iter_obj))
    print(next(iter_obj))
    next(iter_obj)
    ==============
    output:
    Seoul
    Busan
    Jeju
    Error 발생 더이상 출력할 수 있는 원소가 없음

10.5 generator

  • iterable object를 특수한 형태로 사용해주는 함수

  • object 내부의 element가 호출되는 시점에 값을 메모리에 반환한다

    • yield를 사용해서 한번에 하나의 element만 반환함
      • 이 것이 궁금하다면 python 코루틴 관련해서 찾아보는것이 좋다
  • 일반적인 iterator 보다 generator가 훨씬더 적은 메모리를 사용한다

  • 먼 훗날에 나올 Dataset이 generator를 이용한 object이다

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    def my_gen():
    n = 1
    print('This is printed first')
    # Generator function contains yield statements
    yield n

    n += 1
    print('This is printed second')
    yield n

    n += 1
    print('This is printed at last')
    yield n


    # Using for loop
    for item in my_gen():
    print(item)

    =====================
    output:
    This is printed first
    1
    This is printed second
    2
    This is printed at last
    3

    예제출처

  • generator도 list comprehension과 유사한 형태로 표현이 가능하다

  • [] 대신 ()로 표현한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    gen_ex = (n*n for n in range(500)) 
    print(next(gen_ex)) # 0 1 4 ....
    ```

    ### 10.6 function passing arguments
    * 함수에 입력되는 Argument는 아래와 같이 다양한 형태를 가진다
    * Keyword arguments
    * 함수에 입력되는 parameter의 변수명을 같이 입력하여 순서에 상관없이 parameter를 지정 해 줄 수 있다
    ```python
    def function(a, b):
    return a*2 + b

    print(function(3, 5))
    print(function(b=5, a=3))
    =========================
    output:
    11
    11
    • Default arguments

      • parameter의 기본값을 사용한다
      • 따로 argument가 입력되지 않을 경우 기본값으로 출력한다
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        def function(a, b=0):
        return a*2 + b

        print(function(3, 1))
        print(function(3))

        ==================
        output:
        7
        6
        ```

        * Variable-length arguments(가변인자)
        * 개수가 특정되지 않은 변수를 함수의 parameter로 사용하는 방법
        * Asterist * 기호를 사용하여 argument를 나타낸다
        * 입력된 값은 Tuple로 사용할 수 있다
        * 함수에서 단 하나 존재하고, 뒤에 일반적인 argument가 존재할 수 없다

        ```python
        def asterisk_test(a, b, *args):
        print(args)
        return a+b+sum(args)
        print(asterisk_test(1, 2, 3, 4, 5))

        ===================================
        output:
        (3, 4, 5) 튜플의 형태로 존재한다
        15
    • Keyword Variable-length arguments(키워드 가변인자)

      • Parameter의 이름을 따로 지정하지않고 입력하는 방법
      • Asterisk 두개 (**) 를 사용하여 함수의 parameter를 표시한다
      • 입력된 값은 dict type으로 사용할수 있다
      • 함수에서 단 하나 존재하고 뒤에 다른 argument가 존재할 수 없다
1
2
3
4
5
6
7
8
def asterisk_test(a, b, **kargs):
print(kargs)
return a+b+sum(kargs.values())
print(asterisk_test(1, 2, three=3, four=4, five=5))
===================================================
output:
{'three': 3, 'four': 4, 'five': 5}
15

10.7 Asterisk

  • Asterisk는 위의 가변인자와 곱하기 연산자 이외의 기능이 존재한다
  • list, tuple 등의 자료형 변수 앞에 *를 붙여서 unpacking 할 수 있다
  • dict type의 경우 **를 붙여서 키워드 가변인자처럼 출력이 가능하다
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a = [1, 2, 3, 4]
    print(a)
    print(*a)
    b = {'one':1, 'two':2, 'three':3}
    print(*b)
    print(asterisk_test(1, 2, **b))
    ===============================
    output:
    [1, 2, 3, 4]
    1 2 3 4
    one two three
    {'one': 1, 'two': 2, 'three': 3}
    9

부스트 캠프 ai tech 1주 2일차 Python Basic for AI (5)


9. 데이터 구조

  • Stack & Queue
  • Tuple & Set
  • Dictionary
  • Collection

9.1 Stack & Queue

  • Stack
    • 나중에 넣은 데이터를 먼저 반환하도록 설계된 데이터 구조
    • LIFO (Last in First Out)
    • 입력을 Push, 출력을 Pop이라고 한다
    • python의 list는 기본적으로 Stack의 구조를 가진다
  • Queue
    • 먼저 넣은 데이터가 먼저 반환하도록 설계된 데이터 구조
    • FIFO (First in First Out)
    • 입력은 Push, 출력은 get 이라고 한다
    • 보통 python의 Dequeue를 사용한다.
  • 정해진 크기를 넘어갈 경우 overflow, element가 없는데 반환을 시킬경우 underflow라고 한다.

9.2 Tuple & Set

  • Tuple
    • 값의 변경이 불가능한 리스트
    • index로 접근해서 값을 수정하는것을 막는다
    • 정의 할 때 ( )를 사용한다
    • 리스트와 동일하게 (+, *)연산, Indexing, Slicing을 사용한다
    • 사용자의 실수에 의한 에러를 사전에 방지하기 위해 변경할 필요가 없는 데이터를 저장할 때 사용한다
1
2
3
t = (1, ) # 값이 1개인 Tuple은 반드시 ,를 붙여야 함
t + t # (1, 1)
t[0] = 2 # Error 발생함
  • Set
    • 값을 순서없이 저장, 중복을 허용하지 않는 자료형(확인필요)
    • set( )을 통하여 객체를 생성한다
    • set을 이용하여 다양한 집합연산이 가능하다
      1
      2
      3
      4
      5
      6
      7
      8
      s1 = set([1, 2, 3, 4, 5])
      s2 = set([1, 3, 5, 7, 9])
      s1.union(s2) # (1, 2, 3, 4, 5, 7, 9) 합집합
      s1 | s2 # (1, 2, 3, 4, 5, 7, 9) 합집합
      s1.intersection(s2) # (1, 3, 5) 교집합
      s1 & s2 # (1, 3, 5) 교집합
      s1.difference(s2) # (2, 4) 차집합
      s1 - s2 # (2, 4) 차집합

9.3 Dictionary

  • 데이터를 저장 할 때 구분지을수 있는 값(Key)를 함께 저장
  • Hash 구조
  • Key값을 활용하여 Value를 관리한다.
  • dict( )나 { }로 객체를 생성한다
1
2
3
4
5
6
7
8
9
10
number_dic = {'one': 1, 'two': 2, 'three': 3}
number_dic['one'] # 1, Key 값으로 value 출력 가능
country_code.items() # 데이터 출력
# dict_items([('one', 1), ('two', 2), ('three', 3)])
number_dic.keys() # key만 출력
# dict_keys(['one', 'two', 'three'])
number_dic.values() # value만 출력
# dict_values([1, 2, 3])
number_dic.get(1) # None, 아닐경우 None
number_dic.get('one') # 1, key가 존재할 경우 values 값을 return

9.4 Collections

  • Python Built-in 확장 모듈

  • 편의성, 실행 효율 등을 사용자에게 제공함

  • 자주 사용되는 deque, difaultdict, Counter에 대해서만 다룰것이다

  • deque

    • Stack과 Queue의 기능을 모두 지원하는 데이터 구조
    • List에 비해 효율적인 저장방식을 지원한다
      • popleft()등 삽입 삭제에 매우 효율적임
    • Linked List의 특성(rotate, reverse)을 지원한다
    • 기존 list 형태의 함수를 모두 지원함
      1
      2
      3
      4
      5
      from collections import deque
      q = deque()
      q.append(a) # [a]
      q.appendleft(b) # [b, a]
      q.popleft() # [a]
  • defaultdict

    • Dict type값에 기본값을 지정해서 key가 존재하지 않아도 기본값으로 찾아지는 기능을 가지고 있다
    • defaultdict(datatype) 으로 기본값의 자료형을 정하면서 dict객체를 생성할 수 있다
      1
      2
      3
      4
      from collections import defaultdict
      dic = defaultdict(int)
      dic['a'] += 1 # {'a': 1}
      dic['b'] -= 1 # {'a': 1, 'b': -1}
  • Counter

    • 시퀸스 type의 data element들의 갯수를 dict형태로 변환
      1
      2
      3
      from collections import Counter
      c = Counter([1, 3, 5, 3, 2, 4, 3])
      # Counter({1: 1, 3: 3, 5: 1, 2: 1, 4: 1})

부스트 캠프 ai tech 1주 2일차 Python Basic for AI (4)


8. 문자열(string)

  • char들이 저장되어있는 시퀸스 자료형
  • 기본적으로 list와 같은 형태로 데이터를 처리한다
    • Indexing, Slicing, +, * 연산은 리스트와 동일하게 수행한다

8.1 자주 사용하는 문자열 함수

함수명 기능
len(a) 문자열의 문자 개수를 반환
a.upper() 대문자로 변환
a.lower() 소문자로 변환
a.capitalize() 첫 문자를 대문자로 변환
a.strip(input)
a.rstrip(input)
a.lstrip(input)
좌우/우/좌 input을 없앰
a.split(input) input 기준으로 문자열을 나눠서 리스트로 반환
a.isdigit()
a.islower()
a.isupper()
문자열이 숫자/소문자/대문자인지 여부 반환
a.startswith(input)
a.endswith(input)
문자열이 input으로 시작/끝 나는 문자열 여부 반환
str.join(list) list의 원소들을 str로 연결해서 하나의 문자열로 나타낸다
단 list의 원소는 모두 문자열 type 이어야 한다

8.2 다양한표현

  • \ (백슬래쉬) : 특수하게 사용하는 문자열을 표현하기위해서 사용한다
    • 백슬래쉬를 표현하기 위해서는 \\ 두번 사용하면 된다.
  • \n : 줄바꿈을 의미하는 특수문자
  • \t : TAB
  • “””문자열””” : 줄바꿈도 자유롭게 입력 가능한 문자열 표현
  • r”문자열” : 특수문자를 무시하고 그대로 출력함
    1
    2
    print(r'이건 줄바꿈 기호입니다 \n')
    # output : 이건 줄바꿈 기호입니다 \n

부스트 캠프 ai tech 1주 2일차 Python Basic for AI (3)


6. Condition (조건문)

  • 조건에 따라 특정한 동작을 하게 하는 명령어
  • python 에서는 if, elif, else의 예약어를 사용한다
  • 조건을 나타내는 기준과 실행해야하는 명령으로 구성된다
  • 조건이 참일때만 실행한다
    1
    2
    3
    4
    5
    6
    7
    8
    if age <= 13:
    print('초등학생')
    elif age <= 16:
    print('중학생')
    elif age <= 19:
    print('고등학생')
    else:
    print('성인')
비교연산자 설명
x < y x가 y보다 작은지 검사
x > y x가 y보다 큰지 검사
x == y x와 y가 같은값인지 검사
x is y x와 y의 메모리 주소가 같은지 검사
x != y x와 y가 같은값인지 검사
x is not y x와 y의 메모리 주소가 같은지 검사
x >= y x가 y이상인지 검사
x <= y x가 y이하인지 검사
  • c언어에서는 0은 False, 1은 True를 나타내지만, python에서는 성립하지 않는다
  • 존재하면 참, 없으면 거짓으로 판단한다
  • and, or, not 논리키워드와도 같이 사용한다
    1
    2
    3
    if 1 # True
    if 0 # True
    if None # False

6.1 삼항연산자(Ternary operators)

  • 참과 거짓만 존재하는 결과를 한줄에 표현 할 수 있다.
    1
    2
    a = 1
    print('number' if isinstance(a, int) else 'not number')

    isinstance(var, datatype) -> boolean

    데이터의 타입을 판단하는 함수

7. 반복문

  • 정해진 동작을 반복적으로 수행하게 하는 명령문
  • for, while 명령 키워드가 존재한다

7.1 for 문

  • iterable 한 object의 원소의 갯수 만큼 반복시켜주는 반복문
  • range, enumerate등과 연계하여 사용이 가능하다
    1
    2
    3
    4
    5
    6
    for i in range(1, 10, 2):
    print(i) # 1, 3 ... 7 ,9
    for i in range(10, 1, -1):
    print(i) # 10, 9, ... , 2, 1
    for i, x in enumerate('apple'):
    print(i, x) # 0 a, 1 p, ... , 4 e

7.2 while 문

  • 조건을 만족하는 동안 반복적으로 명령을 수행한다
    1
    2
    3
    4
    5
    i = 0
    while i < 5:
    print(i)
    i += 1
    # output 0, 1, 2, 3, 4

7.3 반복문 제어

  • break : 특정 조건에서 가장 가까운 반복문을 종료한다
  • continue : 특정 조건에서 남은 명령을 skip 하고 다음 루프로 넘어간다
  • else : 반복조건이 만족하지 않은경우 반복 종료시 1회 수행한다.
    • break로 반복문에서 탈출할 경우에는 수행하지 않음

Week1 - Day 1&2 Review


오늘 하루 한 것

  • Day1
    • 팀원들과 아이스 브레이킹
    • 강의 듣기 (python 2-4까지)
    • 노션 회고록 Template 만들기
    • 과제
      • Basic Math
      • Text Processing 1
      • Text Processing 2
  • Day2
    • 강의듣기
      • python 강의 완료
      • Ai Math 경사하강법까지 완료
    • 과제
      • Gradient Descent 하는 중
      • 기본퀴즈 1~5강
    • python 3-2강 까지 정리

피어세션에서 한것

  • Day1
    • 피어세션 그라운드 룰 만들기
  • Day2
    • python 메모리 관리에 대한 질문
    • 구조체 메모리 점유에 대한 질문

내일 할것

  • 심화과제 끝내기
  • 과제과정, 결과 + 정규식에 대해서 정리해보자

느낀점

  • 어떻게 해야 남이보기 쉽게 설명할수 있을까? 정리하는데 시간이 오래걸린다.
  • 1일차 한 내용이 많아서 하루만에 정리하기 쉽지 않았다. 예전에도 한번 시도했지만 꾸준히 정리해야 할맛나는것 같다. 쌓이면 쌓일수록 답이없다…..
  • 매일 적당한 양을 공부하고, 정리할것
  • 알아도 정리하자!