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.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