끝나지 않는 프로그래밍 일기

1. 간단한 출력 살펴보기

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

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

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

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

위 예제를 봐보시면, 파이썬 인터프리터는 이렇게 우리가 하나의 명령을 주면 그에 따른 결과를 돌려주고 있습니다. 우리가 "안녕하세요?"를 출력하라고 명령하면 파이썬은 그 출력 결과를 바로 아래에 보여줍니다. 그리고 >>>는 프롬프트(Prompt)라는 녀석이며, 이는 '나는 너의 명령을 받을 준비가 되어있어!'를 의미하는 것입니다. 앞의 예제에서 사용된 print 함수를 통해서 다양한 문장들을 출력해보면서 어느정도 감이 잡힌다고 느껴지시면, 이제 그 다음으로 수식 계산이 파이썬 내에서 어떻게 이루어지는지 한번 보도록 하겠습니다.


2. 수식 계산

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

>>> 512 + 634
1146
>>> 100 * 2013 * 1004
202105200
>>> 2 * 2014 / 333
12.096096096096096
>>> 55 / 3
18.333333333333332

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


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

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

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


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

>>> 1024 % 100
24
>>> 123 % 5
3

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


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

>>> 2 ** 64
18446744073709551616
>>> 2 ** 32
4294967296
>>> 3014 ** 12
561977561797550433783442605323055764279296

위 결과를 보시면 나오는 값이 어마어마한 수더라도 출력된 것을 보실 수 있으며, 예를 들어서 2 ** 64는 독자분들이 생각을 하시듯 2의 64제곱의 결과를 가져옵니다. 3014 ** 12도 3014의 12제곱의 결과를 가져온다고 할 수 있습니다. 간단하죠? 이처럼 정수형 상수의 표현 범위는 제한이 없으며, CPU 레지스터로 표현할 수 있는 크기보다 큰 정수를 다룰때는 연산 속도가 상당히 느려진다고 합니다.


오늘 설명드린 기본적인 연산자들은 독자분들이 한번 보면 충분히 이해할 수 있는 연산자로, 어느 연산자가 어떤 연산자인지 알아두시면 유용하게 쓰일지도 모릅니다. 지금까지 기본적인 출력 방법과, 7가지 연산자에 대해 알아보았습니다. (여기서 연산자의 기능과 예시는 아래 표로 정리해두었습니다.) 강좌는 여기서 마치도록 하고, 다음 강좌에서는 변수에 대해 알아보도록 하겠습니다. 수고하셨습니다.

연산자

예시

기능

+

a + b

a와 b를 서로 더한다

-

a - b

a와 b를 서로 뺀다

*

a * b

a와 b를 서로 곱한다

/

a / b

a를 b로 나눈다

//

a // b

a를 b로 나눈 몫을 가져온다

%

a % b

a를 b로 나눈 나머지를 가져온다

**

a ** b

a의 b 제곱


  / 연산자를 사용했는데 결과값이 실수의 형태가 아닌 정수의 형태로 출력이 됩니다. 어떻게 해야 할까요? 

파이썬 2.7에서 만약 입력값이 정수일 경우에, / 연산자는 정수의 나눗셈을 의미합니다. 즉, 정수의 입력이라고 가정하고 나눗셈이 이루어지는 것과 같습니다. 만약에 실수의 나눗셈을 원한다면 import를 통해 해결할 수 있습니다. 파이썬 3.x 부턴 기본적으로 실수간의 연산으로 이루어지므로 결과값이 예제의 결과값과 동일하게 출력됨을 확인했습니다.

>>> 30 / 7
4
>>> from __future__ import division
>>> 30 / 7
4.2857142857142856

Q1. 출력 문제 (☆☆☆☆)

print 함수를 통해서 "누구나 따라하는 파이썬!"을 출력해보세요.


Q2. 수식 계산 문제 (★★☆☆☆)

세가지 이상의 연산자를 복합적으로 사용하여 결과를 출력해보세요.


Q3. 연산 순서 문제 (★★☆☆)

아래의 연산 결과를 예측해보세요. (연산자 우선순위는 나중에 연산자를 한꺼번에 소개하면서 언급할 예정이고, 아래에서 사용된 사칙연산과 관련된 연산자들은 기본적으로 우리가 알고 있는 사칙연산의 순서를 따른다는 것을 생각하고 결과를 예측해보세요.)

3 * 2**6 + 12
32 + 50 * 10 // 3
6 / 3 + 15 * 4


Q4. 함수 적응 연습 (★★☆☆)

파이썬에서는 다양한 내장 함수를 제공하고 있습니다. 앞서 설명드린 print 함수 역시도 파이썬 내에 내장되어 있는 함수이기에 우리가 직접 그 기능을 구현하지 않아도 사용할 수 있었던 것입니다. 예를 들어서 abs 함수는 넘겨받은 값의 절댓값을 돌려주고, int 함수는 넘겨받은 값을 정수의 형태로 돌려줍니다. 

>>> abs(-6)
6
>>> int(73.5552)
73

위의 내장 함수와 연산자를 함께 이용하여 다양한 결과를 출력해보세요.