2. 불(Boolean)과 비교, 논리 연산자
1. 키워드
- 불(Boolean)
- 비교 연산자와 논리 연산자
- 단락 평가(Short-Circuit Evaluation)
2. 불과 비교, 논리 연산자 알아보기
- 비교, 논리 연산자는 프로그래밍에서 매우 광범위하게 쓰인다.
- 특히
if
,while
구문을 작성할 때 비교, 논리 연산자를 자주 사용한다.
3. 불과 비교 연산자 사용하기
- 불은
True
,False
로 표현하며1
,3.6
,"Python"
처럼 값의 일종이다.
1) 비교 연산자의 판단 결과
- 파이썬에서는 비교 연산자와 논리 연산자의 판단 결과로
True
,False
를 사용한다. - 즉, 비교 결과가 맞으면
True
, 아니면False
이다.
- 부등호
>
로 두 숫자를 비교했으며,3
이1
보다 크므로 결과는 참이고True
가 나온다.
2) 숫자가 같은지 다른지 비교하기
- 두 숫자가 같은지 비교할 때는
==
(equal), 다른지 비교할 때는!=
(not equal)을 사용한다.
10
과10
은 같으므로True
,10
과5
는 다르므로True
가 나온다.
3) 문자열이 같은지 다른지 비교하기
- 숫자뿐만 아니라 문자열도
==
와!=
연산자로 비교할 수 있다. - 문자열을 비교할 때는 대소문자를 구분한다.
4) 부등호 사용하기
- 부등호는 다음과 같이 첫 번째 값을 기준으로 비교한다.
5) 객체가 같은지 다른지 비교하기
==
,!=
는 값 자체를 비교하는 것이고,is
,is not
은 객체(object)를 비교한다.
1
은 정수 객체,1.0
은 실수 객체이므로is
와is not
의 결과가 위와 같다.
정수 객체와 실수 객체가 서로 다른 것은 어떻게 확인하나요?
- 정수 객체와 실수 객체가 서로 다른지 확인하려면
id
함수를 사용하면 된다. id
는 객체의 고유하나 값(메모리 주소)을 구한다.- 이 값은 파이썬을 실행하는 동안에는 계속 유지되며 다시 실행하면 달라진다.
- 모든 객체의 고유한 값이 다르므로 서로 다른 객체이다.
- 그래서
1
과1.0
을is
로 비교하면False
가 나온다. is
,is not
은 클래스로 객체(인스턴스)를 만든 뒤에 객체가 서로 같은지 비교할 때 주로 사용한다.
값 비교에 is
를 쓰지 않기
- 값을 비교할 때는
is
를 사용하면 안 된다.
- 다음과 같이 변수
a
에-5
를 할당한 뒤a is -5
를 실행하면True
가 나오지만, 다시-6
을 할당한 뒤a is -6
을 실행하면False
가 나온다.
- 왜냐하면 변수
a
가 있는 상태에서 다른 값을 할당하면 메모리 주소가 달라질 수 있기 때문이다. - 따라서 다른 객체가 되므로 값이 같더라도
is
로 비교하면False
가 나온다.
4. 논리 연산자 사용하기
- 논리 연산자에는
and
,or
,not
이 있다.
1) 논리 연산자와 비교 연산자를 함께 사용하기
- 논리 연산자와 비교 연산자를 함께 사용해 보자.
- 비교 연산자로 비교한 결과를 논리 연산자로 다시 판단했다.
- 이때는 비교 연산자를 먼저 판단하고 논리 연산자를 판단하게 된다.
정수, 실수, 문자열을 불로 만들기
- 정수, 실수, 문자열을 불로 만들 때는
bool
을 사용하면 된다. - 이때 정수
1
은True
,0
은False
이다. - 만약 문자열의 내용이
"False"
라도 불로 만들면True
이다. - 문자열의 내용 자체는 판단하지 않으며 값이 있으면
True
이다.
- 정수
0
, 실수0.0
이외의 모든 숫자는True
이다. - 그리고 빈 문자열
''
,""
를 제외한 모든 문자열은True
이다.
단락 평가(Short-Circuit Evaluation)
- 논리 연산에서 중요한 부분이 단락 평가이다.
- 단락 평가는 첫 번째 값만으로 결과가 확실할 때 두 번째 값은 확인(평가)하지 않는 방법을 말한다.
- 다음과 같이
and
연산자는 두 값이 모두 참이어야 참이므로 첫 번째 값이 거짓이면 두 번째 값은 확인하지 않고 바로 거짓으로 결정한다.
- 또한 다음과 같이
or
연산자는 두 값 중 하나만 참이라도 참이므로 첫 번째 값이 참이면 두 번째 값은 확인하지 않고 바로 참으로 결정한다.
- 특히 파이썬에서 논리 연산자는 이 단락 평가에 따라 반환하는 값이 결정된다.
- 문자열
"Python"
도 불로 따지면True
라서True and True
가 되어True
가 나올 것 같지만'Python'
이 나왔다. - 왜냐하면 파이썬에서 논리 연산자는 마지막으로 단락 평가를 실시한 값을 그대로 반환하기 때문이다.
- 따라서 논리 연산자는 무조건 불을 반환하지 않는다.
- 다음과 같이 마지막으로 단락 평가를 실시한 값이 불이면 불을 반환하게 된다.
- 여기서 문자열
"Python"
을True
로 쳐서and
연산자가 두 번째 값까지 확인하므로 두 번째 값이 반환된다.
- 만약 다음과 같이
and
연산자 앞에False
나False
로 치는 값이 와서 첫 번째 값만으로 결과가 결정나는 경우에는 첫 번째 값이 반환된다.
- 마찬가지로
or
연산자도 마지막으로 단락 평가를 실시한 값이 반환된다.
- 다음은
or
연산자에서 첫 번째 값만으로 결과가 결정되므로 첫 번째 값이 반환된다.
- 만약 두 번째 값까지 판단해야 한다면 두 번째 값이 반환된다.