컴퓨터가 무언가가 올바른지 틀린지를 판단하고 표현하려면 ‘참’과 ‘거짓’을 의미하는 데이터가 필요하다. 파이썬에서는 True로 참을 나타내고, False로 거짓을 나타낸다. 2장에서 등식과 부등식을 계산했을 때 보았던 것이다.

4.4.1 불리언

TrueFalse의 데이터 유형은 불리언(boolean, 줄여서 bool)이라고 부른다. 영국의 논리학자 조지 불(George Boole, 1815-1864)의 이름을 따 만든 용어다.

수 데이터나 문자열 데이터의 범위가 무한한 데 반해, 불리언 데이터는 참과 거짓 두 개 뿐이다. 파이썬 코드에 불리언 유형 데이터를 입력하려면 True, False를 입력하면 된다. true, FALSE 등으로 대소문자를 잘못 입력하지 않도록 주의하자.

4.4.2 논리 연산

논리 연산을 이용하면 여러 개의 명제를 하나로 조합하거나, 명제를 반대로 부정할 수 있다. “해가 서쪽에서 뜬다”라는 명제와 “지구가 둥글다”라는 명제를 합쳐서 “해가 서쪽에서 뜨거나 지구가 둥글다.”와 같이 합할 수 있다. 또, “지구가 둥글다”라는 명제를 “지구가 둥글지 않다”와 같이 부정할 수도 있다.

파이썬으로 불리언 데이터에 논리 연산을 적용할 수 있다. 논리 연산에는 and, or, not 세 가지가 있다.

and 연산

and 연산은 ‘그리고’라는 뜻이다. 좌변과 우변의 값이 모두 참이어야만 참이고, 둘 중 하나라도 거짓이면 거짓으로 평가된다.

코드 4-29 and 연산의 예

>>> True and True   # 좌변과 우변이 모두 참이어야 참
True

>>> True and False  # 둘 중 하나라도 거짓이면 거짓
False

>>> True and True and True  # 여러 번 연산할 수도 있다
True

>>> 1 + 1 == 2 and 3 < 4  # 여러 등식을 함께 평가할 때도 활용
True

or 연산

or 연산은 좌변과 우변의 값 중 하나라도 참이면 참이고, 둘 다 거짓일 때만 거짓으로 평가된다.

코드 4-30 or 연산의 예

>>> True or False   # 좌변과 우변 중 하나라도 참이면 참
True

>>> False or False  # 둘 다 거짓이면 거짓
False

>>> False or False or True  # 여러 번 연산할 수도 있다
True

>>> False or True and True  # and 와 or 를 연이어 연산해도 된다
True

and 연산과 or 연산은 계산되는 값이 좌우에 하나씩이고 각 값이 가질 수 있는 경우의 수는 참과 거짓 둘이므로, 계산결과가 각각 네가지 뿐이다. 이것을 정리해 둔 표를 진리표라고 부른다. 표 4-2에 두 연산의 진리표를 만들어 두었다.

좌변 우변 and 연산결과 or 연산결과
True True True True
True False False True
False True False True
False False False False

표 4-2 진리표

not 연산

마지막으로, not 연산은 참을 거짓으로, 거짓을 참으로 뒤집는 연산이다.

코드 4-31 not 연산의 예

>>> not True   # 참의 반대는 거짓
False

>>> not False  # 거짓의 반대는 참
True

>>> True and not False  # 다른 불리언 연산과 조합할 수도 있다
True

4.4.3 참으로, 거짓으로 평가되는 값

프로그래밍에서 참과 거짓을 평가하는 일은 매우 자주 일어나는 일이고, 불리언 데이터가 아니더라도 다양한 데이터는 참과 거짓의 평가 대상이 될 수 있다. 그러므로 어떤 값이 참이고 어떤 값이 거짓인지 알아 두어야 한다.

다행히 규칙이 간단하다. 몇몇 예외를 제외하면 모든 데이터는 참으로 평가되기 때문에, 거짓으로 평가되는 값이 무엇인지만 알아두면 된다. 표 4-3을 확인하자.

데이터 유형 의미
False 불리언 거짓
None None 유형 값 없음
0 정수 0
0.0 실수 0
0j 복소수 0
'' 문자열 빈 문자열
() 튜플 빈 튜플
[] 리스트 빈 리스트
{} 집합 빈 집합
dict() 사전 빈 사전

표 4-3 거짓으로 평가되는 값

아직 배우지 않은 데이터 유형도 있지만, ‘없다’, ‘0이다’, ‘비었다’라는 의미를 갖는 값들이 거짓으로 평가됨을 알 수 있다. 이 외의 다른 모든 값은 참으로 평가된다.

어떤 데이터가 참인지 거짓인지 기억이 나지 않는다면 대화식 셸에 bool(데이터) 라고 입력해서 검사해보면 된다.

코드 4-32 데이터의 참과 거짓 확인

>>> bool(0)       # 정수 0은 없음을 의미하므로 거짓이다
False

>>> bool(1)       # 0을 제외한 모든 정수는 참이다
True

>>> bool(None)    # 없음을 의미하는 None은 거짓이다
False

연습문제

연습문제 4-7 불리언 연산 연습

다음 연산의 결과를 예상해 보고, 대화식 셸에 입력해 확인해 보아라.

  1. not(True and True or False)
  2. bool(10 < 20 and 0)
  3. bool(False or 1)