방구석 호랑이 이불 밖은 위험해

03. 상수와 연산자

상수

“계란 한 판은 30개, 연필 한 타(다스)는 12개”처럼 같은 값을 나타내는 단어가 있다. 값이 변하지 않고 항상 똑같은 값을 가지는 것상수라고 한다. 변수와는 반대의 의미이다.

내장 상수

Python에서 기본적으로 제공하는 내장 상수다.

True 또는 False

Python에서는 True와 False를 상수로 정의했다. True와 False는 Bool형의 값이다. 조건식의 결과가 참인지 거짓인지 확인하는 값으로 사용된다.

None

프로그래밍에서 없다는 표현을 어떻게 표현을 할까? “0”이라고 대답하였다면 틀렸다.

Python_Study_03_01

위의 그림을 보면 “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진법에 대해 설명이 필요하니 다음에 따로 포스팅하도록 하겠다. 삼항 연산자는 제어문을 다루면서 언급하도록 하겠다.