Language/Python

Phython Study- 1st day

아르비스 2014. 4. 22. 10:20

http://www.python.org/


python_logo.png

파이썬은 1991년, 프로그래머인 귀도 반 로섬(Guido van Rossum)이 설계한 인터프리터식 언어입니다. 이 파이썬이라는 언어는 무료라는 장점과 함께, 가독성, 동적 타이핑, 광범위한 라이브러리 등 여러가지의 장점을 지니고 있는 아주 강력한 언어입니다. 파이썬을 사용한 프로젝트는 셀 수 없을 정도로 많으며 그 중에서도 비트 토렌트, 장고, 아나콘다 등과 같이 유명한 소프트웨어들이 파이썬으로 작성되었고 독자분들이 잘 알고 계시는 문명 IV, 토렌트, 모션빌더, 블렌더 3D 등이 파이썬을 내부적으로 사용한다고 합니다. 거기에다가 파이썬은 크로스 플랫폼을 지원하기 때문에 윈도우에서만 파이썬을 사용할 수 있는게 아니라 리눅스, 유닉스, 맥 환경에서도 파이썬을 이용할 수 있습니다.


리눅스 환경에는 대부분 설치되어 있고, 윈도우 환경은 따로 설치를 해주어야 한다.


파이썬을 설치하기 위해 우선은 파이썬 홈페이지의 다운로드 페이지로 이동하도록 합시다.


설치가 모두 완료되면 위와 같은 창이 뜨게 되는데, 여기서 Finish 버튼을 클릭합시다. 그리고 Finish 버튼을 누르고 나서, 시작 프로그램에서 Python 3.3 폴더의 IDLE(Python GUI)를 실행하시거나 Python (command line)을 실행하도록 합시다. 두 환경에서 편하신 환경을 택하여 진행하시면 되겠으나, 커맨드라인보다 추가적인 기능을 지니고 있는 IDLE를 통해 개발을 하는 것이 더 편합니다.



1. 간단한 문법



이번 편에서는 파이썬의 문법을 간단하게 살펴보도록 하고, 첫 시작은 간단하게 Hello, world!를 출력하는 코드를 살펴보도록 하겠습니다. 아래와 같이 IDLE에 입력하고 어떠한 결과가 출력되는지 유심히 살펴보도록 합시다.

1
2
>>> print("Hello, world!")
Hello, world!

코드만 보아도 어떠한 기능을 하는 코드인지 알 수 있을것 같죠? print는 말 그대로 출력 기능을 담당하는 함수입니다. 여기서 '함수'란 단어가 혹여나 수학 시간에 등장하는 함수를 일컫는게 아니냐는 의문이 들기도 하죠? 틀린 말도 아닙니다. 파이썬 상의 함수란 단어는 어떠한 입력 값을 넣어주면 그 입력 값에 대한 출력 값을 지닙니다. print 함수에 "Hello, world!"를 넣어주게 되면, 이 입력 값에 대해서 "Hello, world!"라는 출력 값을 내뱉게 되는 것입니다. 함수에 대해서는 나중에 가면 더 자세히 다루도록 하겠지만, 지금은 이렇게 간략하게 나마 알고 있도록 합시다. 우선은 위 코드에서 조금씩 내용을 바꾸어 가면서 적응을 해보도록 합시다. 

1
2
3
4
>>> print("파이썬에 오신 것을 환영합니다!")
파이썬에 오신 것을 환영합니다!
>>> print("안녕하세요?")
안녕하세요?

위 예제를 봐보시면, 파이썬 인터프리터는 이렇게 우리가 하나의 명령을 주면 그에 따른 결과를 돌려주고 있습니다. 우리가 "안녕하세요?"를 출력하라고 명령하면 파이썬은 그 출력 결과를 바로 아래에 보여줍니다. 그리고 >>>는 프롬프트(Prompt)라는 녀석이며, 이는 명령을 입력받을 준비가 되어있음을 의미합니다. 간단하게 출력에 대해서 알아봤으니, 이제 그 다음으로 수식 계산을 한번 보도록 할까요?


2. 수식 계산


이번에는 간단한 수식 계산식을 통해 결과를 확인해보도록 합시다. 우선은 기본적인 사칙연산(+, -, *, /)을 사용하여 아무런 식이나 작성하여 결과를 살펴보도록 합시다. 

1
2
3
4
5
6
7
8
>>> 512 + 634
1146
>>> 100 * 2013 * 1004
202105200
>>> 2 * 2014 / 333
12.096096096096096
>>> 55 / 3
18.333333333333332

위 수식을 IDLE에 그대로 작성하시면 바로 결과가 아래에 나오는 것을 보실 수 있습니다. 파이썬에서는 사칙연산을 포함한 여러가지 연산자를 지원합니다. 결과의 3~4번째 줄을 보시면 정확히 나누어 떨어지지 않는 경우라면 소수가 출력되는 것을 확인하실 수 있으며, 파이썬에서는 이 소수를 15자리까지 정밀하게 표현합니다. 만약 소숫점 이하의 수는 모두 다 버리고, 정수 부분에 있는 수만 나타내고 싶으시다면 / 연산자가 아닌 // 연산자를 사용하시면 됩니다.


한번, 위에 있는 수식에서 /를 //로 바꾸어 보고 IDLE에 입력하여 결과를 확인해보시기 바랍니다. 

1
2
3
4
>>> 2 * 2014 // 333
12
>>> 55 // 3
18

위에 쓰인 // 연산자는 바로 정수 나누기 연산자이며, 위를 보시면 / 연산 후에 정수 부분만을 결과로 가져옵니다.


그리고, 다른 언어들과 마찬가지로 몫을 구하는 / 연산자가 있으면, 나머지를 구하는 % 연산자가 존재합니다. 만약 a % b와 같은 수식이 있다면, a를 b로 나눈 뒤의 나머지를 가져온다고 할 수 있습니다. % 연산자를 사용하여 나머지를 가져오는 코드를 보도록 하겠습니다.

1
2
3
4
>>> 1024 % 100
24
>>> 123 % 5
3

위 수식에서 1024를 100으로 나눈 뒤의 나머지인 24, 123을 5로 나눈 뒤의 나머지인 3을 출력하고 있음을 확인하실 수 있습니다.


나머지를 구하는 연산자에 이어, 마지막으로 거듭제곱에 관련된 ** 연산자를 살펴보도록 하겠습니다.

1
2
3
4
5
6
>>> 2 ** 64
18446744073709551616
>>> 2 ** 32
4294967296
>>> 3014 ** 12
561977561797550433783442605323055764279296

위 결과를 보시면 나오는 값이 어마어마한 수더라도 출력된 것을 보실 수 있으며, 예를 들어서 2 ** 64는 독자분들이 생각을 하시듯 2의 64제곱의 결과를 가져옵니다. 3014 ** 12도 3014의 12제곱의 결과를 가져온다고 할 수 있습니다. 



3. 변수(Variable)


다른 언어들과 마찬가지로 파이썬에서도 변수(Variable)라는 개념이 당연히 존재하며, 이 변수라는 것은 임시로 혹은 영구적으로 값을 기억해두기 위한 저장소를 말합니다. .

1
2
3
4
money = 1000
cookiePrice = 600
money = money - cookiePrice
print(money)

결과:

400


위 코드에서 money와 cookiePrice가 변수이며, 변수가 담고 있는 값은 항상 고정되어 있는게 아니라 변할수 있습니다. 1행을 보시면 1000이란 값이 변수 money에 들어가고, 2행에서는 600이란 값이 변수 cookiePrice에 들어갑니다. 그리고 변수 money와 cookiePrice가 담고 있는 값을 가지고 연산을 한 뒤, 그 결과를 다시 money에 저장합니다. 그리고 최종적으로 money의 값을 출력합니다.


4. 파이썬에선 모든게 객체(Object)다!


파이썬에선 모든게 객체(Object)라니, 객체란 것은 도대체 무엇을 말하는 것일까요? 우리가 앞으로 배우게 될 함수, 모듈, 리스트, 튜플 등 모든 것을 객체라고 할 수 있습니다. 첫 예제에서의 1000과 600도 결코 예외가 아닙니다. 어떤 것이든, 객체라고 할 수 있습니다. 위에있는 예제 코드를 다시한번 보도록 합시다.

1
2
3
4
money = 1000
cookiePrice = 600
money = money - cookiePrice
print(money)

우선은 1행의 코드부터 보시게 되면, 변수 money와 1000이라는 값을 지닌 객체가 만들어집니다. 사실은, 1000이란 값이 그대로 money에 대입이 되어 money가 1000이란 값을 지니는게 아니라 1000이라는 값을 지니는 객체가 저장되어 있는 공간에다 money라는 이름표를 붙이는 것이라고 생각할 수 있습니다. 즉, 변수 money는 직접적으로 1000이란 값을 가지고 있는게 아니라, 1000이라는 값이 저장되어 있는 공간의 주소를 담고 있는 것이라고 할 수 있습니다. 2행도 마찬가지로, cookiePrice라는 변수가 600이라는 값을 지닌 객체가 저장된 공간을 가리키는 것이라고 할 수 있습니다. 이해를 위해 한가지 예를 더 들어보도록 하겠습니다.


K-1.png


위 그림에서 코드 영역에 있는 코드가, 메모리 영역에서는 변수 X, Y, Z가 만들어지고, 객체 3과 5가 만들어지게 됩니다. 여기서 X, Y는 동일하게 3이라는 값을 가진 객체를 가리키게 되고, Z는 5라는 값을 가진 객체를 가리키게 되는 것입니다. 만약 Y에 4를 넣으려고 한다면, 더이상 객체 3을 가리키는게 아니라 새로운 객체 4를 가리키게 됩니다. 파이썬 내에는 id라는 내장 함수가 존재하고, 이 id 함수는 객체의 주소를 돌려주는데 여기서 잠시 id 함수를 통해 정말 같은 곳을 가리키고 있는지 확인을 해보도록 하겠습니다. (함수에 대해 이해가 안가시면, 함수에 대한 강좌를 미리 보고 오시는 것도 괜찮습니다.)

1
2
3
4
X = 3
Y = 3
Z = 5
print(id(X), id(Y), id(3), id(Z), id(5))

결과:

507098848 507098848 507098848 507098912 507098912


결과를 보시면 변수 X와 Y은 객체 3을 가리키고, 변수 Z는 객체 5를 가리킨다고 말할 수 있습니다. 즉, 객체 3의 주소값과 변수의 주소값이 모두 일치하는 것입니다. 이번엔 값을 조금 바꾸어 예제의 결과를 확인하도록 합시다.

1
2
3
4
X = 300
Y = 50
Z = 257
print(id(X), id(Y), id(Z), id(300), id(50), id(257))

결과:

42178032 507100352 42179216 52031024 507100352 52031088


위 결과를 보시면, 변수 Y와 객체 50의 주소값은 동일하지만 변수 X, Y와 300, 257은 서로 다른 것을 보실 수 있습니다. 


'현재 구현에서는 -5~256 사이의 모든 정수에 대해서 객체 배열을 가지고 있기 때문에 그 사이의 정수를 정의하면 기존에 있는 객체를 참조합니다.'라고 나와있으며, 이는 -5~256 사이의 정수를 X, Y, Z에 넣을때는 미리 만들어져 있는 객체를 참조하지만 범위를 넘어선 경우에는 객체를 새로 정의한다고 합니다. 



5. 변수의 이름 작성 규칙


이런 변수란 것을 만들려면 어떻게 해야 할까요? 우리는 이미 위 예제 코드에서 두개의 변수를 만들었으며, 인터프리터식 언어답게 변수를 알아서 인식하며 '=' 기호를 통해서 변수를 만들 수 있습니다. 변수명에는 문자, 숫자, 언더바(_)를 포함할 수 있으며 숫자는 가장 처음에 등장할 수 없습니다. 또한 파이썬에선 대소문자를 구분하기 때문에 apple이란 변수와 Apple이란 변수는 서로 다릅니다.

1
2
3
4
5
4pple = 10 # 숫자가 가장 처음에 등장했다. 이 경우에는 구문 에러가 발생한다.
admin = 50 # 정상적으로 admin이란 변수가 만들어진다.
Apple = 60 # 정상적으로 Apple이란 변수가 만들어진다.
apple = 70 # 대소문자를 구분하기 때문에 앞에 나온 변수인 Apple과는 별개의 변수이다.
print(admin, Apple, apple) # 세 변수의 값을 모두 출력한다. 출력된 결과는 50 60 70이다.

또한, 아래에 있는 키워드는 변수명으로 사용할 수 없습니다.

False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield


위에 있는 키워드들은 파이썬 문법에서 사용되는 단어로, 특별한 의미를 지니고 있습니다. 아래와 같이 변수를 만들 수는 없다는 말입니다. (주의하실 점은 위의 키워드들은 대소문자가 구분이 안된다고 합니다.)

1
2
3
None = 3
yield = 15
global = 663

위의 코드를 IDLE에 입력하시면 "Invalid syntax", "assignment to keyword"와 같은 에러를 만날 것입니다. 키워드는 변수의 이름으로 쓰일 수 없다는 사실을 기억해두시고 계시기 바랍니다.


저작자: http://blog.eairship.kr/