ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python2 06일차 수업 정리_예외처리, 강제 예외, 자료구조와 알고리즘, 자료구조
    Python 2024. 2. 16. 17:57

    - 예외처리

    - 자료구조와 알고리즘

    - 자료구조

    - 알고리즘

     


    - 예외처리

    각종 오류를 처리하기 위한 것!

    예외가 발생했을 때 프로그램이 정상적으로 종료될 수 있도록 다루는 행위

    예외란 개발자가 직접 처리할 수 있는 간단한 문제 (에러코드를 읽을 수 있는)

    오류는 개발자가 처리할 수 없는 복잡한 문제 (천체지변?)

     

    예외처리는 왜 필요한가

    발생된 문제로 인해 프로그램이 비정상적으로 종료되는 것을 막으며 사용자에게 발생한 문제 정보 전달을 위함

     

     

    예외처리의 구조

    try ~ except

    try : 
           예외가 발생할 수 있는 문장   # try 블록에서 예외가 발생하면
    except :
           예외가 발생시에 수행할 문장   # 해당하는 예외발생 시 처리
    try ~ except ~ else ~ finally

    try :
           예외가 발생할 수 있는 문장
    except :
           예외가 발생시에 실행할 문장
    else :
           예외가 나지 않으면 실행할 문장
    finally : 
           예외 발생 유무 노상관 무조건 실행할 문장
    강제 예외 발생 시키기 : 파이썬이 발생시키는 오류가 X, 사용자가 발생시키고 싶은 경우에 사용

    raise 예외클래스 ()   # 예외 클래스는 Exception을 상속받은 사용자 정의 클래스
    raise 예외클래스("문장")

     

     

    강제 예외처리

     

     

     

    raise를 통해 에러 발생하면 try ~ except으로 에러 처리

     


    - 자료구조와 알고리즘

    를 들어가기 전에 

    기본용어

    컴퓨터 판정, 선택, 응답, 기억 4가지 주요회로로 구성된 기계
    프로그래밍 문제 해결을 위하여 수행할 작업을 단위 작업으로 나누고 how 수행해야 문제를 해결할 수 있는지 연구
    단위작업 개발자 입장에서 더 이상 분해할 수 없는 기본작업
    ex) 사용자의 로그인 과정, 입력된 데이터의 검증 작업 등
    코딩 프로그래밍 된 것을 특정 언어로 번역하는 과정
    자료구조 자료(데이터) 처리를 위해 컴퓨터가 잘 다룰 수 있는 형태로 표현하는 구조
    알고리즘 문제를 해결하는 절차 또는 순서
    프로그램에서 문제를 문제 해결을 위해 단위작업을 어떤 순서로 how 반복하면 효과적으로 해결할 수 있는지를 연구하는 분야
    ex) 영어사전에서 python 단어를 찾는다

    방법 1> 사전의 첫 페이지에 있는 첫 단어부터 시작하여 사전의 모든 단어를 순서대로 찾는 것
            => 확실하긴 하지만 비효율적인 방법

    방법 2> 사전의 단어들이 알파벳 순으로 정렬되어 있는 것을 이용하는 방벙
             => p단어가 위치한 곳을 찾고 y가 위치한 곳으로 이동
                  방법 1에 비해 효율적

     

     


    - 자료구조

    1) 자료구조의 정의 및 종류

    컴퓨터가 다뤄야하는 자료가 많은 경우를 다루는 방법 => 알고리즘을 구현하는데 사용함

    물리적으로 구현하는 방법 => 리스트, 연결리스트

    리스트(list) : 각 데이터를 연이어 저장하는 기술

    연결리스트(Linked List) : 각 데이터를 임의의 위치에 저장하고 서로를 연결하는 기술

     

    2) 자료구조의 분류

    자료구조는 단순구조, 선형구저, 비선형구조, 파일구조가 있다

    자료구조
    (Data Structure)
    컴퓨터에서 다루는 데이터의 형태
    단순구조
    (Simple Structure)
    기본자료형과 사용자 정의 자료형(class)
    배열(동일한 기본 자료형을 여러개 모은 것) (Java에서 많이 사용)
    구조체(기본 자료형을 여러개 모은 것) (C언어)
    클래스(구조체에 함수까지 모아서 자료형을 선언한 것)
    재정의 자료형(def 등을 이용해 이름을 재정의하거나, 넣을 수 있는 종류를 제한하는 것)
    선형구조
    (Liner Structure)
    데이터를 일렬로 쭉 저장되어 있는 형태를 가짐
    일렬로 저장하는 방식 : 리스트(배열 기반, 연속 방식)
    각 데이터가 다음 데이터 위치를 가지는 방식 : 연결리스트(포인터 기반, 연결 방식)
    리스트와 연결리스트 외에 사용방법에 따라 : 스택, 큐, 데크
    비선형구조
    (Non-Liner Structure)
    데이터가 트리형태로 저장되어 있다 생각하고 사용하는 자료구조
    생각하고 사용하는 자료구조(자료가 순차적이지 않고 복잡한 연결관계를 갖는 형태)
    방식 : 트리, 그래프
    파일구조
    (File Structure)
    다양한 다료구조의 데이터를 파일에 저장하는 방식
    방식 : 순차파일, 색인 파일, 직접 파일

     

    추상 데이터 자료형 (ADT Abstract Data Type) (자료를 설계하기 전 추상적으로 생각하는 것)

    데이터 자료형(Data Type)

    여러종류의 데이터를 식별하는 분류
    해당하는 자료형에 가능한 값
    해당 자료형에서 수행이 가능한 명령들
    해당 자료형을 저장하는 방식을 의미함
    추상 데이터 자료형

    어떤 데이터(자료)들과 자료에 가해지는 연산들을 구체적으로 표시하는 것
    추상의 의미는 어떤(what?) 자료나 연산이 제공되는 것만을 정의하고  이들이 어떻게(how?) 구현되는가는 
    정의하지 않는 것을 말함

     

    => 추상 데이터 알고리즘 성능 분석 할때 많이 사용

    ex) 가방 추상 데이터 자료형(ADT)
    자료(data)  핸드폰, 거울, 지갑, 동전, 손수건
    연산 넣고 빼는 연산 insert(), 물건이 있는지 확인 contains(), 개수검사 count()
    데이터 중복된 항목을 허용하는 자료들의 저장소, 항목들은 특별한 순서 없이
    개별적으로 저장되지만 항목간의 비교는 가능해야 함
    연산
    Bag()              비어있는 가방을 새로 만든다
    insert(e)         가방에 항목 2를 넣는다
    remove(e)      가방에 r가 있는지 검사하여 있으면 항목을 꺼낸다
    contains(e)     e가 있 True, 없 False 반환
    count()           가방에 들어있는 항목수를 반환한다

     


    알고리즘

    알고리즘의 조건 (5가지 전제조건)

    입력 0개 이상의 입력이 존재해야 한다.
    출력 1개 이상의 출력이 존재해야 한다.
    명백성 각 명령어의 의미는 모호하지 않고 명확해야한다.
    유한성 한정된 수의 단계 후에는 반드시 종료되어야 한다. 
    유효성 각 명령어들은 실행 가능한 연산이여야 한다.

     

    알고리즘 기술 방법

    자연어 일상생활에서 사용하는 언어를 사용하여 알고리즘을 설명하는 방법
    흐름도(flowchart) 미리 약속된 기호나 그림 등으로 설명하는 방법
    유사코드(pseudo-code) 유사코드 혹은 가상코드 즉, 알고리즘 기술언어
    (ADL)을 사용하여 프로그래밍 언어의 일반적인 유사하게 알고리즘을 표현하는 방법
    특정 프로그래밍 언어 PASCAL< ALGOL< LISP 등의 언어를 사용해서 알고리즘을 기술하는 방법

     

    알고리즘의 효율성

    계산 속도와 메모리 사용량으로 평가한다. 

    => 사용하는 자료구조에 따라 큰 영향을 받는다

     

    알고리즘의 복잡도 분석

     

    ex) 리스트 추가

    append 맨뒤에 바로 삽입

    insert    중간에 바로 삽입

    =>(insert는 자리까지 지정해야해줘서 append가 덜 복잡)

     

    ex) n^2를 구하는 방법 (유사코드로 작성)

    (1) 곱셈연산을 이용해 n과 n을 곱하는 방법
            sum <- n * n
             대입연산자 1, 곱셈연산 1
             복잡도 함수 T(n) = 2

    (2) 덧셈연산을 이용해 n을 n번 더하는 방법
             sum <- 0
             for i <- 1 to n do
                      sum <- sum + n
             대입연산 n + 1 덧셈연산 n
             복잡도 함수 T(n) = 2n +1

    (3) 덧셈연산을 이용해 1을 n*n번 더하는 방법
             sum <- 0
             for i <- 1 to n do
                      for j <- 1 to n do
                               sum <- sum +1

    대입연산 n^2 + n + 1, 덧셈연산 n^2
    복잡도 함수 T(n) = 2n^2 + n + 1

     

     

    2024.02.16

연의 취업 도전기.