5.1 정수 계산하기

Unit 5. 숫자 계산하기

파이썬은 파이썬 셸을 통하여 입력한 코드의 결과를 즉시 출력할 수 있었죠? 이번에는 파이썬을 계산기처럼 사용해보겠습니다.

숫자 계산을 하기 전에 먼저 숫자의 자료형(타입)부터 살펴봅시다. 파이썬에서는 숫자의 자료형에 따라 결과가 달라질 수 있으므로 이 부분은 정확하게 구분할 필요가 있습니다. 다음과 같이 파이썬에서는 숫자를 정수, 실수, 복소수로 구분합니다.

그림 5-1 파이썬의 숫자 자료형

보통 프로그래밍에서는 정수와 실수를 주로 사용하며 복소수는 공학 분야에서 주로 쓰입니다. 이 책에서는 정수와 실수 위주로 설명하겠습니다.

5.1 정수 계산하기

파이썬 IDLE를 실행하거나 콘솔(터미널, 명령 프롬프트)에서 파이썬을 실행합니다(Windows는 Win+R > cmd 입력 > python 입력, 리눅스와 macOS는 터미널에서 python3을 입력).

C:\Users\dojang>python
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 

5.1.1 사칙연산

파이썬 프롬프트가 나오면 코드와 계산식을 입력받을 준비가 된 상태입니다. >>>1 + 1을 입력한 뒤 엔터 키를 누르면 결괏값 2가 나옵니다.

>>> 1 + 1
2

덧셈뿐만 아니라 뺄셈, 곱셈도 가능합니다.

>>> 1 - 2
-1
>>> 2 * 2
4

이번에는 나눗셈입니다. 파이썬을 비롯한 여러 프로그래밍 언어에서 나누기를 ÷ 기호 대신 /를 사용합니다.

>>> 5 / 2
2.5

5 나누기 2는 2.5가 나왔습니다. 당연한 결과일 수도 있지만 이 부분이 파이썬 2와 파이썬 3의 차이점입니다. 파이썬 2에서 5 / 2는 2.5가 아닌 2가 나오는데, 정수끼리 나눗셈 결과는 정수가 나오도록 정했기 때문입니다. 하지만 파이썬 3는 정수끼리 나눗셈을 해도 실수가 나옵니다.

4 나누기 2를 계산해보면 정말 그런지 확인할 수 있습니다.

>>> 4 / 2
2.0

4 / 2는 2가 아닌 2.0이 나왔습니다. 이렇게 파이썬 3은 나눗셈이 완전히 나누어 떨어져도 실수가 나옵니다.

5.1.2 나눗셈 후 소수점 이하를 버리는 // 연산자

그럼 파이썬 3에서 정수끼리 나눗셈 결과가 정수로 나도록 만들 수는 없을까요? 이때는 //로 나눗셈을 하면 됩니다.

>>> 5 // 2
2
>>> 4 // 2
2

//은 버림 나눗셈(floor division)이라고 부르며 나눗셈의 결과에서 소수점 이하는 버립니다.

참고로 실수에 // 연산자를 사용하면 결과는 실수가 나오며 소수점 이하는 버립니다. 따라서 결과는 항상 .0으로 끝납니다.

>>> 5.5 // 2
2.0
>>> 4 // 2.0
2.0
>>> 4.1 // 2.1
1.0

이런 차이점이 별 것 아닌 것처럼 느껴지지만 코드(알고리즘)를 작성할 때 정수냐 실수냐에 따라 결과가 완전히 달라질 수도 있습니다. 즉, 눈에 잘 띄지 않는 버그가 되므로 이 부분은 꼭 기억해두세요.

5.1.3 나눗셈 후 나머지를 구하는 % 연산자

이번에는 나눗셈 후 나누어 떨어지지 않을 때 나머지를 구해보겠습니다.

>>> 5 % 2
1

5를 2로 나누면 두 번 나눌 수 있고 1이 남습니다. %는 두 수를 나누었을 때 나머지만 구하며 모듈로(modulo) 연산자라고 부릅니다. 참고로 몫은 버림 나눗셈(//)으로 구할 수 있습니다.

5.1.4 거듭제곱을 구하는 ** 연산자

파이썬에서는 거듭제곱도 쉽게 구할 수 있습니다.

>>> 2 ** 10
1024

**은 거듭제곱 연산자이며 숫자를 특정 횟수만큼 곱합니다. 따라서 2 ** 10은 1024이고 210을 뜻합니다.

5.1.5 값을 정수로 만들기

만약 계산 결과가 실수로 나왔을 때 강제로 정수로 만들 수는 없을까요? 이때는 int에 괄호를 붙이고 숫자 또는 계산식을 넣으면 됩니다. 특히 int에 문자열을 넣어도 정수로 만들 수 있습니다. 단, 정수로 된 문자열이라야 합니다.

  • int(숫자)
  • int(계산식)
  • int('문자열')
>>> int(3.3)
3
>>> int(5 / 2)
2
>>> int('10')
10

int는 정수(integer)를 뜻하며 값을 정수로 만들어 줍니다(소수점 이하는 버림).

5.1.6 객체의 자료형 알아내기

그럼 지금까지 사용한 숫자가 정수가 맞는지 확인해보겠습니다.

  • type(값)
>>> type(10)
<class 'int'>

type은 말그대로 객체의 타입(자료형)을 알아내는 함수입니다. type에 괄호를 붙이고 10을 넣어보면 <class 'int'>라고 나오는데 정수(int) 클래스라는 뜻입니다. 파이썬에서는 숫자도 객체(object)이며, 객체는 클래스(class)로 표현합니다.

참고로 앞에서 사용한 int(3.3)은 실수 3.3을 int 클래스로 된 객체로 만든다는 뜻입니다.

참고 | 몫과 나머지를 함께 구하기

몫과 나머지를 함께 구하려면 divmod를 사용하면 됩니다.

>>> divmod(5, 2)
(2, 1)

5를 2로 나누었을 때 몫은 2, 나머지는 1이며 결과는 (2, 1) 형태로 나옵니다. 지금까지 계산 결과가 1, 2, 1024처럼 값만 나왔지만 divmod는 결과가 (2, 1)처럼 나옵니다. 파이썬에서 값을 괄호로 묶은 형태를 튜플(tuple)이라고 하며 값 여러 개를 모아서 표현할 때 사용합니다. 튜플은 'Unit 10 리스트와 튜플 사용하기'에서 자세히 설명하겠습니다.

튜플은 변수 여러 개에 저장할 수 있는데 divmod의 결과가 튜플로 나오므로 몫과 나머지는 변수 두 개에 저장할 수 있습니다.

>>> quotient, remainder = divmod(5, 2)
>>> print(quotient, remainder)
2 1
참고 | 진수, 8진수, 16진수

정수는 10진수 이외에도 2진수, 8진수, 16진수로도 표현할 수 있습니다.

2진수: 숫자 앞에 0b를 붙이며 0과 1을 사용합니다.

8진수: 숫자 앞에 0o(숫자 0과 소문자 o)를 붙이며 0부터 7까지 사용합니다.

16진수: 숫자 앞에 0x 또는 0X를 붙이며 0부터 9, A부터 F까지 사용합니다(소문자 a부터 f도 가능).

>>> 0b110
6
>>> 0o10
8
>>> 0xF
15