파이썬3 바이블 - 제1장 연습문제

프리렉 - FREELEC

http://freelec.co.kr/book/catalogue_view.asp?UID=134

이강성저

1. 파이썬을 여러분의 시스템에 설치해 보자.

순수한 파이썬 이외에도 다양한 배포판들이 존재한다. 이 책에 소개된 순수한 배포판을 http://python.org/download/ 에서 다운 받아 설치해도 좋고, 혹은 (순수한 파이썬 + 유용한 모듈들)을 묶어놓은 여러 배포판중 하나를 설치해도 좋다. 각 배포판의 특징에 대해서는 여러분이 홈페이지를 직접 참조해보기 바란다.

2. 파이썬이 기존에 알고 있던 다른 언어와 다른 특성이 무엇인지 정리해 보자.

여러분이 이미 알고 있는 언어와 비교를 해보기 바란다. 만일 C/C++, Java등의 언어를 알고 있다면 파이썬의 동적인 특징을 중심으로 비교하면 좋을 것이다. Visual Basic, JavaScript, PHP등과 비교를 원한다면 플랫폼이나 웹등의 실행 환경도 비교 조건이 될 것이고, 각 언어로 활용할 수 있는 영역등의 비교도 가능할 것이다.

다른 스크립트 언어와의 비교 내용도 정리해볼 수 있다. Perl, Lua, Ruby등의 언어가 대표적인 언어들이다. 비슷한 특징들도 많고 차이점도 많다. 각자 관심있는 언어와 비교해보기 바란다. 인터넷에서 검색하면 많은 문서들을 참조할 수 있다.

3. 파이썬 패키지와 함께 설치된 Manual Docs을 이용하여 수학 관련 모듈에는 어떤 것이있는지 조사해 보자. (math 키워드 이용) 혹은 관심 있는 다른 모듈을 조사해 보자.

윈도우 버전 파이썬을 설치했다면 시작->Python3.2->Module Docs 를 선택하고 입력 창에 math 혹은 다른 키워드를 입력해 본다.

리눅스 버전에서는 다음과 같이 pydoc -p port_number을 실행하고 웹브라우저로 접속하면 현재 설치된 패키지에 대한 목록 및 문서를 볼 수 있다.

$ pydoc -p 7464
pydoc server ready at http://localhost:7464/

4. 파이썬 프로그램을 실행하는 방법에는 어떤 것이 있는지 정리해 보자.

파이썬 스크립트를 실행하는 방법에 관해서는 본문 1.4.6절의 내용을 각자 다시 한번 정리해보자.

5. 파이썬의 대화식 인터프리터를 종료하는 방법을 정리해 보자.

본문 1.4.4절의 내용을 각자 다시 한번 정리해보자.

6. 현재 시각을 표시하는 간단한 스크립트 파일을 만들어 보고 IDLE와 명령 프롬프트(혹은 리눅스의 셸)에서 각각 실행해 보자. 현재 시각을 표시하는 대화식 인터프리터에서의 예는 다음과 같다.

>>> import time
>>> time.asctime()
'Tue Jun 19 09:27:36 2012'

우선 다음과 같은 내용의 파일을 print_time.py 란 이름으로 만들어보자.

#!/usr/bin/env python3     # *nix 계열
import time
print (time.asctime())
  1. IDLE를 사용한다면 File->Open을 이용하여 print_time.py 파일을 읽어 들이고 F5를 누르면 실행된다.
  2. 윈도우 cmd.exe 환경에서는 python print_time.py 명령을 입력한다.
  3. 리눅스에서도 python print_time.py 명령을 입력한다.
  4. 리눅스에서 실행권을 부여한 후 직접 실행도 가능하다.

    chmod a+x print_time.py ./print_time.py

7. math나 cmath 모듈을 이용하여 \(ax^2 + bx + c = 0\) 와 같은 2차 방정식의 두 개의 근을 구해보자. 근의 공식은 \(x=\frac{-b \pm \sqrt{b^2-4ac}}{2a}\)이다. a=2, b=-1, c=-15일 경우와 a=2, b=-1, c=15인경우에 대해서 각각 근을 구해 보자.

In [1]:
import math
a, b, c = 2, -1, -15

D = b*2-4*a*c
x1 = (-b + math.sqrt(D)) / (2*a)
x2 = (-b - math.sqrt(D)) / (2*a)
print(x1, x2)
(2.965695122800054, -2.465695122800054)

In [3]:
import cmath
a, b, c = 2, -1, 15

D = b*2-4*a*c
x1 = (-b + cmath.sqrt(D)) / (2*a)
x2 = (-b - cmath.sqrt(D)) / (2*a)
print(x1, x2)
((0.25+2.7613402542968153j), (0.25-2.7613402542968153j))

8. http://ipython.org 사이트를 방문하여 최신 버전의 ipython 소스를 내려받고 패키지를 설치해 보자.

ipython은 표준 파이썬 코드만 실행하는 python 인터프리터 환경에 쉘기능, 자동완성 기능, 도움말 기능, 편의 명령어(magic commands)등을 제공하는 인터프리터 환경이다. 본문에서는 표준 파이썬에 대해서 설명을 했기때문에 이 기능에 대해서 할애할 지면이 마땅치 않았지만 ipython은 훌륭한 실행환경이다. 본인도 대부분의 인터프리터 작업을 ipython에서 수행하고 있다. 꼭 한번 설치해서 사용해보기 바란다.

9. ipython qtconsole과 ipython notebook이 동작하도록 설치해 보자.

이 연습문제 해답이 ipython notebook에서 작성되고 있다. 문서와 코드 실행을 동시에 할 수 있으며 plotting 기능까지 포함할 수 있다. ipython 홈페이지 문서를 참조해 ipython qtconsole과 notebook을 설치하고 동작할 수 있도록 해보자. 문제 1번에서 설명한 anaconda, enthought python distrubution, pythonxy등은 모두 ipython을 포함하고 있다.

In [4]:
x = linspace(0, 2*pi)
y = sin(x)
plot(x, y)
Out[4]:
[<matplotlib.lines.Line2D at 0x281be50>]

10. 파이썬 2.x에서 파이썬 3으로의 코드 변환은 어느 정도 자동화가 가능한 lib2to3 라이브러리를 이용하여 쉽게 할 수 있다. 파이썬 2.7이나 3.x를 설치하면 실행 가능한 2to3 스크립트를 제공한다. 만일 2to3.py를 찾을 수 없다면 다음 코드와 같이 직접 만들어서 사용해도 된다.

#!/usr/bin/env python
import sys
from lib2to3.main import main
sys.exit(main("lib2to3.fixes"))

Python 2.x 소스 파일 example.py가 다음과 같이 주어져 있다고 하자.

def greet(name):
    print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)

2to3를 이용하면 Python3용 코드로 변환할 수 있다. -w 옵션이 없다면 차이점만 표시 한다.

$ 2to3 -w example.py

example.py 파일이 다음과 같이 바뀌어 있는 것을 확인할 수 있다.

def greet(name):
    print("Hello, {0}!".format(name))
print("What's your name?")
name = input()
greet(name)

Python 2.x로 만든 코드를 Python3용으로 변환하고 실행 여부를 시험해 보자.


각자 실행해보기 바란다.

In []: