Skip to content

2. 불(Boolean)과 비교, 논리 연산자


1. 키워드

  • 불(Boolean)
  • 비교 연산자와 논리 연산자
  • 단락 평가(Short-Circuit Evaluation)


2. 불과 비교, 논리 연산자 알아보기

  • 비교, 논리 연산자는 프로그래밍에서 매우 광범위하게 쓰인다.
  • 특히 if, while 구문을 작성할 때 비교, 논리 연산자를 자주 사용한다.


3. 불과 비교 연산자 사용하기

  • 불은 True, False로 표현하며 1, 3.6, "Python"처럼 값의 일종이다.
>>> True
True
>>> False
False


1) 비교 연산자의 판단 결과

  • 파이썬에서는 비교 연산자와 논리 연산자의 판단 결과로 True, False를 사용한다.
  • 즉, 비교 결과가 맞으면 True, 아니면 False이다.


>>> 3 > 1
True


  • 부등호 >로 두 숫자를 비교했으며, 31보다 크므로 결과는 참이고 True가 나온다.


2) 숫자가 같은지 다른지 비교하기

  • 두 숫자가 같은지 비교할 때는 ==(equal), 다른지 비교할 때는 !=(not equal)을 사용한다.


>>> 10 == 10
True
>>> 10 != 5
True


  • 1010은 같으므로 True, 105는 다르므로 True가 나온다.


3) 문자열이 같은지 다른지 비교하기

  • 숫자뿐만 아니라 문자열도 ==!= 연산자로 비교할 수 있다.
  • 문자열을 비교할 때는 대소문자를 구분한다.


>>> "Python" == "Python"
True
>>> "Python" == "python"
False
>>> "Python" != "python"
True


4) 부등호 사용하기

  • 부등호는 다음과 같이 첫 번째 값을 기준으로 비교한다.


>>> 10 > 20
False
>>> 10 < 20
True
>>> 10 >= 10
True
>>> 10 <= 10
True


5) 객체가 같은지 다른지 비교하기

  • ==, != 는 값 자체를 비교하는 것이고, is, is not은 객체(object)를 비교한다.


>>> 1 == 1.0
True

>>> 1 is 1.0
False
>>> 1 is not 1.0
True


  • 1은 정수 객체, 1.0은 실수 객체이므로 isis not의 결과가 위와 같다.


정수 객체와 실수 객체가 서로 다른 것은 어떻게 확인하나요?

  • 정수 객체와 실수 객체가 서로 다른지 확인하려면 id 함수를 사용하면 된다.
  • id는 객체의 고유하나 값(메모리 주소)을 구한다.
  • 이 값은 파이썬을 실행하는 동안에는 계속 유지되며 다시 실행하면 달라진다.


>>> id(1)
4346636640
>>> id(2)
4346636672

>>> id(1.0)
140632664945264
>>> id(2.0)
140631859578672


  • 모든 객체의 고유한 값이 다르므로 서로 다른 객체이다.
  • 그래서 11.0is로 비교하면 False가 나온다.
  • is, is not은 클래스로 객체(인스턴스)를 만든 뒤에 객체가 서로 같은지 비교할 때 주로 사용한다.


값 비교에 is를 쓰지 않기

  • 값을 비교할 때는 is를 사용하면 안 된다.


  • 다음과 같이 변수 a-5를 할당한 뒤 a is -5를 실행하면 True가 나오지만, 다시 -6을 할당한 뒤 a is -6을 실행하면 False가 나온다.


>>> a = -5
>>> a is -5
True

>>> a = -6
>>> a is -6
False


  • 왜냐하면 변수 a가 있는 상태에서 다른 값을 할당하면 메모리 주소가 달라질 수 있기 때문이다.
  • 따라서 다른 객체가 되므로 값이 같더라도 is로 비교하면 False가 나온다.


4. 논리 연산자 사용하기

  • 논리 연산자에는 and, or, not이 있다.


1) 논리 연산자와 비교 연산자를 함께 사용하기

  • 논리 연산자와 비교 연산자를 함께 사용해 보자.


>>> 10 == 10 and 10 != 5
True
>>> 10 > 5 or 10 < 3
True

>>> not 10 > 5
False
>>> not 1 is 1.0
True


  • 비교 연산자로 비교한 결과를 논리 연산자로 다시 판단했다.
  • 이때는 비교 연산자를 먼저 판단하고 논리 연산자를 판단하게 된다.


정수, 실수, 문자열을 불로 만들기

  • 정수, 실수, 문자열을 불로 만들 때는 bool을 사용하면 된다.
  • 이때 정수 1True, 0False이다.
  • 만약 문자열의 내용이 "False"라도 불로 만들면 True이다.
  • 문자열의 내용 자체는 판단하지 않으며 값이 있으면 True이다.


>>> bool(1)
True
>>> bool(0)
False
>>> bool(1.5)
True
>>> bool("False")
True


  • 정수 0, 실수 0.0 이외의 모든 숫자는 True이다.
  • 그리고 빈 문자열 '', ""를 제외한 모든 문자열은 True이다.


단락 평가(Short-Circuit Evaluation)

  • 논리 연산에서 중요한 부분이 단락 평가이다.
  • 단락 평가는 첫 번째 값만으로 결과가 확실할 때 두 번째 값은 확인(평가)하지 않는 방법을 말한다.


  • 다음과 같이 and 연산자는 두 값이 모두 참이어야 참이므로 첫 번째 값이 거짓이면 두 번째 값은 확인하지 않고 바로 거짓으로 결정한다.


print(False and True) # False
print(False and False) # False


  • 또한 다음과 같이 or 연산자는 두 값 중 하나만 참이라도 참이므로 첫 번째 값이 참이면 두 번째 값은 확인하지 않고 바로 참으로 결정한다.


print(True or True) # True
print(True or False) # True


  • 특히 파이썬에서 논리 연산자는 이 단락 평가에 따라 반환하는 값이 결정된다.


>>> True and "Python"
'Python'


  • 문자열 "Python"도 불로 따지면 True라서 True and True가 되어 True가 나올 것 같지만 'Python'이 나왔다.
  • 왜냐하면 파이썬에서 논리 연산자는 마지막으로 단락 평가를 실시한 값을 그대로 반환하기 때문이다.
  • 따라서 논리 연산자는 무조건 불을 반환하지 않는다.


  • 다음과 같이 마지막으로 단락 평가를 실시한 값이 불이면 불을 반환하게 된다.


>>> "Python" and True
True
>>> "Python" and False
False


  • 여기서 문자열 "Python"True로 쳐서 and 연산자가 두 번째 값까지 확인하므로 두 번째 값이 반환된다.


  • 만약 다음과 같이 and 연산자 앞에 FalseFalse로 치는 값이 와서 첫 번째 값만으로 결과가 결정나는 경우에는 첫 번째 값이 반환된다.


>>> False and "Python"
False
>>> 0 and "Python"
0


  • 마찬가지로 or 연산자도 마지막으로 단락 평가를 실시한 값이 반환된다.


  • 다음은 or 연산자에서 첫 번째 값만으로 결과가 결정되므로 첫 번째 값이 반환된다.


>>> True or "Python"
True
>>> "Python" or True
'Python'


  • 만약 두 번째 값까지 판단해야 한다면 두 번째 값이 반환된다.


>>> False or "Python"
'Python'
>>> 0 or False
False

References