파이썬 비교, 논리 연산자는 특히 조건식이 들어가는 문법(if, while)에서 자주 사용됩니다.
- 1. 비교 연산자
숫자와 파이썬이 같은지 또는 다른지 비교할 수 있는데 같은지 판단할때는 ==, 다른지 판단할때는 != 을 사용합니다.
첫번째로 숫자는 1과 1은 같으므로(1 == 1) 참(True), 1과 2는 다르므로(1 == 2) 거짓(False) 가 출력 되었고, 만약 1 == 2를 참으로 만들고 싶으면 1 != 2를 사용하면 됩니다.
문자열은 Hello와 Hello는 같으므로 첫번째(==)는 참, 두번째(!=)는 거짓이 출력 되었습니다. 다만 문자열은 주의하여할 점이 한가지가 있는데, 대소문자가 다르면 다른 문자열로 판단하게 되기 때문에 주의 하여야 합니다.
== 과 != 말고도 다른 부등호들이 있습니다.
이상과 이하는 값1 = 값2 도 포함된다는것만 주의하시면 됩니다.
- 2. 객체 비교
객체를 비교할때는 is와 is not을 사용 하는데, ==와 !=는 값만을 비교하고 is와 is not은 객체를 비교하는 차이가 있습니다.
위의 이미지 좌측 보면 1 == 1.0은 값이 같으므로 첫번째(==)는 참, 두번째(!=)는 거짓이 나옵니다.
반면 우측의 1 is 1.0 은 거짓, 1 is not 1.0 은 참이 나옵니다. 즉, 1은 정수 객체이고 1.0은 실수 객체이므로 두 객체가 같지 않아 is는 거짓, is not은 참이 나온겁니다. 이 외에도 값을 비교할때 사용하게 되면 하나의 변수에 여러번 값을 선언할 경우 메모리 주소 변경에 의해서도 참/거짓이 갈리게 되기 때문에 is와 is not은 값을 비교할때 사용하지 마시고 같은 객체인지를 판단할때 사용하는것이 좋습니다. (파이썬을 이제 막 입문하신 분들은 객체의 개념은 아직 잘 모르셔도 되고, 클래스를 배우실때 익히셔도 됩니다)
만약 햇갈리신다면 id 함수를 사용하여 확인 하시면 됩니다.
저기서 나오는 값은 각 객체의 메모리 주소라고 생각하시면 됩니다.
- 3. 논리 연산자
논리연산자에는 and, or, not이 있으며 and는 두 값이 모두 참일때 참, or는 두 값중 한가지라도 참일경우 참입니다.
위 이미지에서 좌측은 and 연산자, 우측은 or 연산자 입니다.
and 연산자는 두 값이 모두 참(True) 일때 참이므로 True and True만이 참이고 나머지는 모두 거짓 입니다. (False and False는 얼핏 보면 참으로 나와야할 것 같지만, False 자체가 거짓을 나타내기 때문에 두 값이 모두 거짓이므로 False가 맞습니다)
or 연산자는 두 값중 하나만이 참이라도 참 입니다. 때문에 첫번째부터 세번째까지 모두 참이고 (두 값이 모두 참이여도 참, 하나만 참이여도 참, 두 값이 모두 거짓일때만 거짓) 마지막 False or False (거짓 or 거짓)은 참이 어느 하나도 없기 때문에 False 가 출력됩니다.
not 연산자는 굉장히 단순하면서도 햇갈리는 연산자인데, 논리값을 뒤집어 버립니다. 즉 참이면 거짓으로, 거짓이면 참으로 뒤집어 버리기 때문에 잘 봐야 합니다.
※ 식 하나에 and, or, not이 모두 있으면 not, and, or 순으로 됩니다.
논리 연산자와 비교 연산자를 함께 사용할 수 있고, 아래 이미지를 참고해 주세요.
-
4. 비교 연산자와 논리 연산자의 종류
비교 연산자 | 문법 | 설명 |
== | a == b | 같음 |
!= | a != b | 같지 않음 |
> | a > b | 큼 (초과) |
< | a < b | 작음 (미만) |
>= | a >= b | 크거나 같음 (이상) |
<= | a <= b | 작거나 같음 (이하) |
is | a is b | 객체가 같음 |
is not | a is not b | 객체가 같지 않음 |
논리 연산자 | 문법 | 설명 |
and | a and b | AND(논리곱), 양쪽 모두 참일 때 참 |
or | a or b | OR((논리합), 양쪽 중 한쪽만 참이라도 참 |
not | not x | NOT(논리부정), 참과 거짓을 뒤집음 |
짧) 단락 평가란?
논리 연산에서는 단락 평가라는 개념이 있습니다.
첫 번째 값만으로 결과가 확실해지면 그 다음 값은 확인하지 않는 방법인데, 아래 이미지를 참고 해주세요.
'Programming > Python' 카테고리의 다른 글
[Python 3.7] 시퀀스 자료형이란? (0) | 2020.01.11 |
---|---|
[Python 3.7] 파이썬 리스트와 튜플 개념 (3) | 2020.01.11 |
[Python 3.7] 파이썬 변수란? (할당 및 활용 map, input) (0) | 2020.01.11 |
[Python 3.7] 파이썬 숫자 계산과 사칙연산 (2) | 2020.01.10 |
[Python 3.7] 딕셔너리 표현식 특정 키-값 삭제하기 (RuntimeError: dictionary changed size during iteration) (2) | 2019.12.24 |