티스토리 뷰



참과 거짓의 두가지 값 만을 가지는 타입으로 타입 이름은 bool 입니다. 파이썬에서는 True와 False라는(대소문자 주의) 특별한 값을 제공 합니다.


>>> 7 == 7

True

>>> 7 == 8

False

>>> a = 7==7

>>> type (a)

<type 'bool'>

>>> print a

True



■ 연관 연산자


bool 타입과 연관된 논리 연산자는 True 또는 False만을 리턴하며 그 내역은 아래와 같습니다.


    • ==
      양쪽이 같으면 True. ==와 =는 서로 다른 연산자로 = 하나는 대입 또는 치환을 의미하므로 주의 합니다.

    • <, <=
      우측 보다 작으면, 작거나 같으면 True

    • >, >=
      우측 보다 크면, 크거나 같으면 True

    • a<b<c
      복합 조건으로 다른 언어에서는 and로 묶어서 처리해야 했으나, 파이썬에서 간편하게 기술하면서도 프로그램을 읽기 쉽도록 했습니다.

      >>> 1 < 3 <= 7

      True

      >>> 3 < 3 <= 7

      False

      >>> 1 < 3 <= 7 < 9

      True

    • !=, <>
      양쪽이 다르면 True. 다른 언어에서는 둘중에 한가지만 사용하지만 파이썬에서는 두가지를 모두 사용할 수 있습니다.

      >>> 1 != 3

      True

      >>> 1 != 1

      False

      >>> 1 <> 1

      False

    • and
      양쪽이 모두 True 이면 True.

    • or
      둘중에 하나라도 True 이면 True

    • not
      우측 bool 값을 반대로. True면 False. False면 True

    • a is b
      a와 b가 같은 값이면 True를 리턴 합니다. 스칼라 타입은 값이 같다면 True이지만, 리스트의 경우에는 값이 같아 보여도 동일한 메모리를 참조하는 경우만 True 입니다.

      >>> a = 10

      >>> a is 10

      True

      >>> a = 'aaa'

      >>> a is 'aaa'

      True

      >>> a = (1,2,3)

      >>> a is (1,2,3)

      False

      >>> b = a

      >>> b

      (1, 2, 3)

      >>> b is a

      True




■ 논리 연산자 사용팁


파이썬에서 논리 연산자를 사용할 때는 연산 대상이 bool 타입이어야 하지만 C언어에서 처럼 0이 아닌 값은 모두 True로 처리 합니다. 아래는 그 사용 예인데 스트링의 경우 널이("") 아닌 경우는 모두 True임을 확인할 수 있습니다. 파이썬에서 False 인경우를 나열하면 False, 0, None, '', "", (), [], {} 등이 있습니다. 이들은 모두 False로 처리 됩니다.


>>> if 0 : print "true"

else : print "false"


false

>>> if "0" : print "true"

else : print "false"


true

>>> if 1 : print "true"

else : print "false"


true

>>> if "" : print "true"

else : print "false"


false




단, and와 or 연산자가 항상 True와 False 값만 리턴하지는 않습니다. 좌측에서 우측으로 비교해 가는데 최종 비교 대상 값을 그대로 리턴 합니다. 예를 들어 a and b에서 a가 False로 판단되면 a값 그대로를 리턴 합니다. a or b에서 a가 True라면 b를 볼필요가 없으므로 a 값을 그대로 리턴한다. 


이것을 문장에 응용한 예가 있는데 위의 예를 보면 a가 0인 상태로 나눗셈을 하면 "ZeroDivisionError"가 발생 합니다. 그런데 and 연산자 앞에 a가 0이 아닌지를 확인하는 코드를 삽입하면 a가 0일 때는 우측은 비교할 필요가 없으므로 나눗셈을 하지 않고 False를 리턴하는 것으로 더이상 진행하지 않습니다. a가 0이 아니라면 and 우측의 표현식인 나눗셈 결과를 그대로 리턴 하는 것입니다.





댓글
댓글쓰기 폼