01.3 파이썬 인터프리터
파이썬을 설치했다면 파이썬 버전을 먼저 확인합니다. 터미널에서 python --version 명령어를 실행해보세요. 이 명령은 설치된 파이썬의 버전을 출력합니다.
$ python --version
Python 3.5.2 :: Anaconda 4.2.0 (x86_64)
이처럼 “Python 3.x.x”라 표시되면 파이썬 3가 제대로 설치된 것입니다(설치한 버전에 따라 숫자는 달라지겠죠?). 이어서 python이라고 입력하여 파이썬 인터프리터를 시작해보세요.
$ python
Python 3.5.2 |Anaconda 4.2.0 (x86_64)| (default, Jul 2 2016, 17:52:12)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
파이썬 인터프리터는 ‘대화 모드’라 하여, 개발자와 파이썬이 대화하듯 프로그래밍할 수 있습니다. ‘대화하듯’이라는 것은 예를 들면, 개발자가 “1+2는?”이라고 물으면 파이썬 인터프리터가 곧바로 “3입니다”라고 대답한다는 의미입니다. 그럼 실제로 입력해보겠습니다.
>>> 1 + 2
3
이처럼 파이썬 인터프리터에서는 대화식으로 프로그래밍할 수 있습니다. 이번 장에서는 이 대화 모드를 사용하여 파이썬 프로그래밍의 간단한 예를 살펴볼 것입니다.
1.3.1 산술 연산
덧셈과 곱셈 등의 산술 연산은 다음과 같이 할 수 있습니다.
>>> 1 - 2
-1
>>> 4 * 5
20
>>> 7 / 5
1.4
>>> 3 ** 2
9
*은 곱셈, /는 나눗셈, **는 거듭제곱을 의미합니다(3 ** 2는 3의 2제곱). 참고로, 파이썬 2에서는 정수끼리 계산한 결과는 정수입니다. 예를 들어 7 ÷ 5의 결과는 1입니다. 한편, 파이썬 3에서는 정수를 나눈 결과는 소수(부동소수점)가 됩니다.
1.3.2 자료형
프로그래밍 언어에는 자료형 data type이라는 것이 있습니다. 자료형이란 데이터의 성질을 나타내는 것으로, 예를 들어 정수, 소수, 문자열과 같은 형태가 있습니다. 파이썬에는 type() 함수로 특정 데이터의 자료형을 알아볼 수 있습니다.
>>> type(10)
<class 'int'>
>>> type(2.718)
<class 'float'>
>>> type("hello")
<class 'str'>
즉, 10은 int(정수), 2.718은 float(부동소수점), “hello”는 str(문자열)형임을 알 수 있습니다. 또한 자료형과 클래스 class라는 말을 같은 의미로 사용하는 경우가 있습니다. 방금 예에서의 <class 'int'>는 “10은 int라는 클래스(자료형)다”로 해석하면 됩니다.
1.3.3 변수
x와 y 등의 알파벳을 사용하여 변수 variable를 정의할 수 있습니다. 또한, 변수를 사용하여 계산하거나 변수에 다른 값을 대입할 수도 있습니다.
>>> x = 10 # 초기화
>>> print(x) # x의 값 출력
10
>>> x = 100 # 변수에 값 대입
>>> print(x)
100
>>> y = 3.14
>>> x * y
314.0
>>> type(x * y)
<class 'float'>
파이썬은 동적 언어로 분류되는 프로그래밍 언어입니다. 동적이라 함은 변수의 자료형을 상황에 맞게 자동으로 결정한다는 뜻입니다. 앞의 예에서 x의 자료형이 int(정수)라는 것을 사용자가 명시한 적이 없죠? 하지만 10이라는 정수로 초기화할 때, x의 형태가 int임을 파이썬이 판단하는 것입니다. 또, 정수와 소수를 곱한 결과는 소수가 되었습니다(자동 형변환). 마지막으로 #은 주석의 시작을 알리는 문자입니다. # 이후의 문자는 모두 무시해버립니다.
1.3.4 리스트
여러 데이터를 리스트 list 로도 정리할 수 있습니다.
>>> a = [1, 2, 3, 4, 5] # 리스트 생성
>>> print(a) # 리스트의 내용 출력
[1, 2, 3, 4, 5]
>>> len(a) # 리스트의 길이 출력
5
>>> a[0] # 첫 원소에 접근
1
>>> a[4] # 다섯 번째 원소에 접근
5
>>> a[4] = 99 # 값 대입
>>> print(a)
[1, 2, 3, 4, 99]
원소에 접근할 때는 a[0]처럼 합니다. [] 안의 수를 인덱스(색인)라 하며 인덱스는 0부터 시작합니다(인덱스 0이 첫 번째 원소를 가리킵니다). 또 파이썬 리스트에는 슬라이싱 slicing 이라는 편리한 기법이 준비되어 있습니다. 슬라이싱을 이용하면 리스트 안의 특정 원소 하나뿐 아니라 부분 리스트에도 접근할 수 있습니다.
>>> print(a)
[1, 2, 3, 4, 99]
>>> a[0:2] # 인덱스 0부터 2까지 얻기(2번째는 포함하지 않는다!)
[1, 2]
>>> a[1:] # 인덱스 1부터 끝까지 얻기
[2, 3, 4, 99]
>>> a[:3] # 처음부터 인덱스 3까지 얻기(3번째는 포함하지 않는다!)
[1, 2, 3]
>>> a[:-1] # 처음부터 마지막 원소의 1개 앞까지 얻기
[1, 2, 3, 4]
>>> a[:-2] # 처음부터 마지막 원소의 2개 앞까지 얻기
[1, 2, 3]
리스트를 슬라이싱하려면 a[0:2]처럼 씁니다. a[0:2]는 인덱스 0부터 1(2보다 하나 앞)까지의 원소를 꺼냅니다. 인덱스 번호로 -1은 마지막 원소, -2는 끝에서 한 개 앞의 원소에 해당합니다.
1.3.5 딕셔너리
리스트는 인덱스 번호로 0, 1, 2, … 순으로 값을 저장합니다. 딕셔너리 dictionary 는 키 key 와 값 value 을 한 쌍으로 저장합니다. 즉, 영한사전처럼 단어와 그 의미를 짝지어 저장합니다.
>>> me = {'height':180} # 딕셔너리 생성
>>> me['height'] # 원소에 접근
180
>>> me['weight'] = 70 # 새 원소 추가
>>> print(me)
{'weight': 70, 'height': 180}
1.3.6 bool
파이썬에는 bool 불 혹은 불리언 이라는 자료형이 있습니다. 이 자료형은 True(참)와 False(거짓)라는 두 값 중 하나를 취합니다. 또 bool에는 and, or, not 연산자를 사용할 수 있습니다(수치용 연산자로는 +, -, *, / 등이 있듯이 자료형에 따라 사용할 수 있는 연산자가 정해져 있습니다).
>>> hungry = True # 배가 고프다.
>>> sleepy = False # 졸리지 않는다.
>>> type(hungry)
<class 'bool'>
>>> not hungry
False
>>> hungry and sleepy # 배가 고프다 그리고 졸리지 않다.
False
>>> hungry or sleepy # 배가 고프다 또는 졸리지 않다.
True
1.3.7 if 문
조건에 따라서 달리 처리하려면 if/else 문을 사용합니다.
>>> hungry = True
>>> if hungry:
... print("I'm hungry")
...
I'm hungry
>>> hungry = False
>>> if hungry:
... print("I'm hungry") # 들여쓰기는 공백 문자로
... else:
... print("I'm not hungry")
... print("I'm sleepy")
...
I'm not hungry
I'm sleepy
파이썬에서는 공백 문자가 중요한 의미를 지닙니다. 이번 if 문에서도 if hungry: 다음 줄은 앞쪽에 4개의 공백 문자가 있습니다. 이 들여쓰기는 지난 조건(if hungry)이 충족될 때 실행되는 코드를 표현합니다.
WARNING_ 공백 대신 탭 문자를 써도 되지만 파이썬에서는 공백 문자를 사용하는 쪽을 권장합니다. 그리고 한 단계 더 들여 쓸 때마다 공백 4개씩을 더 추가하는 것이 일반적입니다.
1.3.8 for 문
반복(루프) 처리에는 for 문을 사용합니다.
>>> for i in [1, 2, 3]:
... print(i)
...
1
2
3
여기에서는 [1, 2, 3]이라는 리스트 안의 원소를 하나씩 출력하는 예를 보여줬습니다. for ... in ... : 구문을 사용하면 리스트 등 데이터 집합의 각 원소에 차례로 접근할 수 있습니다.
1.3.9 함수
특정 기능을 수행하는 일련의 명령들을 묶어 하나의 함수 function 로 정의할 수 있습니다.
>>> def hello():
... print("Hello World!")
...
>>> hello()
Hello World!
함수는 인수를 취할 수 있습니다. 또한, + 연산자를 사용하여 문자열을 이어 붙일 수 있습니다.
>>> def hello(object):
... print("Hello " + object + "!")
...
>>> hello("cat")
Hello cat!
파이썬 인터프리터를 종료하려면 리눅스와 맥에서는 [Ctrl] + [D] ([Ctrl] 키를 누른 상태에서 [D] 키를 누른다)를 입력합니다. 윈도우에서는 [Ctrl] + [Z]를 입력하고 [Enter] 키를 누릅니다.