파이썬을 다시 공부하다가 %를 보니, 처음 배울 때 “왜 퍼센트 기호가 나머지를 구하지?” 하고 멈칫했던 기억이 났습니다. +, -, *는 계산기에서도 익숙하지만 /, //, %가 한꺼번에 나오면 어느 기호를 골라야 할지 헷갈리기 쉽습니다.
이번에는 기호를 표로 외우기보다 간식 17개를 3명에게 나누는 장면으로 이해해 보겠습니다. 세 기호는 같은 나눗셈에서 서로 다른 질문에 답합니다.

/는 계산 결과 전체를,//는 똑같이 나눠 가질 개수를,%는 나누고 남은 것을 알려줍니다.
앞에서 만든 변수에 계산식을 연결하는 단계입니다. 변수의 역할부터 다시 보고 싶다면 파이썬 변수 기초를 먼저 읽어도 좋습니다.
테스트 환경
- 작성 및 실행 확인일 : 2026년 8월 8일
- 운영체제 : Windows
- 로컬 실행 환경 : Python 3.9.13
- 공식 문서 확인 : Python 3.14.6 숫자와 산술 표현식 문서
예제는 Python 3의 기본 산술 연산만 사용합니다. 제곱과 비교 연산자는 이미 별도 글이 있으므로 여기서는 사칙연산, 나눗셈의 세 가지 결과, 괄호에 집중합니다.
연산자는 값 사이의 행동을 정한다
연산자는 값 사이에서 무엇을 할지 알려주는 기호입니다. 간식 가격과 개수를 곱하고, 음료 가격을 더하고, 할인 금액을 빼는 식으로 사용할 수 있습니다.
snack_price = 4500
drink_price = 2000
snack_count = 3
print("간식 3개 가격:", snack_price * snack_count, "원")
print("음료를 더한 금액:", snack_price * snack_count + drink_price, "원")
print("2천 원 할인 후:", snack_price * snack_count + drink_price - 2000, "원")
실행 결과입니다.
간식 3개 가격: 13500 원
음료를 더한 금액: 15500 원
2천 원 할인 후: 13500 원
여기서 *는 곱하기입니다. 키보드에는 수학책의 × 기호가 따로 없기 때문에 별표를 사용합니다. 같은 이유로 나누기도 ÷ 대신 /를 씁니다.
| 기호 | 뜻 | 예 | 결과 |
|---|---|---|---|
+ |
더하기 | 7 + 3 |
10 |
- |
빼기 | 7 - 3 |
4 |
* |
곱하기 | 7 * 3 |
21 |
/ |
나누기 | 7 / 3 |
2.333... |
기호를 외우는 것보다 “나는 지금 금액을 합치는가, 개수만큼 반복하는가, 똑같이 나누는가?”를 먼저 묻는 편이 알맞은 연산자를 고르기 쉽습니다.
나눗셈 기호가 세 개인 이유
간식 17개를 3명이 나눈다고 해보겠습니다. 이 상황에는 서로 다른 세 가지 답이 나올 수 있습니다.
cookie_count = 17
people_count = 3
print("계산상 한 사람 몫:", cookie_count / people_count)
print("똑같이 나눠 갖는 개수:", cookie_count // people_count)
print("나누고 남는 개수:", cookie_count % people_count)
계산상 한 사람 몫: 5.666666666666667
똑같이 나눠 갖는 개수: 5
나누고 남는 개수: 2
같은 17과 3으로 계산했지만 질문이 다르기 때문에 결과도 다릅니다.
/는 나눈 전체 결과를 보여준다
17 / 3은 17을 3으로 나눈 계산 결과를 소수까지 보여줍니다. Python에서 /의 결과는 나누어떨어져도 float입니다.
print(12 / 3)
print(type(12 / 3))
4.0
<class 'float'>
평균 점수나 정확한 비율처럼 소수 부분까지 필요할 때 /가 어울립니다. 4가 아니라 4.0으로 보이는 이유가 궁금하다면 파이썬 자료형 기초에서 int와 float의 차이를 확인할 수 있습니다.
//는 온전히 나눠 가질 개수를 구한다
쿠키를 실제로 자르지 않고 나눠 준다면 한 사람은 5개씩 받을 수 있습니다. 이번 예제처럼 양수의 개수를 계산할 때 17 // 3은 온전히 나눠 가질 개수 5를 구하는 데 알맞습니다.
print(17 // 3)
5
//를 단순히 “소수점을 지우는 기호”로만 외우면 음수가 나왔을 때 예상과 달라질 수 있습니다. 처음에는 몇 묶음을 온전히 만들 수 있는지 구하는 나눗셈으로 이해하면 충분합니다.
%는 나누고 남은 것을 구한다
3명에게 5개씩 나눠 주면 15개를 사용하고 2개가 남습니다. 이 남은 개수를 구하는 기호가 %입니다.
print(17 % 3)
2
%는 백분율을 자동으로 계산하는 기호가 아닙니다. Python 산술식에서 두 숫자 사이에 놓이면 나머지를 구합니다. 짝수인지 확인하거나 일정한 주기가 돌아왔는지 판단할 때도 쓰이지만, 그런 조건 판단은 다음 단계에서 천천히 연결해도 됩니다.
몫과 나머지를 다시 합치면 원래 수가 된다
//와 %는 따로 떨어진 요령이 아니라 하나의 나눗셈을 두 부분으로 나눈 결과입니다.
나누어지는 수 = 나누는 수 × 몫 + 나머지
17 = 3 × 5 + 2
Python 코드로 그대로 확인해 보겠습니다.
cookie_count = 17
people_count = 3
quotient = cookie_count // people_count
remainder = cookie_count % people_count
restored_count = people_count * quotient + remainder
print(restored_count)
17
이 관계를 이해하면 //와 %를 어느 때 써야 할지 외우지 않아도 됩니다. 묶음의 수가 필요하면 몫을, 묶고 남은 값이 필요하면 나머지를 선택하면 됩니다.
계산 순서는 수학과 비슷하고 괄호가 먼저다
연산자가 여러 개 놓이면 Python도 곱셈과 나눗셈을 덧셈과 뺄셈보다 먼저 계산합니다. 배송비 2,000원을 한 번 더하는 계산을 보겠습니다.
delivery_fee = 2000
snack_price = 4500
snack_count = 3
total_price = delivery_fee + snack_price * snack_count
print(total_price)
15500
Python은 4500 * 3을 먼저 계산하고 배송비 2000을 더합니다.
괄호를 넣으면 계산 순서를 직접 묶을 수 있습니다.
normal_total = 2000 + 4500 * 3
grouped_total = (2000 + 4500) * 3
print("배송비 한 번:", normal_total, "원")
print("괄호로 먼저 묶은 결과:", grouped_total, "원")
배송비 한 번: 15500 원
괄호로 먼저 묶은 결과: 19500 원
두 번째 식은 괄호 안의 2000 + 4500을 먼저 계산한 뒤 3을 곱합니다. 결과만 맞히는 것보다 어떤 값을 한 덩어리로 계산하려는지 괄호로 보여준다고 생각하면 코드가 읽기 쉬워집니다.
복잡한 우선순위 표를 처음부터 외울 필요는 없습니다. 곱셈과 나눗셈이 먼저라는 기본 규칙을 기억하고, 읽다가 잠깐이라도 헷갈리면 괄호로 의도를 표시하는 편이 안전합니다.
0으로 나누면 왜 멈출까
아무것도 없는 0명에게 간식 17개를 똑같이 나눈다는 질문은 답을 정할 수 없습니다.
people_count = 0
print(17 / people_count)
Python 3.9.13에서 직접 실행하면 다음 오류가 발생했습니다.
Traceback (most recent call last):
File "04_zero_division_error.py", line 2, in <module>
print(17 / people_count)
ZeroDivisionError: division by zero
/뿐 아니라 //와 %도 오른쪽 값이 0이면 계산할 수 없습니다. 이 오류는 Python이 계산을 못해서 생기는 우연한 문제가 아니라, 애초에 답을 정할 수 없는 질문을 받았다는 신호입니다.
사용자에게 나누는 수를 입력받는 프로그램이라면 계산 전에 0인지 확인해야 합니다. 아직 조건문이 낯설다면 우선 나누기 기호의 오른쪽은 0이 될 수 있는가만 점검해도 실수를 많이 줄일 수 있습니다.
예산으로 살 수 있는 최대 개수 구하기
이제 몫과 나머지가 실제 프로그램에서 어떻게 함께 쓰이는지 확인해 보겠습니다. 20,000원으로 4,500원짜리 간식을 최대 몇 개 살 수 있고 돈이 얼마 남는지 계산합니다.
budget = 20000
snack_price = 4500
max_count = budget // snack_price
remaining_money = budget % snack_price
print("살 수 있는 간식:", max_count, "개")
print("남는 돈:", remaining_money, "원")
살 수 있는 간식: 4 개
남는 돈: 2000 원
20000 / 4500의 결과인 약 4.44는 비율로는 맞지만 간식 4.44개를 살 수는 없습니다. 완제품의 최대 개수가 필요하므로 //를 사용하고, 구매 뒤 남는 돈은 %로 구합니다.
변수 이름 덕분에 식도 문장처럼 읽힙니다.
최대 개수 = 예산 // 간식 가격
남는 돈 = 예산 % 간식 가격
키보드로 예산과 가격을 직접 받아 계산하고 싶다면 Python input 사용법을 이어서 연습하면 됩니다.
어떤 기호를 고를지 세 문장으로 판단하기
계산식을 만들 때는 기호부터 떠올리지 말고 원하는 답을 말로 먼저 적어 보세요.
- 소수까지 포함한 나눗셈 결과가 필요하다면
/ - 온전히 만들 수 있는 묶음이나 최대 개수가 필요하다면
// - 묶고 난 뒤 남는 값이 필요하다면
%
저도 다시 공부하면서 연산자 표를 보는 것보다 17개를 3명에게 나눈다는 한 장면에 세 질문을 붙여 보니 차이가 훨씬 선명했습니다. 코드를 실행하기 전에 “전체 결과, 몫, 나머지 중 무엇을 원하는가?”를 먼저 말할 수 있다면 기호를 잘못 고를 가능성도 줄어듭니다.
다음에는 계산 결과를 비교해 True와 False를 만드는 과정을 조건문과 연결할 수 있습니다. 제곱이 필요한 문제라면 Python 제곱과 n승 구하기에서 **만 따로 확인하는 편이 이해하기 쉽습니다.
참고
대표 이미지는 글의 주제를 나타내기 위해 이미지 생성 도구로 제작한 일러스트이며, 실제 Python 실행 화면은 아닙니다.
'IT프로그래밍 > 파이썬' 카테고리의 다른 글
| 파이썬 딕셔너리 사용법 : KeyError를 get으로 막는 가장 쉬운 방법 (0) | 2026.08.14 |
|---|---|
| 파이썬 in 연산자 기초 : 문자열 속 단어를 어떻게 찾을까 (0) | 2026.08.11 |
| 파이썬 문자열 메서드 기초 : strip과 replace는 원본을 바꿀까 (0) | 2026.08.10 |
| 파이썬 문자열 기초 : 글자는 왜 0번부터 셀까 (0) | 2026.08.09 |
| 파이썬 변수 기초 : 값에 이름을 붙이면 무엇이 편해질까 (0) | 2026.08.07 |
| 파이썬 자료형 기초 : 숫자 10과 문자열 '10'은 왜 다를까 (0) | 2026.08.05 |
| 파이썬 코드 실행 순서 : 위에서 아래로 읽는 첫 번째 원리 (0) | 2026.08.04 |
| 파이썬 함수 만들기 : def 정의부터 매개변수와 return까지 (0) | 2026.07.31 |
댓글