바로 쓰는 파이썬 기초편 Lecture Notes

컴퓨터의 개념 및 실습

This project is maintained by jinsooya

1장: 프로그래밍 언어와 파이썬

Programming Languages and Python


박 진 수 교수
Intelligent Data Semantics Lab
Seoul National University


Table of Contents

</li></ul>

강의에 앞서…

하는 만큼 배운다

lecture1

lecture2

lecture3

강의 교재

바로 쓰는 파이썬: 기초 편 박진수 저 서울대학교 출판문화원 2019 ISBN 978-89-521-2886-7

text

소스 코드, 연습문제 풀이, 부록

SNUON 동영상 강의

강의 노트

jinsooya.github.io/lecture-notes/

프로그래밍이란?

프로그래밍을 한다는 것은 어떤 의미일까?

오늘, 내일 짧게나마 프로그래밍을 배우기 전에 프로그래밍을 한다는 것의 의미를 알 필요가 있다.

메모장 실행해보기

윈도우 기본 프로그램인 메모장(notepad)를 실행해보자.

notepad

메모장에서 우리는 하얀 배경의 텍스트 입력창에 다양한 문서를 작성할 수 있다.

그렇지만, 우리는 메모장 문서 안에 표나 그림을 넣거나 동영상을 넣을 수 없다.

마이크로소프트 워드 문서에는 표나 그림을 넣을 수 있고,

마이크로소프트 파워포인트에는 심지어 동영상도 넣을 수 있다.

왜 메모장에는 표, 그림, 동영상을 넣을 수 없을까?

답은 간단하다.

메모장을 만든 프로그래머가 그것을 허락하지 않았기 때문이다!!!

프로그래밍을 배우면

프로그래밍을 배우면 우리도 우리가 원하는 프로그램을 작성할 수 있다.

프로그래밍이 우리에게 가져다 주는 것은 크게

  1. 자유
  2. 학습의 고통이 있다.

사람마다 프로그래밍을 배우는 과정에서 느끼는 재미가 크게 다른데,

프로그래밍을 배워서 어떤 문제를 해결할 수 있을지를 생각하며 배운다면 훨씬 큰 성취감을 느낄 수 있을 것이다.

아는 것의 힘 체험하기

만약 다음과 같이 데이터가 세로로 입력된 엑셀 파일을 갖고 있다고 가정해보자.

이 데이터를 가로 배열로 옮기려면 어떻게 해야할까?

직접 데이터 보고 입력하기

데이터가 10개, 20개라면 편리하지만 만약 데이터가 10만개라면?

시간이 매우 오래걸리고 중간에 실수를 범할 가능성이 높다.

spreadsheet2

엑셀 기능 이용하기

엑셀에는 이런 상황을 대비해 행/열 바꿔 붙여넣기라는 기능이 있다.
이 기능을 활용하는 것만으로 엄청난 시간과 노력을 절약할 수 있다.

excel

하지만…

우리가 겪는 모든 상황에 이렇게 딱 들어맞는 기능이 있기를 기대하는 것은 어렵다.

여러분이 프로그래밍을 할 줄 안다면 딱 맞는 기능을 직접 만들 수 있다.

하루에 32분씩 걸렸던 일을 프로그램을 작성해 2분 만에 끝낼 수 있다면 1년에 182.5시간을 다른 일에 쓸 수 있게 되는 것이다.

왜 파이썬인가?

why-python

프로그래밍 언어 추이

stack-overflow

[출처: stackoverflow.blog]

프로그래머 관련 직업 트렌드

stack-overflow

[출처: blog.smartbear.com]

가장 인기가 좋은 프로그래밍 언어

stack-overflow

[출처: codeeval.com]

AlphaGo Wanted Python Programmers

stack-overflow

데이터 분석을 위한 가장 강력한 프로그래밍 언어

stack-overflow

[출처: kdnuggets.com]

Transitions between the different platforms

stack-overflow

[출처: kdnuggets.com]

stack-overflow

[출처: kdnuggets.com]

2017년 가장 인기가 많았던 데이터 사이언스 툴

stack-overflow

[출처: kdnuggets.com]

2018년 배우고 싶은 데이터 사이언스 툴

[출처: kdnuggets.com]

AI 개발에 가장 적합한 5가지 프로그래밍 언어

stack-overflow

[출처: http://www.itworld.co.kr/news/109189]

프로그래밍 언어로서의 파이썬

[출처: 이상구(2017)]

파이썬 특징

휘도 판 로썸(Guido Van Rossum)

Easy to learn

Very expressive language

public class HelloPython {
    public static void main(String[] args] {
        System.out.println("Hello Python~~~!");
    }
}
print('Hello Python~~~!')

크로스 플랫폼 언어(cross-platform language)

해석형 언어(interpreted language)

대화형 언어(interactive mode)

대화형 모드 예시

interactive-mode

멀티패러다임(multiparadigm) 프로그래밍 언어

다양한 고급 프로그래밍 기능 제공

강력하고 풍부한 라이브러리(library) 제공 : 개발 속도가 빠름

엄청난 사용자 커뮤니티

뛰어난 확장성

무료(free) 소프트웨어

프로그램과 프로그램 개발 절차

프로그램(program)이란?

특정한 작업을 어떻게 수행해야 하는지 그 순서를 일련의 명령어로 나열한 것이다.

프로그램 언어의 공통 기본기능

파이썬(Python), 자바(Java), C 언어를 포함한 모든 프로그래밍 언어는 공통적으로 다음과 같은 기본 기능들을 제공한다.

입력

출력

처리

프로그램 개발 과정

프로그램 개발은 다음과 같은 과정을 거친다.

  1. 프로그램 논리 설계 및 개발
  2. 프로그램 코드화(coding)
  3. 기계어(machine language)로 변환(컴파일)
  4. 프로그램 실행과 검증

하지만 현실은…

development-cycle

[출처: 미상]

Step 1 : 프로그램 논리 설계 및 개발

핵심 단계

논리 설계에 사용되는 툴(tool)

탁상 검사(desk-checking)

논리적 오류(logic(al) errors)

흐름도(flowcharts) 예시

flow-chart

Step 2 : 프로그램 코드화

프로그래밍(programming)

파이썬 코드 예시

def get_tags(text, ntags=100, multiplier=1):
    tx = Okt()    
    nouns = [noun for sentence in text 
                for noun in tx.nouns(sentence)]
    
    count = Counter(nouns)

    return [{'color': color(), 'tag': n, 'size': c * multiplier}
            for n, c in count.most_common(ntags)]

코드화의 기본 작업

선언(declaration) : 프로그램에서 사용될 자료형(data type)를 컴퓨터에게 알려주는 단계

입력(input) : 컴퓨터에 데이터를 입력하는 것

처리(processing) : 프로그램에 의해 수행되는 작업

출력(output) : 결과 또는 답

입력받은 값에 2를 곱하여 출력하는 프로그램 예시(일상어로 작성)

ipo

Step 3 : 기계어(machine language)로 변환(컴파일)

컴퓨터는 1 또는 0 밖에 모른다.

컴파일러(compiler)와 인터프리터(interpreter)

문법 오류(syntax error)

Step 4 : 프로그램 실행과 검증

프로그램 오류의 종류와 디버깅(debugging)

실행 단계에서의 오류

논리 설계 및 알고리즘 개발

특정한 작업을 수행하기 위한 필요한 과정을 순서대로 나열하는 것을 말한다.

의사(擬似)코드(슈도코드, pseudocode)

의사코드 예시

algorism

흐름도(flowchart, 순서도)

프로그램이 처리되는 과정을 시각적으로 나타낸 도표

각 기호들은 화살표로 연결되어 프로그램의 처리 과정을 나타냄

flowchart-lamp

[출처: https://en.wikipedia.org/wiki/Flowchart]

Lab: 의사코드 작성하기

사용자가 입력한 값이 짝수인지 홀수인지 구하는 논리를 의사코드로 작성해보자.


THE END