파이썬 왕초보 탈출기 #2: 숫자형(int, float) 완벽 이해 및 활용법

Programming/파이썬|2025. 4. 6. 01:25
반응형

1. 데이터 타입, 왜 알아야 할까요?

변수라는 상자에 데이터를 담을 수 있다는 것은 이제 아실 겁니다. 그런데 왜 데이터의 '타입' 또는 '종류'를 알아야 할까요?

마치 우리가 못을 박을 때는 망치를 쓰고, 나사를 조일 때는 드라이버를 쓰는 것처럼, 데이터의 종류에 따라 컴퓨터가 할 수 있는 작업이나 처리 방식이 달라지기 때문입니다. 예를 들어, 숫자 데이터로는 덧셈, 뺄셈 같은 산술 연산을 할 수 있지만, 글자 데이터(문자열)로 곱셈을 하는 것은 의미가 다릅니다.

파이썬은 변수에 값이 할당될 때 그 값의 종류를 스스로 파악하는 동적 타이핑(Dynamic Typing) 언어입니다. 그래서 C언어나 Java처럼 변수를 만들 때 미리 타입을 지정해주지 않아도 됩니다. 하지만 우리가 어떤 종류의 데이터를 다루고 있는지 이해하는 것은 매우 중요합니다. 그래야 각 타입에 맞는 적절한 연산과 함수를 사용하고, 오류를 방지할 수 있습니다.

 


2. 파이썬의 기본 숫자 타입: 정수(int)와 실수(float)

파이썬에서 숫자를 나타내는 대표적인 데이터 타입은 두 가지가 있습니다.

  • 정수 (Integer, int): 소수점 이하가 없는 숫자를 의미합니다. 우리가 일상생활에서 사용하는 양의 정수, 음의 정수, 그리고 0이 모두 포함됩니다.
  • 실수 (Floating-point number, float): 소수점 이하를 가지는 숫자를 의미합니다. 원주율(π) 같은 무한 소수나 소수점 아래 자릿수가 있는 모든 숫자를 표현할 때 사용됩니다.

 


3. 정수형 (int): 깔끔한 자연의 수

정수는 소수점이 없는 숫자를 다룹니다.

# int 타입 변수 생성 예시
user_age = 30
item_count = 100
negative_number = -50
year = 2025
zero_value = 0

# 변수에 할당된 값의 타입을 확인해 봅시다.
print(type(user_age))      # 출력: <class 'int'>
print(type(negative_number)) # 출력: <class 'int'>

 

파이썬의 int는 특별한 장점이 있습니다. 다른 프로그래밍 언어들과 달리, 표현할 수 있는 정수의 크기에 사실상 제한이 없습니다. 컴퓨터의 메모리가 허용하는 한 아주 큰 정수도 다룰 수 있습니다.

 


4. 실수형 (float): 소수점의 세계

실수는 소수점이 있는 숫자를 다룰 때 사용됩니다.

# float 타입 변수 생성 예시
pi_approx = 3.14159
temperature = -10.5
average_score = 85.7
price = 49.99

# 변수에 할당된 값의 타입을 확인해 봅시다.
print(type(pi_approx))       # 출력: <class 'float'>
print(type(temperature))      # 출력: <class 'float'>

# 정수처럼 보여도 소수점을 찍으면 float 타입이 됩니다.
my_float = 10.0
print(type(my_float))       # 출력: <class 'float'>

# 과학적 표기법 (Scientific Notation)도 가능합니다 (e는 10의 거듭제곱을 의미)
large_float = 3.14e8  # 3.14 * 10^8 와 동일, 즉 314000000.0
small_float = 1.23e-4 # 1.23 * 10^-4 와 동일, 즉 0.000123
print(large_float)
print(small_float)
print(type(large_float))    # 출력: <class 'float'>

 

[🌟팁] 실수의 정밀도 문제: 컴퓨터는 실수를 이진법으로 표현하는 과정에서 아주 미세한 오차를 가질 수 있습니다.

예를 들어, 0.1 + 0.2를 계산하면 정확히 0.3이 아니라 0.30000000000000004와 같은 근삿값이 나올 수 있습니다. 이는 파이썬의 문제라기보다는 부동소수점 표현 방식 자체의 특징입니다. 따라서 매우 정밀한 금융 계산 등에서는 float를 직접 비교하거나 사용하는 데 주의해야 하며, 이런 경우에는 Decimal이라는 다른 타입을 사용하는 것을 고려해야 합니다 (이것은 나중에 더 자세히 다루겠습니다).

 


5. 숫자 연산: 계산기를 만들어 보세요!

파이썬은 숫자들을 가지고 다양한 산술 연산을 수행할 수 있습니다.

a = 10
b = 3
c = 4.0

# 덧셈 (+)
print(f"{a} + {b} = {a + b}")          # 출력: 10 + 3 = 13 (int + int = int)
print(f"{a} + {c} = {a + c}")          # 출력: 10 + 4.0 = 14.0 (int + float = float)

# 뺄셈 (-)
print(f"{a} - {b} = {a - b}")          # 출력: 10 - 3 = 7 (int)
print(f"{c} - {a} = {c - a}")          # 출력: 4.0 - 10 = -6.0 (float)

# 곱셈 (*)
print(f"{a} * {b} = {a * b}")          # 출력: 10 * 3 = 30 (int)
print(f"{b} * {c} = {b * c}")          # 출력: 3 * 4.0 = 12.0 (float)

# 나눗셈 (/) - 결과는 항상 float!
print(f"{a} / {b} = {a / b}")          # 출력: 10 / 3 = 3.333... (float)
print(f"{a} / 2 = {a / 2}")          # 출력: 10 / 2 = 5.0 (결과가 정수라도 float)

# 정수 나눗셈 (//) - 몫만 구함 (소수점 이하 버림)
print(f"{a} // {b} = {a // b}")         # 출력: 10 // 3 = 3 (int)
print(f"10.0 // 3 = {10.0 // 3}")     # 출력: 10.0 // 3 = 3.0 (float // int = float, 몫만)

# 나머지 (%)
print(f"{a} % {b} = {a % b}")          # 출력: 10 % 3 = 1 (10을 3으로 나눈 나머지)
print(f"10 % 4 = {10 % 4}")          # 출력: 10 % 4 = 2

# 거듭제곱 (**)
print(f"{a} ** {b} = {a ** b}")        # 출력: 10 ** 3 = 1000 (10의 3제곱)
print(f"2 ** 10 = {2 ** 10}")       # 출력: 2 ** 10 = 1024

 

  • 핵심: 숫자 타입 중 하나라도 float가 연산에 포함되면, 그 결과는 보통 float가 됩니다 (정수 나눗셈 // 제외).

 


6. 타입 확인 및 변환: 자유로운 변신!

변수에 어떤 타입의 데이터가 들어있는지 확인하거나, 타입을 다른 타입으로 바꾸고 싶을 때가 있습니다.

  • 타입 확인: type() 함수
num1 = 100
num2 = 3.14
print(type(num1)) # 출력: <class 'int'>
print(type(num2)) # 출력: <class 'float'>

 

  • 타입 변환: int()float() 함수
# float를 int로 변환 (소수점 이하 버림!)
float_num = 9.87
int_num = int(float_num)
print(f"{float_num} -> int: {int_num}") # 출력: 9.87 -> int: 9

# int를 float로 변환
integer = 5
float_again = float(integer)
print(f"{integer} -> float: {float_again}") # 출력: 5 -> float: 5.0

# 문자열 형태의 숫자를 int 또는 float로 변환
str_int = "123"
str_float = "45.67"

converted_int = int(str_int)
converted_float = float(str_float)
print(type(converted_int), converted_int)     # 출력: <class 'int'> 123
print(type(converted_float), converted_float) # 출력: <class 'float'> 45.67

 

 

[주의!] 타입 변환 시 오류:

  • int() 함수는 실수를 정수로 바꿀 때 소수점 아래를 버립니다 (반올림 아님).
  • 숫자 형태가 아닌 문자열(예: "hello")을 int()나 float()로 변환하려고 하면 ValueError 오류가 발생합니다.
  • 소수점이 포함된 문자열(예: "3.14")을 int()로 직접 변환하려고 해도 ValueError가 발생합니다. (float()로 먼저 변환 후 int()로 변환해야 합니다: int(float("3.14")))

 


팁 & 흔히 겪는 문제점

  1. 나눗셈 연산자 /는 항상 float를 반환합니다: 10 / 5의 결과가 수학적으로는 정수 2이지만, 파이썬에서는 2.0이라는 float 값을 반환합니다. 정수 몫만 얻고 싶다면 반드시 // 연산자를 사용해야 합니다.
  2. 실수 비교는 신중하게: 앞서 언급한 정밀도 문제 때문에, 두 float 값이 정확히 같은지 비교하는 (==) 것은 위험할 수 있습니다. 0.1 + 0.2 == 0.3 이 False가 될 수 있기 때문입니다. 대신, 두 값의 차이가 아주 작은 값(엡실론, epsilon) 보다 작은 지를 확인하는 방식으로 비교하는 것이 안전합니다. (예: abs(a - b) < 0.000001)
  3. ZeroDivisionError를 조심하십시오: 어떤 숫자를 0으로 나누려고 하면 ZeroDivisionError 라는 실행 시간 오류가 발생하며 프로그램이 중단됩니다. 사용자 입력을 받아 나누는 경우 등에는 0으로 나누는 상황이 발생하지 않도록 미리 확인하는 코드가 필요할 수 있습니다.
  4. ValueError는 친구입니다: int()나 float() 변환 시 ValueError가 발생했다면, 변환하려는 값이 예상한 숫자 형태의 문자열이 아닐 가능성이 높습니다. 어떤 값을 변환하려고 했는지 확인하고, 해당 값이 올바른 형식인지 점검해야 합니다.

 

반응형

댓글()