Logo

파이썬의 divmod() 내장 함수로 나눗셈하기

이번 포스팅에서는 파이썬에서 연산자를 이용해서 나눗셈을 하는 방법에 대해서 간단히 알아보고, 몫과 나머지를 동시에 구할 때 사용하는 divmod() 내장 함수에 대해서도 알아보겠습니다.

나누기 연산자

파이썬은 특이하게도 2가지 나누기 연산자를 제공하는데요. 첫 번째는 실수 나누기 연산자인 /이고, 두 번째는 정수 나누기 연산자인 //입니다.

이 두 종의 나누기 연산자는 나머지가 없는 경우에는 동일한 값을 반환하는데요.

>>> 8 / 2
4.0
>>> 8 // 2
4

하지만 엄밀히 얘기하면 이 두 값의 자료형(data type)은 각각 실수와 정수로 차이가 있습니다.

그럼 나눗셈 결과에 나머지가 있는 경우에는 어떨까요?

>>> 8 / 3
2.6666666666666665
8 // 3
>>> 2

이번에는 자료형 뿐만 아니라 반환값에도 매우 유의미한 차이를 볼 수가 있는데요.

/ 연산자는 실수로 나누기를 하여 소수부를 보존하는 반면에 // 연산자는 정수로 나누기를 하여 소수부를 날려 버리고 정수부만 반환하는 것을 볼 수 있습니다.

실제 응용 프로그램에서 나눗셈을 할 때는 이 두 가지 연산자 중에서 어떤 것을 써야할지 명확히 알고 있어야 하겟죠? 이 둘을 무분별하게 혼용한다면 특히 금융권 시스템에서는 매우 곤란한 일이 발생할 수도 있을 것입니다.

나머지 연산자

파이썬에서 나머지를 구할 때는 다른 프로그래밍 언어와 비슷하게 흔히 모듈로(modulo) 연산자라고 불리는 %를 사용합니다.

예를 들어, 82로 나눈 나머지는 0이 되겠죠?

>>> 8 % 2
0

83으로 나눈 나머지는 2가 될 것입니다.

>>> 8 % 3
2

divmod() 함수

나눗셈을 하다보면 간혹 몫과 나머지를 동시에 구하고 싶을 때가 있는데요. 이럴 때 흔히 생각할 수 있는 방법이 동일한 두 개의 수를 대상으로 // 연산자와 % 연산자를 각각 호출하는 것입니다.

>>> (8 // 2, 8 % 2)
(4, 0)
>>> (8 // 3, 8 % 3)
(2, 2)

하지만 파이썬에 내장된 divmod() 함수를 사용하면 한 방에 이 두 개의 작업을 진행할 수 있습니다.

>>> divmod(8, 2)
(4, 0)
>>> divmod(8, 3)
(2, 2)

divmod() 함수는 두 개의 숫자를 인자로 받아, 첫번 째 숫자를 두번 째 숫자로 나눈 몫과 나머지를 튜플(tuple) 형태로 반환하는데요. 결국 divmod() 함수가 하는 일은 다음과 같이 일반 연산자를 사용하여 나타낼 수 있겠습니다.

divmod(x, y) = (x // y, x % y)

전체 코드

본 포스팅에서 제가 작성한 전체 코드는 아래에서 직접 확인하고 실행해보실 수 있습니다.

https://dales.link/8ld

마치면서

이상으로 파이썬의 나누기 연산자와 나머지 연산자, 그리고 divmod() 내장 함수에 대해서 살펴보았습니다. 파이썬으로 나눗셈이 필요하실 때 유용하게 활용하실 수 있으셨으면 좋겠습니다.