1.4 연산자(operator)
데이터들 사이에 연산이 필요한 경우 연산의 종류를 구분하기 위한 약속이 존재합니다. 이 약속된 규칙 또는 표현을 연산자(operator)라고 합니다. 연산자는 특정한 명령(들)을 수행하기 위한 여러 코드들을 그룹화하는 함수입니다.
파이썬은 산술, True 또는 False의 결과를 반환하는 논리 연산 등을 수행하기 위한 다양한 연산자들을 제공하고 있으며 이 연산에 참여하는 값들을 피연산자(operand)라고 합니다. 예를 들어 다음 코드는 두 수치형 리터럴의 덧셈을 실행한 것입니다.
5+8
13
두 정수의 덧셈연산은 연산자 '+
'에 의해 실행되며 이 연산에 관계된 5와 8이 피연산자가 됩니다. 그 연산의 결과는 13입니다.
산술 연산자(Arithmatic operators)
표 1은 두 객체에 대한 산술 연산을 실행하기 위한 연산자 입니다.
연산자 | 의미 |
---|---|
x + y | 단일 또는 두개의 피연사자의 덧셈 |
x - y | 단일 또는 두개의 피연사자의 뺄셈 |
x * y | 두개의 피연사자의 곱셈 |
x / y | 두개의 피연사자의 나눗셈으로 결과는 실수형 |
x % y | 두개의 피연사자의 나눗셈의 나머지를 반환 |
x // y | 두개의 피연사자의 나눗셈의 몫을 반환 |
x**y | 피연산자의 거듭제곱 (power) |
x=5 y=2 print(x+y) # 덧셈 print(x-y) # 뺄셈 print(x*y) # 곱셈 print(x/y) # 나눗셈
7 3 10 2.5
print(x//y) # 몫 print(x%y) # 나머지
2 1
print(x**y) # 거듭제곱
25
다음 코드의 경우 두 정수의 나눗셈은 실수를 반환합니다.
121/5
24.2
위 코드에서 정수 121은 5에 의해 나누어진 몫과 나머지를 사용하여 다음과 같이 나타낼 수 있습니다.
121 | = 24.2 ⇒ 5 × 24 + 1 |
5 |
즉, 이 나눗셈 연산은 몫 24와 나머지 1을 나타냅니다. 파이썬에서는 '//
' 연산자를 사용하여 몫만을 나타내고 나머지는 '%
' 연산자를 사용하여 반환할 수 있습니다.
121 // 5
24
121 % 5
1
내장함수인 divmod(분모, 분자)
를 사용하여 몫과 나머지를 확인할 수 있습니다.
divmod(121, 5)
(24, 1)
비교연산자(comparison operatores)
표 2와 같이 두 개 이상의 값들을 비교하여 불리언(boolean) 값 즉, True
또는 False
를 반환합니다.
연산자 | 의미 |
---|---|
x > y | x가 y 보다 크면 True |
x< y | x가 y 보다 작으면 True |
x == y | x와 y가 같으면 True |
x != y | x, y가 같지 않으면 True |
x >= y | x가 y보다 크거나 같은면 True |
x <= y | x가 y보다 작거나 같은면 True |
x=5 y=2 print(x>y) print(x<y)
True False
print(x==y) print(x!=y)
False True
print(x>=y) print(x<=y)
True False
내장함수 bool()
을 사용하여 정수, 실수, 문자열을 True/False 즉, 불리언 값으로 나타낼 수 있습니다. 0, False, None 값만이 False를 생성합니다.
print(bool(None)) print(bool(0)) print(bool(False))
False False False
다음 코드의 "False"는 불리언 값이 아닌 문자열입니다.
print(bool(1)) print(bool(1.23)) print(bool("False"))
True True True
논리연산자(logical operators)
비교 연산자는 객체들의 비교에 의한 결과로 불리언 값을 반환하는 것이라면 논리 연산자는 불리언 값들 사이의 연산을 위한 것입니다.
이전 절에서 bool()
함수에 의해 0은 False, 1은 True를 반환합니다. 이것은 불리언 값을 수치형으로 변환하여 연산하는 것이 가능함을 의미합니다.
print(int(False)) print(float(True))
0 1.0
1.0==True
True
False==0.0
True
파이썬에서 다음을 제외한 모든 객체는 True입니다. 즉, 다음의 경우 False입니다.
- None
- False
- 0
- list, tuple, string등의 요소가 없는 상태 즉, [],(), ""
- 매핑 유형의 자료형인 사전(dictionary), 집합(set) 등의 요소가 없는 상태 즉, {}
bool(None)
False
bool(0), bool(200)
(False, True)
bool([])
False
bool({})
False
불리언 값들의 결합에 의한 판단을 위한 것으로 and
, or
, 그리고 not
연산자를 사용합니다. 이 연산자들을 사용하여 두 개이상의 비교연산의 결과들에 의한 결정이 가능해 집니다.
and
연산자
and
연산자는 논리연산자로서 일반적으로 불리언 값 값에 대해 작동하며 True 또는 False를 반환합니다. 표 3과 같이 두 피연산자(operand) x, y의 bool(True 또는 False)에 따라 다음을 반환합니다.
x | y | x and y |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
x, y=0, 1 x and y
0
bool(x and y)
False
표 3에서와 같이 and 연산자는 두 가지 특징이 있습니다.
- x가 True로 평가될 경우만 y를 평가합니다.
- x가 True일 경우 결과는 y의 평가에 의해 좌우 됩니다.
그러므로 위 예에서 x가 False이면 y는 평가되지 않습니다. 이러한 과정을 알아보기 위해 다음 코드를 실행해 봅니다.
다음 코드에서 객체 b의 값은 0입니다. 어떤 수든지 0으로는 나누어 질수 없습니다. 그러므로 실행 중에 에러가 발생합니다. 이러한 에러를 실행에러(run time error)라고 하며 다음 코드의 결과인 zeroDivisionError
는 그 중의 하나입니다. 파이썬은 코드 작성과 실행중에 발생할 에러들에 대해 목록화하여 나타냅니다.
a, b=10, 0 bool(a/b)
ZeroDivisionError: division by zero
다음 코드와 같이 객체 a, b에 대해 and 연산자를 실행하면 예외는 발생하지 않습니다. 즉, 연산자 이전의 객체가 False 이므로 이후의 객체에 대한 평가는 이루어지지 않습니다.
b and a/b
0
b를 5로 교체하면 and 연산자 이전의 평가는 True가 되고 그 연산의 결과는 연산자 이후 값이 됩니다. 즉, and 연산자의 두번째 특징을 나타냅니다.
b=5 b and a/b
2.0
or 연산자
or 연산자는 표 4와 같이 실행됩니다.
x | y | x or y |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
x or y 연산은 다음의 특징을 가집니다.
- x가 True일 경우 x를 반환 즉, y는 평가하지 않습니다.
- x가 False일 경우 y 만을 평가하고 그 결과를 반환합니다.
a, b=10, 5 b or a/b
5
b=0 b or a/b
ZeroDivisionError: division by zero
not 연산자
연산자 not은 객체의 값을 반전시킵니다(표 5).
연산자 | 의미 |
---|---|
not x | True → False False → True |
x=True y=False x and y
False
x or y
True
not x
False
댓글
댓글 쓰기