python

[파이썬 / python] 연산자 - 논리 연산자 (and, or ,not)

카방찐 2024. 9. 17. 11:17

연산자

연산자는 프로그래밍에서 변수나 값에 대해 특정 작업을 수행하는 기호입니다.

 

연산자의 종류에는 산술 연산자, 관계 연산자, 논리 연산자, 비트 연산자, 대입 연산자, 멤버쉽 연산자, 식별 연산자가 있습니다. 

 

각 프로그래밍 언어에서 지원하는 연산자의 종류와 문법은 조금씩 다를 수 있습니다. 필요한 경우 특정 언어에 맞는 연산자를 확인하는 것이 좋습니다.

 

이번 포스팅에서는 논리 연산자에 대해 알아봅시다.

 

논리연산자

논리 연산자는 논리적 조건을 평가하는 데 사용됩니다. 논리 연산자는 조건을 결합하거나 반전시킬 때 유용합니다. 

1. 논리곱 (AND)

기능: 두 조건이 모두 참일 때 결과가 참이 됩니다.

A B A and B
False False False
False True False
True False False
True True True

 

문법: a and b

 

예제:

a = True
b = False
result = a and b # result는 False가 됩니다.

 

2. 논리합 (OR)

기능: 두 조건 중 하나 이상이 참일 때 결과가 참이 됩니다.

A B A or B
False False False
False True True
True False True
True True True

 

문법: a or b

 

예제:

a = True
b = False
result = a or b # result는 True가 됩니다.

 

3. 논리부정 (NOT)

기능: 조건의 진리 값을 반전시킵니다. 즉, 참은 거짓으로, 거짓은 참으로 변환됩니다.

A not A
False True
True False

 

문법: not a

 

예제:

a = True
result = not a # result는 False가 됩니다.

여기서 a는 True입니다. not a는 a가 참이므로 결과는 False입니다.

 


논리 연산자는 아니지만 추가적으로  논리 연산에는  배타적 논리합, 동치가 있습니다. 

4. 배타적 논리합 (XOR) 

기능: 두 조건이 서로 다를 때 결과가 참이 됩니다. 두 조건이 동일하면 결과는 거짓이 됩니다.

A B A xor B
False False False
False True True
True False True
True True False

 

문법: a != b (Python에서는 직접적인 xor 연산자가 없으므로 !=로 구현 가능,  !=는 관계 연산자)

 

예제:

a = True
b = False
result = a != b # result는 True가 됩니다.

여기서 a와 b는 서로 다릅니다. a != b는 두 값이 서로 다르기 때문에 결과는 True입니다.

 

5.동치(EQV, XNOR)

기능: 두 조건이 동일할 때 결과가 참이 됩니다. 두 조건이 서로 다르면 결과는 거짓이 됩니다.

A B A xor B
False False True
False True False
True False False
True True True

 

문법: a == b (==는 관계 연산자)

 

예제:

a = True
b = False
result = a == b # result는 False가 됩니다.

 

6. 기타

앞서 설명했던 5가지 논리 연산 이외에도 부정 논리곱(NOR), 부정 논리합(NAND)이  존재합니다.

python에서는 이를 직접 표현하는 논리연산자는 존재하지 않습니다.

하지만 not (A or B) 또는 not (A and B)와 같이 복합적인 논리 연산자의 사용으로 표현이 가능합니다.  

 

논리 연산자의 복합 사용

여러 논리 연산자를 결합하여 복합적인 조건을 평가할 수 있습니다.

a = 5
b = 10
c = 9
# a가 5보다 크고 b가 15보다 작거나 c가 10보다 크다면 참 
result = (a < 6 and b < 15) or c > 10 # result는 True가 됩니다.

여기서 a < 6과 b < 15는 모두 참이고, c > 10는 거짓이지만 OR논리 연산자로 인해 전체 조건은 True가 됩니다.

 

논리 연산자의 우선순위

논리 연산자는 프로그래밍에서 여러 조건을 평가할 때 사용됩니다.

Python에서 논리 연산자의 우선순위는 연산이 수행되는 순서를 결정합니다.

논리 연산자의 우선순위를 이해하면 복잡한 조건문을 작성할 때 예상치 못한 결과를 방지할 수 있습니다.

우선순위 표

연산자 기호 우선순위
논리부정 not 1
논리곱 and 2
논리합 or 3

 

논리 연산자 우선순위 예제

다양한 논리 연산자를 포함한 예제에서 우선순위를 명확히 이해해봅시다.

a = False
b = True
c = True

# 우선순위를 고려하지 않은 예제
result = not a or b and c
# 'not a' 가 먼저 계산되며, 결과는 'not false'로 'True'
# `b and c`가 먼저 계산되며, 결과는 `True and True`로 `True`
# 그 다음 `True or True`를 계산하여 결과는 `True`

# 우선순위를 명확히 하기 위해 괄호를 사용한 예제
result_with_parentheses = not ((a or b) and c)
# 괄호 안의 `a or b` 가 먼저 계산되며, 결과는 'False of True'로 `True`
# 그 다음 괄호 안의 `True and c`가 계산되며, 결과는 'True and True'로 `True`
# 그 다음 'not True'가 계산하여 결과는 'False'

 

 

논리 연산자의 단락평가 (Short-circuit Evaluation) 

Python에서 단락 평가 (Short-circuit Evaluation) 는 논리 연산자들이 조건식을 평가할 때, 필요 없는 연산을 생략하는 방식입니다. 이 기법은 효율성을 높이고, 불필요한 계산을 방지하며, 때로는 코드의 안정성을 보장하는 데 도움이 됩니다.

단락 평가의 동작 원리

단락 평가는 조건문에서 다음과 같은 방식으로 작동합니다:

 

논리곱 (AND):

  • 동작: a and b에서 a가 False인 경우, b의 값은 평가되지 않습니다. 왜냐하면 a가 이미 False이므로 전체 표현식의 결과는 무조건 False이기 때문입니다.
  • 예제
def is_valid(value):
	print("Checking validity...") 
    return value > 0

result = False and is_valid(10) # is_valid(10)은 호출되지 않습니다.
#result는 False입니다.

 

논리합 (OR):

  • 동작: a or b에서 a가 True인 경우, b의 값은 평가되지 않습니다. 왜냐하면 a가 이미 True이므로 전체 표현식의 결과는 무조건 True이기 때문입니다.
  • 예제:
def is_valid(value):
	print("Checking validity...")
    return value > 0 

result = True or is_valid(10) # is_valid(10)은 호출되지 않습니다.
#result는 True입니다.

 

단락 평가의 예제

def safe_divide(x, y):
    if y == 0:
        return "Cannot divide by zero!"
    return x / y

# 단락 평가 예제
result = (y != 0) and safe_divide(10, y)

print(result)

 

y != 0이 False일 경우,  safe_divide(10, y) 함수는 호출되지 않습니다. 이 경우, safe_divide 함수가 호출되지 않으므로, 나누기 연산에서 발생할 수 있는 오류를 방지할 수 있습니다.

 

단락 평가의 장점

  1. 효율성: 불필요한 연산을 줄여 프로그램의 성능을 개선합니다.
  2. 안정성: 조건문에서 발생할 수 있는 오류를 방지할 수 있습니다.
  3. 코드 간결성: 조건문이 명확하고 간결해집니다.

단락 평가는 특히 조건이 복잡하거나 함수 호출이 비싼 경우에 유용하며, Python의 논리 연산자 and와 or에서 자동으로 적용됩니다.


 

논리 연산자들은 복잡한 조건문을 간단히 작성하는 데 매우 유용합니다. 여러 조건을 결합하거나 특정 조건의 반대 상황을 처리할 때 사용할 수 있습니다.

 

 

비트 연산자에 대해 궁금하면 다음 포스팅을 읽어주세요!

 

[파이썬 / python] 연산자 - 비트 연산자 (&, |, ^, ~, <<, >>,)

연산자연산자는 프로그래밍에서 변수나 값에 대해 특정 작업을 수행하는 기호입니다. 연산자의 종류에는 산술 연산자, 관계 연산자, 논리 연산자, 비트 연산자, 대입 연산자, 조건 연산

record-to-knowledge.tistory.com