본문 바로가기
Python/파이썬 기초

논리형(boolean), 논리 연산자, 비교 연산자 - 파이썬 기초(2)

by 콩돌 2018. 11. 8.
반응형


참고 자료

https://docs.python.org/3/library/stdtypes.html


파이썬 버전 3.7 기준


파이썬 자료형 및 연산자(1)


불린(Boolean)형 


  ○ 0(False)과 1(True)로만 이루어진 단순한 자료형이다.

  ○ 주로 비교연산자에서 출력되는 자료형이 불린형이며, 보통 비교연산자 및 논리연산자를 사용하여 제어문에서 흐름을 제어할 때 많이 사용된다.

  ○ 정확히는 정수형의 한 형태지만(0과 1은 정수이다.) 제어문에 많이 사용되어 따로 나눈다.

  ○ 논리형 자료형이라고도 표현한다..


관련 내장상수


  ○ False: 거짓 값을 의미한다.

  ○ True: 참값을 의미한다.

    ※ false와 true는 인식을 못함 꼭 맨 앞 알파벳은 대문자 사용하도록 한다.


논리 연산자 


  ○ 논리연산자는 논리 연산을 나타내는 기호이다.


연산자

기호

 사용 예

의미 

and

&

x and y

x & y

 x와 y가 둘 다 True이면 True를 출력하고 둘 중 하나라도 False이면 False를 출력한다.

or

|

x or y

x | y

 x와 y가 둘 다 False이면 False을 출력하고 둘 중 하나라도 True이면 True을 출력한다.

not

 

not x

 x가 True면, False를, x가 False이면 True를 출력한다.(반대로 출력)

※ 연산자(예: and, or) 대신 기호를 써도 동일한 결과가 출력된다.

※ 이외 NOR, NAND, XOR 등 다양한 논리연산자가 있지만 순수 파이썬에서는 따로 이러한 연산자들을 제공하지 않는다.


논리연산자의 출력 예:


and

입력 x

입력 y

출력 

0

0

0

1

0

0

0

1

0

1

1

1


 or

입력 x

입력 y

출력 

0

0

0

1

0

1

0

1

1

1

1

1


not

 입력 x

출력 

 0

1

 1

0


※ 위의 표에서 1은 True를 0은 False를 의미한다..


출력예)

In[7]: True and True

Out[7]: True

In[8]: False and True

Out[8]: False

In[9]: False or True

Out[9]: True

In[10]: not True

Out[10]: False


※ and, or 연산자의 실제 메커니즘은 어떨까?

  - or, and연산자의 개념은 위에 설명한대로이나 파이썬에서 구현하는 메커니즘은 약간 다르다.

  - or 연산자의 경우 입력 x y중 큰 값을 취하며, and 연산자의 경우 작은 값을 취한다.

  - 예를들어 "24 or 1"을 연산할 경우 24를 출력하며 "24 and 1"을 연산을 할 경우 1을 출력한다.

  - 두 값중 큰 값 혹은 작은 값을 출력하기 위해 논리연산자를 쓰는건 코드 가독성 측면에서 매우 좋지 않으므로 min max 함수를 이용을 권장하고 논리연산자는 논리연산에만 사용하도록 한다.



비교 연산자


  ○ 비교연산자는 말 그대로 크기나 객체를 비교하는 연산자이다.

  ○ 비교연산자의 출력은 불린형으로 나오며 비교연산자에서 값이 참이면 True를 거짓이면 False를 출력한다.

  ○ 비교연산자를 사용하기 위해선 객체의 타입이 같아야 한다. (숫자형은 제외된다.)


 연산자

의미 

<

작다.

<=

작거나 같다.

>

크다.

>=

크거나 같다.

==

같다.

!=

같지 않다.

is

객체 아이덴티티가 같다.

is not

객체 아이덴티티가 다르다.


※ is와 ==의 차이는 무엇인가? (숫자형을 예로 든다.)

  - ==는 크기 혹은 값(value)가 같음을 검사한다.

  - is는 객체가 같음을 검사한다.

  - 예를들면 1.0 == 1는 True지만, 1.0 is 1은 False를 출력한다.

  - (정확히는 파이썬에서는 변수에 주소가 있는 형태가 아니라 각 숫자에 주소가 있고 그 주소가 일치할 경우 객체가 같다고 인식하는거 같은데, 솔직히 정확히는 모르겠다.)


출력예)

In[3]: 1 == 1.0

Out[3]: True

In[4]: 1 is 1.0

Out[4]: False

In[5]: 1 is not 1.0

Out[5]: True


반응형

댓글