숫자(Number) 다루기: 파이썬의 기본 계산 능력
1. 서론: 프로그래밍의 핵심, 숫자 연산
프로그래밍은 결국 데이터를 처리하는 과정이며, 그 데이터의 가장 기본적인 형태 중 하나가 바로 숫자입니다. 계산, 통계, 금융, 과학 등 거의 모든 분야에서 숫자를 다루는 것은 필수적인 능력입니다. 파이썬은 숫자를 매우 직관적이고 유연하게 다룰 수 있도록 설계되어 있어, 복잡한 계산도 쉽게 수행할 수 있습니다. 이전 챕터에서 변수에 대해 배웠으니, 이제 그 변수에 숫자를 저장하고 다양한 연산을 수행하는 방법을 알아볼 차례입니다. 이 챕터에서는 파이썬에서 숫자를 어떻게 표현하는지, 어떤 종류의 숫자를 다룰 수 있는지, 그리고 가장 기본적인 사칙연산을 포함한 다양한 숫자 연산자들을 어떻게 활용하는지에 대해 깊이 있게 탐구해 보겠습니다. 숫자를 자유자재로 다루는 능력은 여러분의 파이썬 프로그래밍 실력을 한 단계 더 끌어올릴 것입니다.
2. 파이썬의 숫자 자료형
파이썬은 크게 세 가지 종류의 숫자 자료형을 기본적으로 제공합니다.
2.1. 정수 (Integer, int)
정수는 소수점 이하가 없는 숫자입니다. 양수, 음수, 0을 포함합니다. 파이썬의 정수는 크기 제한이 없어 매우 큰 숫자도 표현할 수 있습니다.
# 정수형 변수 예시
my_integer = 100
negative_integer = -50
zero = 0
large_number = 12345678901234567890
print(type(my_integer)) # 출력: <class 'int'>
print(large_number) # 출력: 12345678901234567890
2.2. 실수 (Floating-point Number, float)
실수는 소수점 이하를 포함하는 숫자입니다. 부동 소수점 방식으로 표현되며, 과학적 표기법(e.g., 1.23e-5)으로도 나타낼 수 있습니다.
# 실수형 변수 예시
my_float = 3.14
negative_float = -0.5
scientific_notation = 1.23e-5 # 0.0000123
print(type(my_float)) # 출력: <class 'float'>
print(scientific_notation) # 출력: 1.23e-05
2.3. 복소수 (Complex Number, complex)
복소수는 실수부와 허수부로 구성된 숫자입니다. 허수부는 j 또는 J를 사용하여 표현합니다. 일반적인 프로그래밍에서는 자주 사용되지 않지만, 공학이나 과학 분야에서 유용하게 활용됩니다.
# 복소수형 변수 예시
my_complex = 3 + 4j
print(type(my_complex)) # 출력: <class 'complex'>
print(my_complex.real) # 출력: 3.0 (실수부)
print(my_complex.imag) # 출력: 4.0 (허수부)
3. 사칙연산자 (Arithmetic Operators)
파이썬은 기본적인 사칙연산을 위한 다양한 연산자를 제공합니다. 이 연산자들은 숫자 자료형에 적용되어 수학적인 계산을 수행합니다.
| 연산자 | 설명 | 예시 | 결과 |
|---|---|---|---|
+ |
덧셈 | 10 + 3 |
13 |
- |
뺄셈 | 10 - 3 |
7 |
* |
곱셈 | 10 * 3 |
30 |
/ |
나눗셈 | 10 / 3 |
3.333... |
// |
정수 나눗셈 | 10 // 3 |
3 |
% |
나머지 | 10 % 3 |
1 |
** |
거듭제곱 | 2 ** 3 |
8 |
예시 코드:
a = 10
b = 3
# 덧셈
print(f"a + b = {a + b}") # 출력: a + b = 13
# 뺄셈
print(f"a - b = {a - b}") # 출력: a - b = 7
# 곱셈
print(f"a * b = {a * b}") # 출력: a * b = 30
# 나눗셈 (결과는 항상 실수형)
print(f"a / b = {a / b}") # 출력: a / b = 3.3333333333333335
# 정수 나눗셈 (몫만 취함, 결과는 정수형)
print(f"a // b = {a // b}") # 출력: a // b = 3
# 나머지 연산
print(f"a % b = {a % b}") # 출력: a % b = 1
# 거듭제곱
print(f"a ** b = {a ** b}") # 출력: a ** b = 1000 (10의 3제곱)
print(f"2 ** 4 = {2 ** 4}") # 출력: 2 ** 4 = 16 (2의 4제곱)
3.1. 연산자 우선순위
수학에서와 마찬가지로 파이썬에서도 연산자에는 우선순위가 있습니다. 일반적으로 거듭제곱(**)이 가장 높고, 곱셈(*), 나눗셈(/, //, %)이 그다음, 덧셈(+), 뺄셈(-)이 가장 낮습니다. 괄호 ()를 사용하면 우선순위를 명시적으로 지정하거나 변경할 수 있습니다.
result1 = 2 + 3 * 4
print(result1) # 출력: 14 (곱셈 먼저 계산: 2 + 12)
result2 = (2 + 3) * 4
print(result2) # 출력: 20 (괄호 안의 덧셈 먼저 계산: 5 * 4)
result3 = 10 / 2 + 3 ** 2
print(result3) # 출력: 14.0 (거듭제곱 -> 나눗셈 -> 덧셈: 5.0 + 9)
4. 복합 할당 연산자 (Compound Assignment Operators)
변수에 연산을 수행한 후 그 결과를 다시 변수에 할당하는 경우가 많습니다. 이때 복합 할당 연산자를 사용하면 코드를 더 간결하게 작성할 수 있습니다.
| 연산자 | 설명 | 예시 | 동일한 표현 |
|---|---|---|---|
+= |
덧셈 후 할당 | x += 5 |
x = x + 5 |
-= |
뺄셈 후 할당 | x -= 5 |
x = x - 5 |
*= |
곱셈 후 할당 | x *= 5 |
x = x * 5 |
/= |
나눗셈 후 할당 | x /= 5 |
x = x / 5 |
//= |
정수 나눗셈 후 할당 | x //= 5 |
x = x // 5 |
%= |
나머지 후 할당 | x %= 5 |
x = x % 5 |
**= |
거듭제곱 후 할당 | x **= 5 |
x = x ** 5 |
예시 코드:
count = 10
count += 5 # count = count + 5 와 동일
print(count) # 출력: 15
price = 100
price *= 0.9 # price = price * 0.9 와 동일 (10% 할인)
print(price) # 출력: 90.0
score = 50
score -= 10 # score = score - 10 와 동일
print(score) # 출력: 40
distance = 25
distance /= 2 # distance = distance / 2 와 동일
print(distance) # 출력: 12.5
5. 숫자 자료형 변환 (Type Conversion)
때로는 다른 자료형의 숫자를 서로 연산하거나, 특정 자료형으로 변환해야 할 필요가 있습니다. 파이썬은 이를 위한 내장 함수를 제공합니다.
int(): 다른 자료형을 정수로 변환합니다. 실수를 정수로 변환할 때는 소수점 이하를 버립니다.float(): 다른 자료형을 실수로 변환합니다.str(): 다른 자료형을 문자열로 변환합니다.
# 실수 -> 정수
float_num = 3.7
int_num = int(float_num)
print(int_num) # 출력: 3 (소수점 이하 버림)
# 정수 -> 실수
int_num2 = 5
float_num2 = float(int_num2)
print(float_num2) # 출력: 5.0
# 문자열 -> 숫자
str_int = "123"
str_float = "45.67"
converted_int = int(str_int)
converted_float = float(str_float)
print(converted_int) # 출력: 123
print(converted_float) # 출력: 45.67
print(type(converted_int)) # 출력: <class 'int'>
# 주의: 숫자로 변환할 수 없는 문자열은 오류 발생
# int("hello") # ValueError: invalid literal for int() with base 10: 'hello'
6. 숫자 연산의 주의사항: 부동 소수점 오차
실수(float) 연산에서는 ‘부동 소수점 오차’라는 미세한 오차가 발생할 수 있습니다. 이는 컴퓨터가 실수를 이진수로 표현하는 방식의 한계 때문에 발생하며, 파이썬뿐만 아니라 대부분의 프로그래밍 언어에서 나타나는 현상입니다.
result = 0.1 + 0.2
print(result) # 출력: 0.30000000000000004 (정확히 0.3이 아님)
result2 = 1.0 - 0.8
print(result2) # 출력: 0.19999999999999996 (정확히 0.2가 아님)
이러한 오차는 일반적인 계산에서는 문제가 되지 않지만, 금융 계산과 같이 정밀한 계산이 필요한 경우에는 문제가 될 수 있습니다. 정밀한 계산이 필요한 경우 파이썬의 decimal 모듈을 사용하는 것이 좋습니다.
from decimal import Decimal
result_decimal = Decimal('0.1') + Decimal('0.2')
print(result_decimal) # 출력: 0.3
7. 결론: 숫자를 통한 데이터 처리의 시작
이 챕터를 통해 여러분은 파이썬에서 숫자를 다루는 기본적인 방법을 익혔습니다. 정수, 실수, 복소수와 같은 숫자 자료형의 개념을 이해하고, 덧셈, 뺄셈, 곱셈, 나눗셈 등 다양한 사칙연산자를 활용하여 계산을 수행하는 방법을 배웠습니다. 또한, 복합 할당 연산자를 사용하여 코드를 간결하게 작성하는 방법과, 숫자 자료형 간의 변환, 그리고 부동 소수점 오차와 같은 주의사항까지 살펴보았습니다.
숫자를 자유자재로 다루는 능력은 모든 프로그래밍의 기본 중의 기본입니다. 여러분이 앞으로 어떤 종류의 프로그램을 만들든, 숫자를 이용한 계산은 항상 필요할 것입니다. 오늘 배운 내용을 바탕으로 다양한 숫자들을 가지고 직접 연산을 수행해 보면서 파이썬의 계산 능력에 익숙해지세요. 다음 챕터에서는 파이썬에서 텍스트 데이터를 다루는 핵심 자료형인 ‘문자열(String)’에 대해 자세히 알아보겠습니다. 변수와 숫자에 이어 문자열까지 마스터하면, 여러분은 더욱 다양한 종류의 데이터를 처리할 수 있는 기반을 갖추게 될 것입니다.
