컴퓨터가 다루는 데이터 중에는 논리도 있다. 어떤 명제가 참인지 거짓인지를 판단하고 표현하려면 ‘참’과 ‘거짓’을 의미하는 데이터가 필요하다. 참을 의미하는 True와 거짓을 의미하는 False가 그것이다. 2장에서 등식과 부등식을 계산했을 때 보았던 것이다.

4.4.1 불리언

TrueFalse의 데이터 유형은 불리언(boolean, 줄여서 bool)이다. 불리언이라는 이름은 영국의 논리학자 조지 불(George Boole, 1815-1864)의 이름에서 딴 것이다.

수 데이터나 문자열 데이터의 범위가 무한한 데 반해, 불리언 데이터는 참과 거짓 두 개 뿐이다. 파이썬 코드에 불리언 유형 데이터를 입력하려면 True, False를 입력하면 된다. 대소문자가 구별되므로 true, FALSE 같은 코드는 불리언 데이터가 아니다.

지금까지는 불리언 데이터를 등식과 부등식의 계산 결과를 확인하는 용도로만 썼다. 그것은 아직 조건에 따라 프로그램 흐름을 제어하는 방법을 배우지 않았기 때문이다. 불리언은 프로그램의 실행 흐름을 제어할 때도 유용하게 사용된다. 이에 관해서는 6장에서 알아 본다.

4.4.2 불리언 연산

불리언 연산은 논리 연산이라고도 부르며, “해가 서쪽에서 뜨거나 지구가 둥글지 않다.”라는 명제처럼 여러 개의 명제를 조합하여 표현할 때 사용되는 연산이다. 수학 시간에 명제와 논리식에 관해 배웠다면 바로 이해할 수 있는 내용이다. 그렇지 않더라도 어려운 내용이 아니다.

불리언 연산에는 and, or, not 세 가지가 있다. 셋 모두 불리언 데이터 유형이나 불리언으로 계산되는 등식/부등식에 적용할 수 있다.

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 연산은 좌변과 우변의 값 중 하나라도 참이면 참이고, 둘 다 거짓이면 거짓으로 평가된다.

코드 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 연산은 참을 거짓으로, 거짓을 참으로 뒤집는 연산이다. 부정 연산이라고도 한다.

코드 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)