Menu

파이썬 숫자와 불리언: int, float, bool, 그리고 산술 연산

파이썬이 정수, 부동소수점 숫자, 불리언을 어떻게 다루는지 — 산술 연산, 타입 변환, 그리고 사람들을 자주 헷갈리게 하는 경계 사례까지.

숫자는 두 종류, 참/거짓은 한 종류

일상적으로 쓸 숫자 타입은 intfloat이에요. 참/거짓을 위한 bool이 여기에 더해집니다. 보통의 파이썬 프로그램이 필요로 하는 산술과 논리는 이 정도면 대부분 해결돼요.

main.py
Output
Click Run to see the output here.

파이썬은 불리언을 정수의 하위 타입으로 취급하기도 해요 — True는 실제로 1이고 False는 실제로 0입니다. 이 성질을 이용한 유용한 트릭이 뒤에 몇 개 나와요.

정수 산술

파이썬의 정수는 오버플로우가 없어요. 중요해 보이지 않다가도, 처음으로 팩토리얼 함수를 만들어 보면 깨닫게 돼요 — 대부분의 다른 언어라면 여기서 조용히 음수로 굴러떨어져 있었을 거라는 걸요.

main.py
Output
Click Run to see the output here.

둘 다 얼마나 크든 정확한 답을 내놓습니다. 한계는 메모리뿐이에요.

산술 연산자는 예상 가능한 것들에 몇 개가 더 얹혀 있어요:

main.py
Output
Click Run to see the output here.

이 목록에서 꼭 기억해 둘 세 가지:

  • /는 Python 3에서 항상 float을 반환합니다. 양쪽이 둘 다 정수여도 그래요. 10 / 25가 아니라 5.0입니다. 정수가 필요하면 //를 쓰세요.
  • //는 음의 무한대 쪽으로 내림합니다. 그래서 -7 // 2-3이 아니라 -4예요. 특이하지만 일관성은 있어요.
  • %는 나머지를 돌려줘요. "이 수가 짝수인가?"(n % 2 == 0)나 고정된 범위로 값을 감싸 돌릴 때 유용합니다.

float의 유명한 함정

float은 태생적으로 완벽하지 않아요. 이진수로 저장되는데, 이진수는 대부분의 소수를 정확히 표현하지 못하거든요. 교과서 예제:

main.py
Output
Click Run to see the output here.

첫 줄은 0.30000000000000004를 출력해요. 두 번째 줄은 False를 출력하고요. IEEE 754 표준을 따르는 모든 언어 — 파이썬, JavaScript, Java, C — 가 똑같이 동작합니다. 파이썬 버그가 아니에요.

실전에서 이게 의미하는 바는 두 가지예요:

  1. float을 ==로 비교하지 마세요. "충분히 가까움"이 필요하다면 math.isclose(a, b)를 쓰거나 abs(a - b) < some_tolerance 같은 식으로 비교하세요.
  2. 돈은 decimal.Decimal로 다루세요. 표준 라이브러리 decimal 모듈은 정확한 십진수 연산을 제공합니다 — 0.1 + 0.2 같은 놀라움이 없어요. float보다 느려서 기본값은 아니지만, 통화 계산에는 맞는 선택입니다.
main.py
Output
Click Run to see the output here.

숫자 타입 간 변환

파이썬은 정수를 문자열로, 문자열을 숫자로 알아서 바꿔주지 않아요. 명시적으로 요청해야 합니다:

main.py
Output
Click Run to see the output here.

유효하지 않은 변환은 ValueError를 발생시킵니다:

>>> int("hello")
ValueError: invalid literal for int() with base 10: 'hello'

에러 메시지가 단도직입적이라 대응하기 쉬워요. 입력을 정리하든, 예외를 잡든 선택하세요.

불리언, 조금 더 깊이

TrueFalse가 두 개의 불리언 값이에요 — 쓴 그대로, 첫 글자가 대문자. 대부분의 비교 연산은 이 둘 중 하나를 내놓습니다:

main.py
Output
Click Run to see the output here.

불리언 연산자는 기호가 아니라 영어 단어로 쓰는 and, or, not입니다:

main.py
Output
Click Run to see the output here.

알아두면 좋은 미묘한 점: andor가 꼭 TrueFalse를 돌려주는 건 아니에요 — 식의 결과를 결정한 값을 돌려줍니다. 0 or "fallback""fallback"을, 5 and 1010을 돌려줘요. 덕분에 name = user_input or "anonymous" 같은 짧은 기본값 패턴을 쓸 수 있고, 불리언 검사 결과 타입이 예상과 다르게 나올 때 이해하는 데도 도움이 됩니다.

Truthy와 Falsy

파이썬은 ifwhile 같은 불리언 문맥에서 많은 값을 "참스러움" 또는 "거짓스러움"으로 다뤄요. falsy 값은 다음과 같아요:

  • False
  • 0, 0.0
  • None
  • 비어 있는 컨테이너: "", [], {}, set(), ()

이 외의 모든 값은 truthy예요. 덕분에 조건문을 더 자연스럽게 쓸 수 있습니다:

main.py
Output
Click Run to see the output here.

if name:을 "name에 뭐라도 들어있다면"으로 읽으세요. if name != "":보다 훨씬 깔끔합니다. 다만 숫자를 다룰 때는 주의하세요 — if count:0을 "건너뛰기"로 취급합니다. 대부분 그게 원하시는 바이지만 항상 그런 건 아니에요. 0이 정당한 값이라면 대신 if count is not None:을 쓰세요.

불리언 산술

불리언은 정수이기도 하기 때문에, 그냥 산술 연산을 할 수 있어요:

main.py
Output
Click Run to see the output here.

이 트릭은 충분히 자주 쓰이니까 기억 속에 챙겨두세요. 리스트에서 어떤 테스트를 통과한 항목이 몇 개인지 세고 싶다면, 불리언을 내놓는 제너레이터를 sum에 넘기세요:

main.py
Output
Click Run to see the output here.

실용적인 정리

  • 정수는 오버플로우가 없어요. 마음껏 쓰세요.
  • /는 float을 돌려줍니다. 정수 나눗셈이 필요하면 //를 쓰세요.
  • float은 ==로 비교하지 말고 허용 오차를 두거나 돈은 Decimal로 다루세요.
  • truthiness가 조건문을 더 읽기 좋게 만들어줘요 — 0과 빈 문자열이 falsy라는 것만 잊지 마세요.

다음은 inputprint예요 — 조용히 끝나는 스크립트를 사용자와 대화하는 프로그램으로 바꿔주는 두 도구입니다.

자주 묻는 질문

파이썬에서 int와 float의 차이는 뭔가요?

int는 소수점이 없는 정수고, float은 소수점이 있는 숫자예요. 파이썬 정수는 크기에 제한이 없어요 — 오버플로우가 없습니다. float은 표준 IEEE 754 규칙을 따르기 때문에 소수 연산에서 아주 작은 정밀도 손실이 생길 수 있어요.

파이썬에서 0.1 + 0.2가 왜 0.3이 안 되죠?

이진 부동소수점은 대부분의 소수를 정확하게 표현할 수 없기 때문이에요. 0.1 + 0.20.30000000000000004가 됩니다. 파이썬 버그가 아니에요 — IEEE 754 float을 쓰는 모든 언어가 똑같이 동작해요. 정확한 소수 계산이 필요하면 decimal 모듈을 쓰세요.

파이썬에서 truthy와 falsy 값이 뭔가요?

파이썬은 불리언 문맥에서 많은 값을 참 또는 거짓으로 취급해요. 글자 그대로 TrueFalse가 아니어도 말이죠. 0, 빈 문자열, 빈 리스트, 빈 딕셔너리, None은 falsy고, 대부분의 나머지 값은 truthy입니다. if my_list:는 "리스트에 뭐라도 들어있다면" 정도로 읽으면 돼요.

Coddy로 코딩 배우기

시작하기