파이썬 | 불과 비교 , 논리 연산

CHOI·2021년 10월 19일
0

Python

목록 보기
4/33
post-thumbnail

1. 불 (Boolean)

불(Boolean) 을 나타내는 참(True), 거짓(False). 파이썬에서는 논리 연산자와 비교 연산자의 판단 결과로 True, False 를 사용한다.

Ture , False 또한 1, 3, 7, 'test' 처럼 일종의 '값'이다.

문자열 비교

>>> 'Python' == 'Python'
True
>>> 'Python' == 'python'
False
>>> 'Python' != 'python'
True
  • 문자열은 대소문자를 구분한다.

객체가 같은지 비교 ( is, is not )

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

이번에는 is, is not 에 대해 살펴보자. 이미 ==!= 가 있는데 왜 is, is not 를 만들었을까?

==!= 자체를 비교하지만 is, is not객체(object) 를 비교한다. 이에 대한 얘기는 나중에..

1 과 1.0은 정수와 실수라는 차이점이 있지만 값 자체는 같다 따라서 ==Ture 이지만 isFalse 이다. 왜냐하면 1은 정수 객체이고 1.0은 실수 객체이기 때문이다.

정수 객체와 실수 객체를 어떻게 구분할까?

실제로 정수 객체와 실수 객체가 서로 다른지 확인하기 위해서는 id 라는 함수를 사용하면 된다. id 는 객체의 고유한 값(메모리 주소)를 구한다. (이 값은 파이썬이 실행되는 동안은 계속 유지되지만 다시 실행하면 값이 바뀔 수 있다.)

>>> id(1)
1714767504
>>> id(1.0)
55320032

값 비교에 is 사용하지 말기

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

>>> a = -5
>>> a is -5
True
>>> a = -6
>>> a is -6
False

위의 경우를 보면 처음에 변수 a-5 를 할당한 다음에 is 를 통해 확인해보면 True 가 나오지만 다시 -6 을 할당한 뒤에 is 를 통해 확인해보면 False 가 나온다.

그 이유는 변수 a 가 이미 있는 상태에서 다른 값을 할당하면 메모리 주소값이 바뀔 수 있기 때문이다. 따라서 다른 객체가 되므로 값이 같더라고 is 를 통한 비교는 하지 않는 것이 좋다.

2. 논리 연산자

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

-and

>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False and False
False
>>>

-or

>>> True or True
True
>>> True or False
True
>>> False or True
True
>>> False or False
False

-not

>>> not True
False
>>> not False
True

논리식 우선순위

and , or , not 가 식 하나에 들어가 있으면 not , and , or 순서대로 해석한다.

>>> not True and False or not False
True

위 예제를 보면 먼저 not True 와 뒤에 있는 not False 를 먼저 해석하여 False and False or Ture 가 되고 그 다음에 and 를 해석하여 False or Ture 만 남게 된다. 마지막으로 or 를 해석하여 최종적으로 Ture 가 되는 것이다.

3. 논리 연산자와 비교 연산자를 함께 사용

>>> 10 == 10 and 10 != 5    # True and True
True
>>> 10 > 5 or 10 < 3        # True or False
True
>>> not 10 > 5              # not True
False
>>> not 1 is 1.0            # not False
True

논리 연산자와 비교 연산자가 같이 사용되는 형태를 많이 보았을 것이다. 이럴 때에는 비교 연산자를 먼저 판단하고 난 뒤에 논리 연산자를 판단하면 된다. (각 연산자의 판단 순서는 다음 을 참고)

bool 함수

정수, 실수, 문자열을 불로 만들 때에는 bool 을 사용하면 된다. 이때 정수는 0, 실수는 0.0 이외의 모든 숫자는 Ture 이다. 문자열은 ''"" 를 와 같은 빈문자열을 제외한 모든 문자열은 Ture 가 된다.

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

단락 평가(short-circuit evalution)

논리 연산에서 중요한 부분이 단락 평가이다. 단락 평가는 첫 번째 값으로만으로도 결과가 확실해지면 두 번째 값은 확인하지 않는 것을 말한다. 예를 들어서 and 의 경우 첫 번째 값이 False 이면 뒤에 어떤 값이 오든지 False 이기 때문에 바로 거짓으로 결정하는 것이다. 비슷하게 or 의 경우 첫 번째 값이 True 이면 뒤에 어떤 값이 오든지 Ture 이기 때문에 참으로 결정하는 것이다.

특히 파이썬에서 논리 연산자는 이 단락 평가에 따라 반환 값이 정해진다. 앞서 우리는 논리 연산을 Ture and False 과 같이 했을 때는 False 가 나왔다. 그런데 만약에 True and 'Python' 를 하면 어떻게 나올까?

>>> True and 'Python'
'Python'

True 가 나올줄 알았지만 특이하게 'Python' 이 나왔다. 왜냐하면 파이썬에서는 논리 연산자는 마지막 단락 평가를 실시했던 값을 그대로 반환하기 때문이다. 따라서 논리 연산자는 반드시 불을 리턴하지 않는다.

그렇다면 아래의 예제의 반환값을 이해하는데 큰 무리가 없을 것이다.

>>> True or 'Python'
True
>>> 'Python' or True
'Python'
>>> False or 'Python'
'Python'
>>> 0 or False
False
profile
벨로그보단 티스토리를 사용합니다! https://flight-developer-stroy.tistory.com/

0개의 댓글