03. 상수와 연산자
21 May 2020상수
“계란 한 판은 30개, 연필 한 타(다스)는 12개”처럼 같은 값을 나타내는 단어가 있다. 값이 변하지 않고 항상 똑같은 값을 가지는 것을 상수라고 한다. 변수와는 반대의 의미이다.
내장 상수
Python에서 기본적으로 제공하는 내장 상수다.
True 또는 False
Python에서는 True와 False를 상수로 정의했다. True와 False는 Bool형의 값이다. 조건식의 결과가 참인지 거짓인지 확인하는 값으로 사용된다.
None
프로그래밍에서 없다는 표현을 어떻게 표현을 할까? “0”이라고 대답하였다면 틀렸다.
위의 그림을 보면 “0”과 “None”의 차이를 알게 될 것이다. Python에서 변수를 원래의 빈 상태로만들거나 “없다”라는 표현할 때, None을 사용한다. 기본적인 논리값은 거짓(Fasle)이다.
Ellipsis
Ellipsis라는 단어를 해석하면 줄임표다. 표현하는 형식도 줄임표와 동일하게 “…“으로 사용한다. 주로 다차원 배열이나 슬라이스를 사용할 때 사용한다. 아직까지 실제로 사용하는 코드를 본적이 없다.
사용자 정의 상수
Python에는 사용자 정의 상수를 정의 할 수 없다. 하지만 변수를 상수처럼 사용하고자 할 때는 대문자와 언더바(_)를 사용해서 변수를 선언하고 상수처럼 사용하자.
>>> ATTACT_ITEM = 20
>>> LEFT_MOVE = 10
연산자
간단하게 사칙연산을 생각해보자. 사칙연산은 +, -, ×, ÷를 사용해서 나타낸다. 이처럼 특정한 작업을 하기 위해 사용하는 기호를 연산자라고 한다.
산술 연산자
산술 연산자는 기본적으로 사칙연산을 생각하면 된다. Python에서 사용하는 연산자는 기본적으로 수학에서 사용하는 연산자와 조금 차이가 있다.
Code
# Python_Study_03_01.py
a = 5
b = 2
print(a + b) # 더하기
print(a - b) # 빼기
print(a * b) # 곱하기
print(a / b) # 나누기
print(a // b) # 몫
print(a % b) # 나머지
print(a ** b) # 제곱
Result
7
3
10
2.5
2
1
25
복합 대입 연산자
대입 연산자는 오른쪽의 값을 왼쪽의 변수에 넣는 연산자이다. 기본적으로 변수를 선언하거나 변수의 값을 변경할 때 사용한다. 프로그래밍을 하다 보면 기존에 있던 변수에 다른 값을 더하는 일이 매우 많다. 복합 대입 연산자는 산술 연산자와 대입 연산자를 합쳐놓은 것이다. 프로그래밍을 간결하게 할 수 있다.
Code
# Python_Study_03_02.py
a = 7
b = 3
c = 10
a += b # 더하기 a = a + b
print(a)
a -= b # 빼기 a = a - b
print(a)
a *= b # 곱하기 a = a * b
print(a)
a /= b # 나누기 a = a / b
print(a)
a //= b # 몫 a = a // b
print(a)
c %= b # 나머지 c = c % b
print(c)
a **= b # 제곱 a = a ** b
print(a)
Result
10
7
21
7.0
2.0
1
8.0
주의할 점은 등호(“=”)와 연산자를 붙여서 사용해야 한다. 붙여서 사용하면 Python을 실행할 때 IDLE에서 인식하지 못한다.
비교 연산자
서로 다른 값을 비교하는 연산을 하고, 결괏값으로 Bool 형을 반환하는 연산자이다. 초등학교 때 배운 수의 범위를 생각하면 쉽다.
Code
# Python_Study_03_03.py
a = 10
b = 20
c = 30
d = 10
print(a > b) # b보다 a가 크다
print(a < b) # b보다 a가 크다
print(b >= c) # c보다 b가 크거나 같다
print(b <= c) # b보다 c가 크거나 같다
print(a >= d) # d보다 a가 크거나 같다
print(a == d) # a와 d가 같다
print(a != b) # a와 b가 같지 않다
print(10 < a <= 30) # 기본적으로 사용하지 않는다.
Result
False
True
False
True
True
True
True
False
일반적인 키보드 자판에는 “≠”가 없기 때문에 “!=”으로 “같지 않다”를 나타낸다. “같다”라는 표현을 등호(“=”) 하나만 사용한다면 대입 연산자와 구분을 할 수 없다. 그렇기 때문에 등호(“=”) 2개를 사용하여 “같다”라는 연산을 한다.
논리 연산자
조건식 결괏값을 논리 연산을 통해 연산하는 연산자이다. 기본적으로 조건식은 비교연산자를 사용한다. 우선 간단하게 논리 연산을 알아보자.
and
조건식의 결괏값이 모두 참(True)일때, 참을 반환하는 연산이다.
A | B | 결과 |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
or
조건식의 결괏값이 하나라도 참(True)일때, 참을 반환하는 연산이다.
A | B | 결과 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
not
조건식 결괏값의 반대의 값을 반환하는 연산이다.
A | 결과 |
---|---|
True | False |
False | True |
Code
# Python_Study_03_04.py
# and
print(True and True)
print(True and False)
print(False and True)
print(False and False)
print("")
# or
print(True or True)
print(True or False)
print(False or True)
print(False or False)
print("")
# not
print(not True)
print(not False)
Result
True
False
False
False
True
True
True
False
False
True
멤버 연산자
특정 값이 시퀀스 형에 포함되는지 판단하는 연산자이다. 시퀀스 형은 순서를 가지는 자료형이라고 우선 알아두자.
Code
# Python_Study_03_05.py
# 대표적인 시퀀스 형 3개
L = [10, 11, 12] # 리스트
S = "Hello" # 문자열
T = (4, 6, 8) # 튜플
# in 연산자 "찾는 데이터 in 시퀀스 형"
print(11 in L)
print("el" in S)
print(3 in T)
print()
# not in 연산자 "찾는 데이터 not in 시퀀스 형"
print(11 not in L)
print("he" not in S)
print(8 not in T)
Result
True
True
False
False
True
False
아이디 연산자
동일한 객체 여부를 판별하는 연산자이다. 객체란 어떠한 속성값과 행동을 가지고 있는 데이터이다. 쉽게 말해 데이터라고 우선 생각하자.
Code
# Python_Study_03_06.py
a = 10
b = 10
c = 20
print(a is b)
print(a is c)
print(b is c)
print()
a = "Hi"
b = "Hi"
c = "Bye"
print(a is b)
print(a is c)
print(b is c)
print()
d = a
print(a is d)
Result
True
False
False
True
False
False
True
우선순위
이렇게 많은 연산자가 한 번에 처리가 되는 게 아니라 순서에 따라 처리가 된다. 다음 표를 참고하여 연산자를 쓸 때 주의하자. 외우기보다는 자주 사용하여 프로그래밍 감각을 익히면 좋을 것 같다. Python 문서에서 참고했다.
순위 | 연산자 | 설명 |
---|---|---|
1 | (), [], {} | 튜플, 리스트, 딕셔너리, 세트 생성 |
2 | x[index], x[index : index], x(aguments…), x.attribute |
컬렉션의 첨자 슬라이싱 함수의 인수 객체의 속성 등 |
3 | await x | await 표현식 |
4 | ** | 거듭제곱 |
5 | +x, -x, -x | 양, 음, 비트 NOT |
6 | *, @, /, //, % | 곱셈, 행렬 곱셈, 나눗셈, 몫, 나머지 |
7 | +, - | 덧셈과 뺄셈 |
8 | «, » | 시프트 |
9 | & | 비트 AND |
10 | ^ | 비트 XOR |
11 | | | 비트 OR |
12 | in, not in, is, is not, <, <=, >, >=, !=, == |
멤버 연산자, 아이디 연산자, 비교연산자 |
13 | not x | 논리 NOT |
14 | and | 논리 AND |
15 | or | 논리 OR |
16 | if - else | 조건 표현식 |
17 | lambda | 람다 표현식 |
18 | := | 대입 연산자 |
마무리
아직 잘 모르는 개념이 많이 나왔다. Python 포스팅에서 다룰 예정이니 겁먹지 말고 이런 게 있다고 하고 넘어가자. 이번 포스팅에서는 비트 연산자와 삼항 연산자는 다루지 않았다. 비트 연산자의 경우에는 Python에서 자주 사용하지 않기도 하고, 2진법에 대해 설명이 필요하니 다음에 따로 포스팅하도록 하겠다. 삼항 연산자는 제어문을 다루면서 언급하도록 하겠다.