Python 숫자형

숫자형 종류

a = 123           # 정수형 (int)
a = 1.23          # 실수형 (float)
a = 4.24E10       # 지수형
a = 4.24e-10      # 지수형
a = 0o177         # 8진수
a = 0x8ff         # 16진수
a = 0b1010        # 2진수
a = 3 + 4j        # 복소수 (complex)

산술 연산자

a + b     # 덧셈
a - b     # 뺄셈
a * b     # 곱셈
a / b     # 나눗셈 (실수)
a // b    # 몫 (정수 나눗셈)
a % b     # 나머지
a ** b    # 거듭제곱
-a        # 부호 반전

# divmod: 몫과 나머지 동시에
q, r = divmod(10, 3)  # (3, 1)

내장 함수

# 절댓값
abs(-5)               # 5
abs(-3.14)            # 3.14

# 반올림
round(3.14159)        # 3
round(3.14159, 2)     # 3.14 (소수점 2자리)
round(2.5)            # 2 (은행가 반올림: 짝수로)
round(3.5)            # 4

# 거듭제곱
pow(2, 3)             # 8
pow(2, 3, 5)          # 3 (2^3 % 5)

# 최대/최소
max(1, 2, 3)          # 3
min(1, 2, 3)          # 1
max([1, 2, 3])        # 리스트도 가능

# 합계
sum([1, 2, 3, 4])     # 10
sum([1, 2, 3], 10)    # 16 (시작값 10)

진법 변환

# 10진수 → 다른 진법 (문자열 반환)
bin(10)       # '0b1010' (2진수)
oct(10)       # '0o12'   (8진수)
hex(10)       # '0xa'    (16진수)

# 다른 진법 → 10진수
int('1010', 2)    # 10 (2진수 → 10진수)
int('12', 8)      # 10 (8진수 → 10진수)
int('a', 16)      # 10 (16진수 → 10진수)

# 접두사 없이 변환
format(10, 'b')   # '1010'
format(10, 'o')   # '12'
format(10, 'x')   # 'a'

math 모듈

import math

# 올림/내림/버림
math.ceil(3.2)        # 4 (올림)
math.floor(3.8)       # 3 (내림)
math.trunc(-3.8)      # -3 (버림, 0 방향)

# 제곱근/로그
math.sqrt(16)         # 4.0
math.log(10)          # 2.302... (자연로그)
math.log10(100)       # 2.0
math.log2(8)          # 3.0

# 삼각함수
math.sin(math.pi / 2) # 1.0
math.cos(0)           # 1.0
math.tan(math.pi / 4) # 1.0

# 상수
math.pi               # 3.141592...
math.e                # 2.718281...
math.inf              # 무한대
math.nan              # Not a Number

# 팩토리얼/조합
math.factorial(5)     # 120
math.comb(5, 2)       # 10 (5C2)
math.perm(5, 2)       # 20 (5P2)

# 최대공약수/최소공배수
math.gcd(12, 8)       # 4
math.lcm(12, 8)       # 24 (Python 3.9+)

# 기타
math.fabs(-3.14)      # 3.14 (실수 절댓값)
math.copysign(1, -3)  # -1.0 (부호 복사)
math.isnan(x)         # NaN 체크
math.isinf(x)         # 무한대 체크

유용한 패턴

# 소수점 자릿수 제한 출력
print(f"{3.14159:.2f}")   # "3.14"

# 천 단위 구분자
print(f"{1000000:,}")     # "1,000,000"

# 정수 나눗셈 vs 실수 나눗셈
7 // 2    # 3 (정수)
7 / 2     # 3.5 (실수)

# 음수 나눗셈 주의
-7 // 2   # -4 (내림)
int(-7 / 2)  # -3 (버림)

# 부동소수점 비교 주의
0.1 + 0.2 == 0.3          # False!
math.isclose(0.1 + 0.2, 0.3)  # True