"파이썬으로 계산쯤이야 쉽지" 싶지만, 막상 해보면 10 / 3은 왜 3.3333…이 되고 10 // 3은 왜 3인지, 0.1 + 0.2가 왜 정확히 0.3이 아닌지에서 다들 한 번씩 멈칫합니다. 이번 편에서 숫자형의 모든 것 — 정수와 실수, 일곱 가지 연산자, 두 종류의 나눗셈, 그리고 그 악명 높은 부동소수점 오차까지 — 확실히 정리합니다.
이 편에서 배우는 것
① 정수(int)와 실수(float)의 차이 ② 산술 연산자 7가지와 우선순위 ③ /·//·% 나눗셈 삼총사 ④ 부동소수점 오차의 원인과 해결(round·decimal) ⑤ 숫자 관련 내장 함수와 math 모듈 맛보기
1. 정수(int) — 끝없이 커지는 수
소수점이 없는 수가 정수(int)입니다. 파이썬의 정수는 다른 많은 언어와 달리 자리수 제한이 없습니다. 메모리가 허락하는 한 얼마든지 큰 수도 정확히 계산합니다.
print(2 ** 100) # 2의 100승도 오차 없이
# 1267650600228229401496703205376
big = 1_000_000 # 밑줄로 자릿수를 구분해 읽기 쉽게 (값은 1000000)
print(big) # 1000000
진법도 표현할 수 있습니다. 2진수는 0b, 8진수는 0o, 16진수는 0x를 앞에 붙입니다.
print(0b1010) # 10 (2진수)
print(0xff) # 255 (16진수)
2. 실수(float) — 소수점이 있는 수
소수점이 있으면 실수(float)입니다. 아주 크거나 작은 수는 지수 표기(e)로도 씁니다.
pi = 3.14
print(type(pi)) # <class 'float'>
print(1.5e3) # 1500.0 (1.5 × 10^3)
print(2e-2) # 0.02
💡 정수와 실수를 함께 연산하면 결과는 실수가 됩니다. 3 + 0.0의 결과는 3.0입니다. 더 넓은 쪽(실수)으로 자동으로 맞춰지기 때문입니다.
3. 산술 연산자 7가지
| 연산자 | 의미 | 예시 | 결과 |
|---|---|---|---|
| + | 덧셈 | 7 + 3 | 10 |
| - | 뺄셈 | 7 - 3 | 4 |
| * | 곱셈 | 7 * 3 | 21 |
| / | 나눗셈(실수) | 7 / 3 | 2.333… |
| // | 몫(버림) | 7 // 3 | 2 |
| % | 나머지 | 7 % 3 | 1 |
| ** | 거듭제곱 | 7 ** 2 | 49 |
가장 헷갈리는 나눗셈 삼총사 — /, //, %
파이썬에는 나눗셈이 사실상 세 종류입니다. 이 셋의 구분이 입문의 단골 함정입니다.
print(10 / 3) # 3.3333333333333335 (/는 항상 실수)
print(10 // 3) # 3 (//는 몫만, 소수점 버림)
print(10 % 3) # 1 (%는 나머지)
# 활용: 초를 분과 초로 나누기
total = 137
print(total // 60, "분", total % 60, "초") # 2 분 17 초
/ 는 나눈 값(실수), // 는 정수 몫, % 는 나머지. "짝수 판별(n % 2 == 0)"과 "자릿수 분리"에 // 와 % 가 단골로 등장합니다.
4. 연산자 우선순위와 복합 할당
수학처럼 ** > * / // % > + - 순으로 먼저 계산됩니다. 헷갈리면 괄호로 묶는 것이 정답입니다. 가독성도 좋아집니다.
print(2 + 3 * 4) # 14 (곱셈 먼저)
print((2 + 3) * 4) # 20 (괄호 먼저)
변수 자신을 갱신할 때는 +=, -=, *=, //= 같은 복합 할당 연산자가 편리합니다.
count = 10
count += 5 # count = count + 5 와 같음
print(count) # 15
5. 악명 높은 부동소수점 오차
다음 결과를 보면 처음엔 누구나 당황합니다.
print(0.1 + 0.2) # 0.30000000000000004 (?!)
print(0.1 + 0.2 == 0.3) # False
버그가 아닙니다. 컴퓨터는 모든 수를 2진수로 저장하는데, 0.1 같은 십진 소수는 2진수로 정확히 표현되지 않아 아주 미세한 오차가 생깁니다. 이는 파이썬만의 문제가 아니라 거의 모든 언어가 공유하는 부동소수점의 본질적 한계입니다.
해결 방법
① 비교는 반올림하거나 오차 범위로: 화면 표시는 round()로 충분합니다.
print(round(0.1 + 0.2, 2)) # 0.3
print(round(3.14159, 2)) # 3.14
② 돈 계산처럼 정확도가 중요하면 decimal 모듈을 씁니다.
from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2")) # 0.3 (정확!)
⚠️ 흔한 실수 — 두 실수가 같은지 ==로 직접 비교하지 마세요. round()로 자리수를 맞추거나, abs(a - b) < 1e-9처럼 "충분히 가까운가"로 판단하는 것이 안전합니다.
6. 숫자 관련 내장 함수 & math 모듈
자주 쓰는 숫자 함수는 설치 없이 바로 쓸 수 있습니다.
print(abs(-7)) # 7 (절댓값)
print(round(3.567, 1))# 3.6 (반올림)
print(pow(2, 10)) # 1024 (거듭제곱, 2**10과 동일)
print(divmod(17, 5)) # (3, 2) (몫과 나머지를 한 번에)
print(max(3, 9, 1), min(3, 9, 1)) # 9 1
print(sum([1, 2, 3, 4])) # 10
더 깊은 수학 함수는 math 모듈에 있습니다. (모듈은 9부에서 자세히 다룹니다.)
import math
print(math.sqrt(16)) # 4.0 (제곱근)
print(math.pi) # 3.141592653589793
print(math.ceil(3.1)) # 4 (올림)
print(math.floor(3.9)) # 3 (내림)
마무리 & 연습문제 (정답 포함)
이번 편에서는 정수와 실수, 7가지 산술 연산자, 나눗셈 삼총사(/ // %), 우선순위와 복합 할당, 부동소수점 오차와 해결법, 그리고 숫자 내장 함수까지 다뤘습니다. 아래 문제로 손에 익혀 보세요.
문제 1. 초 단위 정수를 입력받아 "○분 ○초"로 출력하기.
문제 2. 어떤 수가 짝수인지 홀수인지 출력하기.
문제 3. 원화 금액을 입력받아 부가세(10%)를 더한 최종 금액을 원 단위로 반올림해 출력하기.
✅ 정답 예시
# 문제 1
sec = int(input("초: "))
print(sec // 60, "분", sec % 60, "초")
# 문제 2
n = int(input("숫자: "))
print("짝수" if n % 2 == 0 else "홀수")
# 문제 3
price = int(input("금액: "))
print("최종:", round(price * 1.1))
더 공부할 거리
다음 3편에서는 또 하나의 핵심 자료형 문자열(str)을 정복합니다. 글자를 자르는 슬라이싱, 수십 가지 문자열 메서드, 그리고 실무에서 매일 쓰는 f-string 포매팅까지 — 텍스트를 자유자재로 다루는 기술을 익힙니다. 🚀
'AI > Coding' 카테고리의 다른 글
| 파이썬 입문 3편 — 문자열 완전 정복: 인덱싱·슬라이싱부터 f-string·인코딩까지 (1) | 2026.06.11 |
|---|---|
| 파이썬 입문 1편 — 프로그래밍이 처음이어도 괜찮습니다: 설치부터 첫 코드, 변수·자료형까지 (0) | 2026.06.10 |
| 코딩의 덧셈·나눗셈·몫·나머지 완전 기초: 초보자를 위한 산술 연산자 설명 (0) | 2026.06.09 |