{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "***\n", "# 1회. Python 시작하기\n", "***\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 1. 스크립트 언어의 이해\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-1 스크립트(Script) 언어란 무엇인가?\n", "- 스크립트(scripts)의 사전적 의미 - 연극의 대사등이 적혀 있는 스크립트에서 유래\n", "- Script Language의 wikipedia 정의 (http://en.wikipedia.org/wiki/Scripting_language)\n", " - a programming language that supports scripts, programs written for a special run-time environment that can interpret (rather than compile) and automate the execution of tasks that could alternatively be executed one-by-one by a human operator" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-2 컴파일 언어와 스크립트 언어와의 비교 \n", "- 컴파일(Compile) 방식의 언어에 의해 작성되는 응용 프로그램은 컴파일러에 의해 기계어로 번역된 채로 실행되기 때문에, 수정이 빈번하게 발생할 경우에는 수정 후 다시 컴파일을 해야함.\n", " - 덩치가 큰 프로그램은 컴파일 시간이 꽤 길다. 즉, 간단한 수정에도 오랜기간의 컴파일 시간이 요구된다. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](../images/compiler_interpreter2.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 반면에 수정이 빈번하게 발생하는 경우에는 소스 코드를 한줄 한줄 읽어 바로바로 실행하는 인터프리터 방식이 상당히 유리하다. \n", "- 스크립트 소스코드를 컴파일 방식에 의해 중간 코드(Bytecode)로 우선 만들고, 이를 다시 인터프리터 방식으로 해석하여 수행하는 방법도 종종 활용된다." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](../images/bytecode.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 스크립트 언어의 장점\n", " - 개발 시간이 단축된다.\n", " - 소스 코드 수정이 빠르고 간단하게 이루어진다.\n", "- 스크립트 언어의 단점\n", " - 중간 코드를 만드는 것은 간단하지만 그것을 실제로 실행시키는 것은 많은 작업을 필요로 한다.\n", " - 실행 시간이 오래 걸린다." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-3 대표적인 스크립트 언어 \n", "- JavaScript\n", "- ActionScript\n", "- Perl\n", "- PHP\n", "- Python\n", "- Lua\n", "- Ruby" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 2 파이썬 언어의 유래 및 파이썬 언어의 특징\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-1 파이썬(Python)의 사전적 의미" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Python의 사전적 의미는 독이 없는 뱀으로 먹이를 몸으로 감아서 압사시키는 큰뱀, 또는 그리스 신화에 나오는 악마" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-2 왜 파이썬이란 이름이 붙었나?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 프로그래밍 언어로서 Python 이름의 유래는 1970년대에 영국 BBC에서 방영한 \"Monty Python's Flying Circus\" 방영 프로그램에서 유래되었다. 이 프로그램은 매우 어색하고 이상한 행동을 보이는 사람들을 쇼형태로 방영하여 많은 인기를 누렸다. \n", "- 이 언어를 만든 Guido van Rossum이 이 프로그램의 대단한 팬이었기 때문이었다. \n", "- 1989년 12월 크리스마스 휴가를 보내고 있던 Guido는 휴가 기간동안 무엇인가 재미있게 할 수 있는 무언가를 찾고 있었다. \n", "- 연휴라서 연구실이 닫힌 상황에서 집에서 컴퓨터를 가지고 예전부터 생각하고 있었던 인터프리터(interpreter)를 만들어 보기로 결심하였다. \n", "- 즉, Guido가 무료한 한때를 보내기 위하여 만들기 시작했던 언어가 지금 많은 사람들이 사용하는 Python 언어가 되었다." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-3 파이썬의 출발" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 파이썬의 기반은 80년대 초반에 Guido가 동료들과 함께 개발을 하였던 ABC라는 언어이다. \n", "- 80년대에 ABC라는 언어는 최고의 교육용 언어로 알려졌었고 전문 프로그래머가 아닌 사람이 배우기 편하게 만들어진 아주 훌륭한 언어였다. \n", "- 그럼에도 불구하고 전문 프로그래머들에게는 거의 받아 들여지지도 않았고 잘 사용되지도 않았다.\n", "- 이는 프로그래밍이 대중화가 많이 되지 않은 상황에서 전문 프로그래머들에게 외면받았을 때에 나올 수 있는 결과라고 볼 수 있다. \n", "- Guido는 파이썬으로 실제 문제를 더욱더 쉽게 해결할 수 있도록 설계하였으며 C언어나 유닉스 쉘을 대신해서 좀 더 편하게 사용할 수 있는 언어를 개발하는 데 초점을 맞추었다. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-4 왜 파이썬을 배워야 하는가?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 가장 중요한 대답: \"생산성이 높기 때문\"\n", "- 먼저 개발하라! 그리고 나서 성능을 개선하라." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-5 파이썬은 어떤 언어인가?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 대화 기능의 인터프리터 언어\n", "- 동적인 데이터 타입 결정 지원" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "abcdef\n", "[1, 2, 3, 4, 5, 6]\n" ] } ], "source": [ "def add(a,b):\n", " return a+b\n", "\n", "print(add(1,2))\n", "print(add('abc', 'def'))\n", "print(add([1, 2, 3], [4, 5, 6]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 플랫폼 독립적 언어\n", "- 개발 기간 단축에 촛점을 둔 언어\n", "- 간단하고 쉬운 문법\n", "- 고수준의 내장 객체 자료형 제공" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[12, 'abcde', (4+2j), [3, 4, 5], 'add']\n" ] } ], "source": [ "a=[12, 'abcde', 4+2j, [3,4,5]]\n", "a.append('add')\n", "print(a);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 메모리 자동 관리\n", "- 쉬운 유지 보수\n", "- 많은 수의 라이브러리 제공\n", "- 짧아지는 코드\n", "- 높은 확장성" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-6 파이썬을 어디에 사용하면 적당한가?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 시스템 유틸리티\n", "- GUI\n", " - wxpython, tkinter\n", "- 게임 프로그래밍\n", " - 파이썬 게임엔진: PyOpenGL PySDL PyGame Kivy PyOgre Panda3D Cocos2D PySoy\n", "- 웹 프로그래밍\n", " - django 프레임워크\n", "- 수치 프로그래밍\n", " - nextworkx 모듈\n", "- 데이터베이스 프로그래밍\n", "- 기타\n", "- 참고: http://mulgu.kr/73" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-7 파이썬의 장점" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Guido가 생각했던 Python 문법적 특징은 들여쓰기를 철저하게 지킨도록 언어를 설계했다는 점이다. \n", "- 이는 코드의 가독성을 현격히 높혀준다.\n", "- C 언어에서처럼 {} 등의 괄호를 넣지 않기 때문에 프로그램을 좀더 깔끔하게 만들어준다. \n", "- 파이썬 코드는 재사용하기가 쉽다. \n", "- 코드의 분석이 쉽기 때문에 다른 사람이 작성한 코드를 받아서 작업하는 사람들이 훨씬 더 작업을 편하게 해준다. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 03 파이썬 코딩 환경 구성\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-1 파이썬 코딩 환경 구축 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3-1-1 Python 전용 통합개발환경(IDE) 사용 \n", "- Enthought Canopy\n", " - 별도의 파이썬 설치 없이 아래 통합개발환경을 사용하면 자동으로 파이썬이 설치됨\n", " - CANOPY EXPRESS (Free) 다운로드 사이트: https://www.enthought.com/products/canopy/ \n", "- Python 실행\n", " - Enthought Canopy 직접 활용\n", " - 커맨드 창 (터미널)\n", " - ipython 명령어 이용\n", "\n", "#### 3-1-2 이클립스 사용\n", "- 파이썬 설치\n", " - 파이썬 다운로드 사이트: https://www.python.org/downloads/\n", " - 본 강좌에서는 파이썬 3.6.x 버전 사용\n", "- 이클립스에서 파이썬 설치 방법\n", " - PyDev 플러그인 설치\n", " - 참고 사이트: http://arisu1000.tistory.com/27707\n", "\n", "#### 3-1-3 추천하는 코딩 환경 구성 방법\n", "- 1) Enthought Canopy 설치\n", "- 2) 이클립스 설치 (설치가 안되어 있는 경우)\n", "- 3) PyDev 플러그인 설치" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-2 대화식 모드로 간단한 파이썬 예제 실행하기" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9\n", "Hello World!\n" ] } ], "source": [ "print(4+5)\n", "print(\"Hello World!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-3 산술 연산하기" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9\n", "-20\n", "54\n", "34\n", "1.8\n", "1.8\n", "1.8\n" ] } ], "source": [ "# -*- coding: utf-8 -*-\n", "print(4 + 5)\n", "print(12 - 32)\n", "print((4 + 5) * 6)\n", "print(4 + 5 * 6)\n", "print(9 / 5) # 파이썬2.x 버전에서는 정수/정수 연산 결과는 정수\n", "print(9.0 / 5.0)\n", "print(9 / 5.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###3-4 간단한 문자열 연산하기" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello\n", "Hi there!\n" ] } ], "source": [ "print('Hello')\n", "print(\"Hi there!\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "My name is Amenda\n" ] } ], "source": [ "a = 'My name is '\n", "b = 'Amenda'\n", "print(a + b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-5 파이썬 버전 알아보기" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.6.8 |Anaconda, Inc.| (default, Dec 29 2018, 19:04:46) \n", "[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)]\n", "\n", "sys.version_info(major=3, minor=6, micro=8, releaselevel='final', serial=0)\n" ] } ], "source": [ "import sys\n", "print(sys.version)\n", "print()\n", "print(sys.version_info)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-6 파일로 저장하여 실행하기" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 다음 내용의 cal.py 만들기\n", "```\n", "# file: cal.py\n", "import calendar\n", "calendar.prmonth(2014, 11)\n", "```\n", "- 커맨트 창 (터미널 창)에서 해당 폴더로 이동 후 다음 명령어 수행 python.py\n", " - python cal.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-7 대화식 모드에서 혹은 다른 모듈에서 모듈 파일 실행하기" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " September 2020\n", "Mo Tu We Th Fr Sa Su\n", " 1 2 3 4 5 6\n", " 7 8 9 10 11 12 13\n", "14 15 16 17 18 19 20\n", "21 22 23 24 25 26 27\n", "28 29 30\n" ] } ], "source": [ "exec(open(\"./cal.py\").read())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일

" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 1 }