연산자와 수식 계산
수업 목표
- 파이썬의 7가지 산술 연산자의 기능과 동작 방식을 설명할 수 있다.
- 수식의 연산 우선순위를 이해하고, 필요에 따라 괄호를 올바르게 사용할 수 있다.
- 비교 연산자를 활용하여 참(True)과 거짓(False)의 논리 결과를 도출할 수 있다.
- 복합 대입 연산자와 유용한 수학 내장 함수를 코드에 적용할 수 있다.
왜 연산자를 배워야 할까요?
컴퓨터(Computer)의 어원은 '계산하다(Compute)'입니다. 즉 컴퓨터는 근본적으로 엄청나게 빠른 계산기이며, 우리가 만드는 모든 프로그램은 크고 작은 계산 위에서 작동합니다.
- 게임: 몬스터에게 피해를 받으면
hp - damage, 경험치를 나누면exp // 파티원수 - 쇼핑몰: 할인율 적용
price * (1 - discount), 총 금액price * qty - 달력/시계: 요일 계산
day % 7, 시간 변환seconds // 3600
연산자를 정확히 이해하지 못하면 틀린 결과를 아무런 오류 없이 출력하는 가장 나쁜 버그가 생깁니다. 연산 우선순위 한 줄 실수가 게임 점수 계산이나 금융 데이터를 완전히 틀리게 만들 수 있습니다.
생각해보기: 계산기에서 발전한 컴퓨터
컴퓨터(Computer)라는 단어의 어원은 '계산하다(Compute)'입니다. 즉, 컴퓨터는 근본적으로 엄청나게 빠른 속도로 계산을 처리하는 계산기입니다. 우리가 매일 하는 화려한 3D 게임도 내부를 들여다보면 몬스터가 공격을 받아 체력이 깎이는 연산(체력 - 데미지), 획득한 골드를 파티원끼리 공평하게 나누는 연산(골드 / 인원수), 퀘스트 조건 레벨을 달성했는지 비교하는 논리 연산들이 쉴 새 없이 일어나고 있습니다.
수식에 사용되는 연산 기호들을 연산자(Operator)라 부르고, 연산의 대상이 되는 데이터를 피연산자(Operand)라고 합니다. 컴퓨터가 복잡한 문제를 해결하기 위해 사용하는 다양한 연산자의 종류와 올바른 사용법을 배워봅시다.
1. 산술 연산자 7가지 — 숫자 계산하기
파이썬에는 수학에서 배우는 사칙연산 외에도 프로그래밍할 때 유용하게 쓰이는 몫, 나머지, 거듭제곱 연산자가 존재합니다.
| 연산자 | 의미 | 예제 | 결과 |
|---|---|---|---|
+ |
덧셈 | 7 + 3 |
10 |
- |
뺄셈 | 7 - 3 |
4 |
* |
곱셈 | 7 * 3 |
21 |
/ |
나눗셈 (결과는 항상 실수) | 7 / 2 |
3.5 |
// |
몫 (소수점을 버린 정수 나눗셈) | 7 // 2 |
3 |
% |
나머지 | 7 % 2 |
1 |
** |
거듭제곱 (제곱) | 2 ** 10 |
1024 |
# 나눗셈 결과의 종류 확인
print(7 / 2) # 3.5 (실수형 반환)
print(7 // 2) # 3 (정수형 몫만 반환)
print(7 % 2) # 1 (나누고 남은 정수형 나머지 반환)
2. 수식의 우선순위 — 괄호의 중요성
여러 연산자가 섞여 있을 때 컴퓨터가 어떤 것을 먼저 연산할지 결정하는 규칙입니다.
- 1순위: 괄호
( )내부 수식 - 2순위: 거듭제곱
** - 3순위: 곱셈, 나눗셈 계열 (
*,/,//,%) - 4순위: 덧셈, 뺄셈 (
+,-)
우선순위를 잘못 계산하여 논리적인 버그가 발생하는 전형적인 사례입니다.
kor = 90
eng = 80
math = 100
# 잘못된 작성 예시
# 나눗셈(/)이 덧셈보다 먼저 계산되어 수학 점수만 3으로 나누어집니다.
bad_avg = kor + eng + math / 3
print(bad_avg) # 203.33 (잘못된 평균)
# 올바른 작성 예시
# 괄호로 묶인 덧셈이 먼저 처리되도록 설계해야 합니다.
correct_avg = (kor + eng + math) / 3
print(correct_avg) # 90.0 (정상 평균)
3. 복합 대입 연산자 — 계산과 저장을 동시에
변수에 저장된 값을 계산한 후 그 결과를 다시 같은 변수에 저장할 때, 대입 연산자(=) 앞에 연산 기호를 붙여 한 줄로 줄여 쓸 수 있습니다.
수학의 등식과 헷갈리지 마세요!
수학 시간에 x = x + 1을 보면 "어떤 수가 자기 자신보다 1이 크다고? 말이 안 되잖아!" 라고 느껴집니다.
하지만 프로그래밍에서 =는 "같다"가 아니라 "오른쪽을 계산해서 왼쪽 상자에 덮어씌워라"는 명령입니다.
score = 80
# 수학에선 모순이지만, 코드에선 "80+10을 계산 → score 상자에 덮어씌움"
score = score + 10
print(score) # 90 ← 상자 안 값이 90으로 바뀜
복합 대입 연산자로 더 짧게 쓰기
score = score + 10처럼 변수 이름을 두 번 쓰는 게 번거로울 때, 아래처럼 줄여 쓸 수 있습니다.
완전히 같은 동작이며, 단순히 코드를 짧게 만드는 약속 표기입니다.
score = 80
score += 10 # score = score + 10 과 완전히 동일
print(score) # 90
# 경험치 누적 시뮬레이션
exp = 1000
exp += 150 # exp = exp + 150
print(exp) # 1150
# 값을 1씩 올리기 (파이썬에는 ++ 기호가 없으므로 이렇게 씁니다.)
combo = 0
combo += 1
print(combo) # 1
전체 복합 대입 연산자 목록
| 연산자 | 풀어쓰면 | 의미 | 결과 (x=10일 때) |
|---|---|---|---|
x += 3 |
x = x + 3 |
덧셈 후 저장 | 13 |
x -= 3 |
x = x - 3 |
뺄셈 후 저장 | 7 |
x *= 3 |
x = x * 3 |
곱셈 후 저장 | 30 |
x //= 3 |
x = x // 3 |
정수 나눗셈 후 저장 | 3 |
x %= 3 |
x = x % 3 |
나머지 후 저장 | 1 |
4. 비교 연산자 — 참과 거짓 가리기
두 피연산자의 크기나 값을 비교하여 참(True) 또는 거짓(False)을 나타내는 불리언(bool) 값을 결과물로 돌려줍니다.
| 연산자 | 의미 | 예제 | 결과 |
|---|---|---|---|
== |
양쪽 값이 서로 같은가? | 5 == 5 |
True |
!= |
양쪽 값이 서로 다른가? | 5 != 3 |
True |
> |
왼쪽이 더 큰가? (초과) | 5 > 3 |
True |
< |
왼쪽이 더 작은가? (미만) | 5 < 3 |
False |
>= |
왼쪽이 크거나 같은가? (이상) | 5 >= 5 |
True |
<= |
왼쪽이 작거나 같은가? (이하) | 3 <= 5 |
True |
# 비교 연산의 결과는 변수에 바로 담길 수 있습니다.
player_level = 15
limit_level = 20
can_enter = (player_level >= limit_level)
print(can_enter) # False
# 파이썬에서는 수학처럼 연쇄 비교가 가능합니다.
# 레벨이 10 이상 30 이하인지 가려내기
print(10 <= player_level <= 30) # True
5. 유용한 수학 내장 함수
파이썬은 모듈을 import 하지 않고 바로 활용할 수 있는 내장 수학 도구들을 제공합니다.
# 1. abs() : 절댓값 (두 값의 물리적인 차이 계산 시)
print(abs(5 - 9)) # 4
# 2. max(), min() : 전달된 값 중 최댓값과 최솟값 반환
print(max(3, 10, 5)) # 10
print(min(3, 10, 5)) # 3
# 3. round() : 소수점 반올림 (두 번째 인자는 남겨둘 소수점 자리 수)
print(round(3.14159, 2)) # 3.14
print(round(3.5)) # 4
자주 하는 연산 실수
대입 연산자(=)와 비교 연산자(==)의 구별 실패
단일 등호 =는 값을 변수에 쑤셔 넣는 '대입 명령'이고, 이중 등호 ==는 서로 같은지 점검하는 '비교 명령'입니다. 조건문 안에서 오사용 시 문법 에러를 초래합니다.
hp = 50
# if hp = 0: # 문법 에러 (대입 기호를 조건식에 사용함)
if hp == 0: # 올바른 예시
print("게임 오버")
핵심 정리
| 구분 | 중요 핵심 개념 |
|---|---|
| 몫과 나머지 | //는 정수형 몫만 반환하며, %는 정수형 나머지만 구하여 돌려줌. |
| 연산자 우선순위 | 곱셈/나눗셈이 덧셈/뺄셈보다 항상 먼저 실행되며, 괄호 ( )가 최우선 순위임. |
| 복합 대입 | a += 1은 a = a + 1의 함축이며, 파이썬은 ++를 지원하지 않음. |
| 비교 결과 | 비교 연산의 결괏값은 참과 거짓을 표현하는 bool 데이터 타입(True/False)이 됨. |
이번 주 대회 바로가기
1반 | 2반 | 3반 | 4반 | 5반 | 6반 | 7반 | 8반 | 9반
※ 대회 링크는 선생님이 별도 공지합니다.