프로그래밍의 기본은 숫자를 다루는 것입니다. 파이썬은 계산기처럼 간단하게 사칙연산을 수행할 수 있을 뿐 아니라, 다양한 숫자 자료형과 연산자를 제공합니다. 이번 포스트에서는 파이썬의 숫자 자료형과 연산자를 알아보고, 실수 연산 시 주의할 점까지 살펴보겠습니다.
파이썬에는 크게 세 가지 숫자 자료형이 있습니다.
| 자료형 | 영문명 | 설명 | 예시 |
|---|---|---|---|
| 정수 | int | 소수점이 없는 숫자 | 10, -5, 0 |
| 실수 | float | 소수점이 있는 숫자 | 3.14, -0.5, 2.0 |
| 복소수 | complex | 실수부와 허수부로 구성 | 3+4j |
대부분의 경우 int와 float만 사용하게 되며, complex는 과학 계산이나 특수한 경우에만 사용합니다.
# 정수
a = 10
b = -5
# 실수
c = 3.14
d = -0.5
# 복소수 (참고용)
e = 3 + 4j
파이썬에서 제공하는 기본 산술 연산자는 다음과 같습니다.
# 덧셈
print(10 + 5) # 15
# 뺄셈
print(10 - 5) # 5
# 곱셈
print(10 * 5) # 50
# 나눗셈
print(10 / 5) # 2.0
/ vs //파이썬 3에서는 나눗셈 연산자가 두 가지로 구분됩니다. 이는 파이썬을 처음 배울 때 혼란스러울 수 있는 부분이므로 주의가 필요합니다.
/ 연산자: 실수 나눗셈/ 연산자는 항상 실수(float) 결과를 반환합니다.
print(10 / 5) # 2.0 (실수)
print(7 / 2) # 3.5
print(10 / 3) # 3.3333333333333335
정수끼리 나눗셈을 해도 결과는 실수가 됩니다.
// 연산자: 정수 나눗셈 (버림 나눗셈)// 연산자는 나눗셈 후 소수점 이하를 버린 정수 결과를 반환합니다.
print(10 // 5) # 2 (정수)
print(7 // 2) # 3 (3.5에서 소수점 버림)
print(10 // 3) # 3 (3.333...에서 소수점 버림)
| 연산 | / 결과 | // 결과 |
|---|---|---|
10 / 5 | 2.0 | 2 |
7 / 2 | 3.5 | 3 |
10 / 3 | 3.333... | 3 |
주의:
//연산자는 "몫"을 구하는 연산자로, 음수에서는 동작이 다를 수 있습니다.print(-7 // 2) # -4 (내림이므로 -3.5 → -4)
% (모듈로 연산자)% 연산자는 나눗셈의 나머지를 구합니다. 이를 모듈로(modulo) 연산자라고 부릅니다.
print(10 % 3) # 1 (10을 3으로 나눈 나머지)
print(7 % 2) # 1 (홀수 판별에 자주 사용)
print(8 % 2) # 0 (짝수)
나머지 연산자는 다음과 같은 상황에서 유용합니다:
# 짝수/홀수 판별
number = 7
if number % 2 == 0:
print('짝수')
else:
print('홀수') # 출력: 홀수
# 3의 배수 판별
if 9 % 3 == 0:
print('3의 배수입니다') # 출력
**** 연산자는 거듭제곱을 계산합니다.
print(2 ** 3) # 8 (2의 3승 = 2 × 2 × 2)
print(5 ** 2) # 25 (5의 2승 = 5 × 5)
print(10 ** 0) # 1 (어떤 수의 0승은 1)
다른 언어에서는 pow() 함수를 사용하는 경우가 많지만, 파이썬은 ** 연산자로 간단하게 표현할 수 있습니다.
# 제곱근 계산 (1/2승)
print(16 ** 0.5) # 4.0 (16의 제곱근)
type() 함수type() 함수는 객체의 자료형(타입)을 알아내는 함수입니다.
print(type(10)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type(10 / 5)) # <class 'float'>
print(type(10 // 5)) # <class 'int'>
a = 10
b = 3.14
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
c = a + b
print(c) # 13.14
print(type(c)) # <class 'float'>
컴퓨터는 실수를 부동소수점(floating point) 방식으로 표현하는데, 이 과정에서 미세한 오차가 발생합니다.
print(0.1 + 0.2) # 0.30000000000000004 (!)
0.3이 나올 것 같지만, 실제로는 0.30000000000000004가 출력됩니다.
컴퓨터는 10진수가 아닌 2진수로 숫자를 저장합니다. 0.1이나 0.2 같은 10진수를 2진수로 정확히 표현할 수 없어서 오차가 생깁니다.
실무에서 정확한 소수 계산이 필요하다면 Decimal 모듈을 사용합니다.
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b) # 0.3 (정확한 결과)
금융 계산처럼 정확성이 중요한 경우 반드시 Decimal을 사용해야 합니다.
정수와 실수를 함께 계산하면 표현 범위가 넓은 실수(float)로 자동 변환되어 계산됩니다.
print(10 + 3.5) # 13.5 (float)
print(type(10 + 3.5)) # <class 'float'>
print(5 * 2.0) # 10.0 (float)
print(type(5 * 2.0)) # <class 'float'>
이를 암시적 형변환(implicit type conversion)이라고 합니다. 파이썬이 자동으로 int를 float로 변환한 후 계산합니다.
# 내부적으로 이렇게 동작
10 + 3.5
→ 10.0 + 3.5 # int를 float로 변환
→ 13.5
수학과 마찬가지로 파이썬도 연산자 우선순위를 따릅니다.
print(2 + 3 * 4) # 14 (곱셈이 먼저)
print((2 + 3) * 4) # 20 (괄호가 최우선)
print(2 ** 3 ** 2) # 512 (거듭제곱은 오른쪽부터: 2^(3^2) = 2^9)
print((2 ** 3) ** 2) # 64 (괄호로 순서 변경: (2^3)^2 = 8^2)
| 우선순위 | 연산자 |
|---|---|
| 1 (높음) | () 괄호 |
| 2 | ** 거듭제곱 |
| 3 | *, /, //, % |
| 4 (낮음) | +, - |