[CHAPTER 3] 연산자
할당 연산자
'=' 대입 연산자라고 부르기도 한다.
= 연산자의 오른쪽 값을 왼쪽에 할당한다.
>>> x = 100 + 200 # x에 100 + 200의 결과를 할당
>>> x
300
다중 할당문
여러개의 변수에 동일한 값을 할당
>>> x = y = 100
>>> x
100
>>> y
100
동시 할당문
여러개의 변수에 여러 값을 할당
>>> x, y = 100, 200
>>> x
100
>>> y
200
산술 연산자
산술 연산을 하는 연산자
| 연산자 | 기호 |
| 덧셈 | + |
| 뺄셈 | - |
| 곱셈 | * |
| 지수 | ** |
| 나눗셈(정수) | / |
| 나눗셈(실수) | // |
| 나머지 | % |
다음은 산술 연산자의 사용 예시이다.
>>> 1+2 # 덧셈
3
>>> 3-3 # 뺄셈
0
>>> 3*5 # 곱셈
15
>>> 3**2 # 제곱
9
>>> 5//2 # 정수 나눗셈
2
>>> 5/2 # 실수 나눗셈
2.5
>>> 5%2 # 나머지
1
나머지 연산자 : %
'//' 연산자와 '%' 연산자를 이용하여 몫과 나머지를 구할 수 있다.
예를 들어 7 나누기 4의 값을 몫과 나머지로 표현하는 코드는 아래와 같다.
p = int(input("분자를 입력하세요: "))
q = int(input("분모를 입력하세요: "))
print("몫 = ", p//q)
print("나머지 = ", p%q)
| 분자를 입력하세요: 7 분모를 입력하세요: 4 몫 = 1 나머지 = 3 |
'%' 연산자를 이용하여 짝수와 홀수를 구분하는 프로그램을 작성할 수 있다.
num의 값이 짝수일 때, 2로 나누면 나머지가 0이고
홀수일 때, 2로 나누면 나머지가 1인점을 이용하여 프로그램을 작성하였다.
num = int(input("수를 입력하세요: "))
print("짝수이면 0, 홀수이면 1을 출력")
print("결과 :", num % 2)
| 수를 입력하세요: 3 짝수이면 0, 홀수이면 1을 출력 결과 : 1 |
| 수를 입력하세요: 4 짝수이면 0, 홀수이면 1을 출력 결과 : 0 |
거듭제곱 연산자 : **
파이썬에서 거듭제곱은 ** 연산자를 이용하여 아주 쉽게 구할 수 있다.
파이썬이 얼마나 편한지 실감하기 위해 C언어로 2의 7승을 구하는 프로그램을 작성해보았다.
#include <stdio.h>
int main(){
int a = 2;
int b = 7;
int result = 1;
for(int i = 0; i < b; i++){
result *= a;
}
printf("%d",result);
}
128
파이썬으로는 한줄이면 된다. 너무 편하다..
>>> 2 ** 7
128
피타고라스의 정리를 파이썬으로 구현할 수도 있다.

bottom = float(input('직각 삼각형의 밑변 길이: '))
height = float(input('직각 삼각형의 높이: '))
hypotenuse = (bottom ** 2 + height ** 2) ** 0.5
print('빗변은', hypotenuse, '입니다.')
| 직각 삼각형의 밑변 길이: 3 직각 삼각형의 높이: 4 빗변은 5.0 입니다. |
복합 할당 연산자
산술 연산자와 할당 연산자를 결합하여 간략하게 표현하는 방법이 있다.
복합 할당 연산자를 잘 쓰면 코드를 간략하게 작성할 수 있다.
a @= b ↔ a = a @ b
| 연산자 | 사용 방법 | 의미 |
| += | i += 10 | i = i + 10 |
| -= | i -= 10 | i = i - 10 |
| *= | i *= 10 | i = i * 10 |
| /= | i /= 10 | i = i / 10 |
| //= | i //= 10 | i = i // 10 |
| %= | i %= 10 | i = i % 10 |
| **= | i **= 10 | i = i ** 10 |
다음은 복합 할당 연산자의 사용 예시이다.
>>> num = 5
>>> num += 3 # 5 + 3의 결과를 num에 할당
>>> num
8
>>> num -= 3 # 8 - 3의 결과을 num에 할당
>>> num
5
>>> num *= 2 # 5 * 2의 결과를 num에 할당
>>> num
10
>>> num /= 2 # 10 / 2의 결과를 num에 할당
>>> num
5.0
비교 연산자
두 값을 비교하는 연산자
True, False를 반환한다.
이 표에서는 a=100, b=200 이라 가정한다.
| 연산자 | 설명 | 예시 |
| == | 값이 동일하다 | (a == b) → false |
| != | 값이 동일하지 않다 | (a != b) → true |
| > | 왼쪽 값이 오른쪽 값보다 크다 | (a > b) → false |
| < | 왼쪽 값이 오른쪽 값보다 작다 | (a < b) → true |
| >= | 왼쪽 값이 오른쪽 값보다 크거나 동일하다 | (a >= b) → false |
| <= | 왼쪽 값이 오른쪽 값보다 작거나 동일하다 | (a <= b) → true |
>>> a == b
False
>>> a != b
True
>>> a > b
False
>>> a < b
True
>>> a >= b
False
>>> a <= b
True
논리 연산자
파이썬은 and, or, not 연산자를 지원하는데 이러한 연산자를 논리 연산지라고 한다.
True, False를 반환한다.
| 연산자 | 의미 |
| x and y | x와 y 둘다 True일 때, True반환 |
| x or y | x와 y중 하나라도 True이면 True반환 |
| not x | x가 True이면 False, False이면 True반환 |
>>> x = True
>>> y = False
>>> x and y
False
>>> x or y
True
>>> not x
False
>>> not y
True
비트 연산자
컴퓨터는 정보를 0과 1로 구성된 2진수를 사용하며 한 자리의 이진수를 비트(bit)라고 한다.
정수 데이터형에 대하여 비트 단위 조작이 가능한데 이 조작을 위한 연산자가 비트 연산자이다.
| 연산자 | 의미 | 설명 |
| & | AND 연산 | 둘다 참일때만 만족 |
| | | OR 연산 | 둘 중 하나만 참이여도 만족 |
| ^ | XOR 연산 |
둘 중 하나만 참일 때 만족 |
| ~ | 보수 연산 | 0은 1로 1은 0으로 만듦 |
| << | 왼쪽 시프트 연산자 | 변수의 값을 왼쪽으로 지정된 비트 수 만큼 이동 |
| >> | 오른쪽 시프트 연산자 | 변수의 값을 오른쪽으로 지정된 비트 수 만큼 이동 |
비트 연산자의 사용 예시이다.
bin()은 이진수로 바꿔주는 함수이다.
>>> bin(9)
'0b1001'
>>> bin(10)
'0b1010'
>>> bin(9 & 10)
'0b1000'
>>> bin(9 | 10)
'0b1011'
>>> bin(~9)
'-0b1010'
>>> bin(9 ^ 10)
'0b11'
시프트 연산은 비트를 이동시키는 연산이다.

<< 연산자와 >> 연산자는 시프트 연산을 한다.
비트가 왼쪽으로 이동하면 정수가 2배의 값을 가지고
비트가 오른쪽으로 이동하면 정수가 1/2배의 값을 가지게 된다.
>>> 4 << 1
8
>>> 4 << 2
16
>>> 4 >>1
2
비트 연산자에도 복합 할당 연산자를 적용할 수 있다.
>>> num = 2
>>> num <<= 1
>>> num
4
>>> num <<= 1
>>> num
8
연산자 우선순위
연산자에는 우선순위가 존재한다
| 우선순위 | 연산자 | 설명 |
| 1 | ** | 지수 (전원으로 인상) |
| 2 | ~, +, - | Ccomplement, 단항 플러스와 마이너스 (마지막 두의 메서드 이름은 + @이며, - @) |
| 3 | *, /, %, // | 곱하기, 나누기, 나머지, 몫 |
| 4 | +, - | 덧셈과 뺄셈 |
| 5 | >>, << | 좌우 비트 시프트 |
| 6 | & | 비트 'AND' |
| 7 | ^, | | 비트 전용 'OR'와 정기적 인 'OR' |
| 8 | <=, <, >, >= | 비교 연산자 |
| 9 | ==, != | 평등 연산자 |
| 10 | =, %=, /=, //=, -=, +=, *=, **= | 할당 연산자 |
| 11 | is, is not | 식별 연산자 |
| 12 | in, not in | 맴버 연산자 |
| 13 | not, or and | 논리 연산자 |
연산자 우선순위를 모두 암기하는 것은 상당히 어렵기 때문에 먼저 계산되어야 되는 부분을 괄호로 감싸는 것도 좋은 방법이다.
((a + b) * (c - d)) / (e + f)
radom, math 모듈
난수 관련 함수를 제공하는 random 모듈
수학 함수를 제공하는 math 모듈에 대하여 살펴보자
random
>>> import random
>>> random.random() # 0이상 1미만의 임의의 실수를 반환
0.007959517344981903
>>> random.random()
0.8672171874714447
>>> random.randint(1, 7) # 1이상 7이하의 임의의 정수를 반환
6
>>> random.randrange(7) # 0이상 7 미만의 임의의 정수를 반환
1
>>> random.randrange(1, 7) # 1이상 7미만의 임의의 정수를 반환
2
>>> lst = [10,20,30,40,50]
>>> random.shuffle(lst) # lst 리스트의 순서를 무작위로 섞음
>>> lst
[20, 30, 50, 10, 40]
>>> random.choice(lst) # lst 리스트의 원소 중 무작위로 하나를 고름
30
math
>>> import math
>>> math.pow(3, 3) # 3의 3승
27.0
>>> math.fabs(-99) # 절대값
99.0
>>> math.log(2.71828) # 로그
0.999999327347282
>>> math.log(100, 10) # 로그 10을 밑으로 하는 100값
2.0
>>> math.pi # 원주율
3.141592653589793
>>> math.sin(math.pi / 2.0) # sin함수
1.0
지금까지 배운 것들로
자동 판매기 프로그램
돈과 물건값을 입력받고 잔돈을 계산하여 출력한다.
거스름 돈으로 500원, 100원짜리 동전을 몇개 내어 보내는지 계산하여 출력한다.
money = int(input('투입한 돈: '))
price = int(input('물건 값: '))
change = money - price
print('거스름돈: ', change)
coin500s = change // 500 # 500으로 나눈 몫 = 500원 동전의 개수
change = change % 500 # 500으로 나눈 나머지를 계산
coin100s = change // 100 # 100으로 나눈 몫 = 100원 동전의 개수
print("500원 동전 개수: ", coin500s)
print("100원 동전 개수: ", coin100s)
| 투입한 돈: 5000 물건 값: 2600 거스름돈: 2400 500원 동전 개수: 4 100원 동전 개수: 4 |
이동거리 계산 프로그램
평균 시속과 이동 시간을 입력받고 이동거리를 계산해준다.
speed = float(input("평균 시속(km/h)을 입력하세요 : "))
hour = float(input("이동 시간(h)을 입력하세요 : "))
minute = (hour -int(hour)) * 60
second = (minute - int(minute))*60
print("평균 시속: " , speed, "km/h")
print("이동 시간: ", int(hour),"시간", int(minute),"분",int(second), "초")
print("이동 거리: ", speed * hour, "km")
| 평균 시속(km/h)을 입력하세요 : 46.5 이동 시간(h)을 입력하세요 : 12.342 평균 시속: 46.5 km/h 이동 시간: 12 시간 20 분 31 초 이동 거리: 573.903 km |
빗변의 길이와 직각삼각형의 면적을 계산해주는 프로그램
직각 삼각형의 빗변을 이루는 점의 좌표를 입력받고 빗변의 길이와 직각삼각형의 면적을 계산해준다.
x1 = int(input("x1의 좌표를 입력하시오: "))
y1 = int(input("y1의 좌표를 입력하시오: "))
x2 = int(input("x2의 좌표를 입력하시오: "))
y2 = int(input("y2의 좌표를 입력하시오: "))
print("빗변의 길이: ", ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5)
print("직각삼각형의 면적은: ", ((x2 - x1) * (y2 - y1) * 0.5))
| x1의 좌표를 입력하시오: 0 y1의 좌표를 입력하시오: 0 x2의 좌표를 입력하시오: 3 y2의 좌표를 입력하시오: 4 빗변의 길이: 5.0 직각삼각형의 면적은: 6.0 |