[파이썬 개념 4] 연산자
값을 계산하고 비교하고 조건을 묶는 기호를 연산자라고 합니다.
연산자를 정확히 알면 "몇 시간 몇 분", "짝수인가", "합격 조건을 모두 만족하는가" 같은 문제를 한 줄로 표현할 수 있습니다.
1. 산술 연산자
| 연산자 | 뜻 | 예 | 결과 |
|---|---|---|---|
+ |
더하기 | 7 + 2 |
9 |
- |
빼기 | 7 - 2 |
5 |
* |
곱하기 | 7 * 2 |
14 |
/ |
나누기 | 7 / 2 |
3.5 |
// |
몫 (정수 나누기) | 7 // 2 |
3 |
% |
나머지 | 7 % 2 |
1 |
** |
거듭제곱 | 2 ** 3 |
8 |
print(7 / 2, 7 // 2, 7 % 2)
print(2 ** 10)
print(9 ** 0.5)
실행 결과
3.5 3 1
1024
3.0
** 0.5 는 제곱근입니다.
2. 몫과 나머지 활용
몫 // 과 나머지 % 는 생각보다 쓸 곳이 많습니다.
단위 바꾸기
sec = 3725
h = sec // 3600
m = sec % 3600 // 60
s = sec % 60
print(h, m, s)
실행 결과
1 2 5
짝수, 배수 판정
n = 14
print(n % 2 == 0) # 짝수인가
print(n % 7 == 0) # 7의 배수인가
print(n % 3 == 0) # 3의 배수인가
실행 결과
True
True
False
자릿수 꺼내기
n = 4827
print(n % 10) # 일의 자리
print(n // 10 % 10) # 십의 자리
print(n // 1000) # 천의 자리
실행 결과
7
2
4
음수의 몫과 나머지
음수를 나누면 몫은 더 작은 쪽으로 내림합니다. 수학 시간과 다를 수 있으니 주의합니다.
print(-7 // 2, -7 % 2)
print(int(-7 / 2))
실행 결과
-4 1
-3
3. 계산 순서 (우선순위)
위에 있을수록 먼저 계산합니다.
| 순서 | 연산자 |
|---|---|
| 1 | ( ) 괄호 |
| 2 | ** |
| 3 | *, /, //, % |
| 4 | +, - |
| 5 | ==, !=, >, <, >=, <= |
| 6 | not |
| 7 | and |
| 8 | or |
a, b, c = 80, 90, 100
print(a + b + c / 3)
print((a + b + c) / 3)
print(2 + 3 * 4 ** 2)
실행 결과
203.33333333333334
90.0
50
헷갈리면 괄호를 칩니다. 괄호는 읽는 사람에게도 의도를 분명히 보여 줍니다.
4. 복합 대입 연산자
x = x + 5 처럼 자기 자신을 바꾸는 식은 줄여 쓸 수 있습니다.
| 줄여 쓴 모양 | 같은 뜻 |
|---|---|
x += 5 |
x = x + 5 |
x -= 5 |
x = x - 5 |
x *= 5 |
x = x * 5 |
x //= 5 |
x = x // 5 |
x %= 5 |
x = x % 5 |
score = 10
score += 5
score -= 2
score *= 3
print(score)
실행 결과
39
5. 비교 연산자
비교한 결과는 True 또는 False 입니다.
| 연산자 | 뜻 | 문제에 나오는 말 |
|---|---|---|
== |
같다 | 같다 |
!= |
다르다 | 다르다, 아니다 |
> |
크다 | 초과, 넘는다, 보다 크다 |
< |
작다 | 미만, 못 미친다, 보다 작다 |
>= |
크거나 같다 | 이상 |
<= |
작거나 같다 | 이하 |
score = 60
print(score > 60, score >= 60, score == 60, score != 60)
실행 결과
False True True False
이상, 이하, 초과, 미만을 정확히 옮기는 것이 가장 중요합니다. 딱 60점처럼 경계에 있는 값이 숨은 테스트로 자주 나옵니다.
문자열도 비교할 수 있습니다. == 는 글자가 완전히 같은지 봅니다. 대문자와 소문자도 구별합니다.
print("pureum" == "pureum", "Pureum" == "pureum")
print("apple" < "banana")
실행 결과
True False
True
범위는 수학처럼 이어서 쓸 수 있습니다.
x = 15
print(10 <= x and x < 20)
print(10 <= x < 20)
실행 결과
True
True
6. 논리 연산자
| 연산자 | 뜻 | 참이 되는 경우 |
|---|---|---|
and |
그리고 | 둘 다 참 |
or |
또는 | 하나 이상 참 |
not |
아니다 | 원래 거짓 |
| A | B | A and B | A or B |
|---|---|---|---|
| True | True | True | True |
| True | False | False | True |
| False | True | False | True |
| False | False | False | False |
age, height = 12, 125
print(age >= 10 and height >= 130)
print(age <= 8 or age >= 65)
print(not (height >= 130))
실행 결과
False
False
True
and 와 or 를 섞을 때
and 가 or 보다 먼저 계산됩니다. 섞어 쓸 때는 괄호로 묶는 습관을 들입시다.
grade, score = 3, 80
print(grade == 1 or grade == 2 and score >= 70)
print((grade == 1 or grade == 2) and score >= 70)
실행 결과
False
False
"1학년이거나 2학년이면서 70점 이상"을 뜻하려면 두 번째처럼 괄호가 필요합니다.
자주 하는 실수
x = 3
print(x == 1 or 2)
print(x == 1 or x == 2)
실행 결과
2
False
x == 1 or 2 는 "x가 1 또는 2"가 아니라 "(x == 1) 또는 (2)" 로 읽혀 엉뚱한 값이 나옵니다. 비교는 하나씩 따로 써야 합니다.
7. 포함 연산자 in
print("a" in "apple")
print(3 in [1, 2, 3])
print("z" not in "apple")
실행 결과
True
True
True
정리
- 몫
//, 나머지%로 단위 바꾸기, 짝수와 배수, 자릿수를 다룬다. - 우선순위가 헷갈리면 괄호를 친다.
- 이상
>=, 이하<=, 초과>, 미만<. and는 모두,or는 하나라도,not은 뒤집기. 섞을 때는 괄호.x == 1 or x == 2처럼 비교는 하나씩 쓴다.
확인 문제
- 200분을 "3시간 20분"처럼 바꾸려면 시와 분을 각각 어떤 식으로 구하나요?
17 // 5,17 % 5,-17 // 5의 결과는?- "나이가 8세 이하이거나 65세 이상이면서, 회원인 사람"을
age,member로 쓰세요.
연습해 보기
확인 문제 정답
- 시는
200 // 60, 분은200 % 60 3,2,-4(음수의 몫은 더 작은 쪽으로 내림)(age <= 8 or age >= 65) and member: 괄호가 없으면and가 먼저 계산되어 뜻이 달라집니다.
댓글 0
로그인하면 댓글을 쓸 수 있습니다.