edubun
한국어

수와 계산

파이썬 3에서 7 / 2는 3.5, 7 // 2는 3이고, 7 % 2는 나머지 1입니다.

읽기 전에 나눗셈 네 개의 결과를 맞혀 보세요

아래 출력을 가리고 각 줄이 무엇을 출력할지 먼저 적어 보세요. 대부분 첫째 줄은 맞히고, 나머지 가운데 하나쯤은 틀립니다. 그 틀린 짐작에서 이 단원을 시작합니다.

print(7 / 2)
print(8 / 2)
print(7 // 2)
print(7 % 2)
출력
3.5
4.0
3
1

둘째 줄에서 많이들 놀랍니다. 8 / 2는 정확히 4인데 4.0이 나옵니다. /는 나누어떨어지더라도 언제나 소수점이 있는 실수(float)를 돌려주기 때문입니다. 몫만 정수로 받고 싶을 때는 //라는 연산자를 따로 씁니다. 나눈 다음 작은 쪽 정수로 내림합니다. 짝이 되는 %는 나누고 남은 나머지를 줍니다. 초등학교에서 배운 「7 ÷ 2 = 3 … 1」의 몫과 나머지를 하나씩 맡습니다(몫은 //, 나머지는 %).

7 안에 2씩 세 번 뛸 수 있고 1이 남습니다. 7 // 2는 뛴 횟수, 7 % 2는 남은 양입니다.

%는 생각보다 자주 씁니다. n % 2가 0이면 짝수이고, n % 10은 일의 자리 숫자입니다. 135분이 몇 시간 몇 분인지는 135 // 60시간 135 % 60분으로 구합니다.

minutes = 135
print(minutes // 60, "h", minutes % 60, "min")
print(2026 % 2, 2027 % 2)
print(4589 % 10)
출력
2 h 15 min
0 1
9

나머지 연산자와 계산 순서

연산자뜻예결과
+더하기7 + 29
-빼기7 - 25
*곱하기7 * 214
/나누기(실수)7 / 23.5
//몫(내림 나눗셈)7 // 23
%나머지7 % 21
**거듭제곱7 ** 249

계산 순서는 수학 시간과 같습니다. **가 먼저, 그다음 *, /, //, %, 마지막으로 +와 -이고, 같은 무리 안에서는 왼쪽부터 계산합니다. 괄호가 가장 먼저이니 헷갈리면 괄호를 치세요. 괄호는 공짜이고, 다음에 읽는 사람에게 뜻이 분명해집니다.

print(2 + 3 * 4)
print((2 + 3) * 4)
print(2 ** 10)
print(10_000 * 3)
출력
14
20
1024
30000

마지막 줄처럼 긴 수에는 밑줄을 넣어 10_000이라고 쓸 수 있습니다. 계산할 때는 밑줄을 무시하고 출력에도 나오지 않습니다. 쉼표는 「다음 값」이라는 뜻으로 이미 쓰이기 때문에 숫자 자리를 나누는 데 쓸 수 없습니다. 10,000원을 코드에 10,000으로 쓰면 수 두 개(10과 0)가 됩니다.

소수는 2진법으로 저장되어 아주 조금 어긋나기도 합니다

0.1 + 0.2를 실행해 보세요. 0.3이 아니라 0.30000000000000004가 나옵니다. 파이썬 공식 튜토리얼은 이 까닭만 다루는 장을 따로 두고 있습니다. 실수는 2진법으로 저장되는데, 0.1은 2진법으로 딱 떨어지게 쓸 수 없습니다. 1/3을 소수로 딱 떨어지게 쓸 수 없는 것과 같은 이치입니다. 오차는 아주 작고, 출력할 때 round()를 쓰면 보이지 않습니다. 다만 round()는 정확히 한가운데 있는 값을 짝수 쪽으로 반올림합니다. 내장 함수 설명서에 round(0.5)는 0, round(1.5)는 2라고 나와 있습니다. 학교에서 배운 반올림과 다르니 기억해 두세요. 원 단위 금액은 처음부터 정수로 다루면 이런 문제가 생기지 않습니다.

print(0.1 + 0.2)
print(round(0.1 + 0.2, 2))
print(round(0.5), round(1.5), round(2.5))
print(int(3.99), float(7))
출력
0.30000000000000004
0.3
0 2 2
3 7.0

input()은 언제나 문자열을 줍니다

input()은 안내 문구를 보여 주고 사용자가 무언가를 쳐서 Enter를 누를 때까지 기다렸다가, 친 내용을 문자열로 돌려줍니다. 15를 쳐도 받는 값은 글자 "15"입니다. 계산에 쓰려면 int()나 float()로 바꿔야 합니다. 실수에 int()를 쓰면 반올림이 아니라 소수 부분을 잘라 버려서 int(3.99)는 3입니다. 고등학교 정보 [12정03-05]에서 다루는 표준입출력의 입력이 바로 이 input()입니다.

age = input("How old are you? ")
next_year = int(age) + 1
print("Next year you will be", next_year)
출력
How old are you? 14
Next year you will be 15
위 예제에서 14는 사용자가 친 값입니다. 프로그램 안에는 14라는 수가 없습니다.
/언제나 실수를 주는 나눗셈. 8 / 2는 4.0
//몫(내림 나눗셈). 7 // 2는 3
%나머지. 7 % 2는 1
**거듭제곱. 2 ** 3은 8
int()"15"나 3.9를 정수(15, 3)로 바꿈
input()사용자가 친 한 줄을 문자열로 읽음
round(x, n)소수 n째 자리까지 반올림, 한가운데 값은 짝수 쪽
  1. 무엇이 출력될까요?
    print(9 / 3)
  2. 무엇이 출력될까요?
    print(17 // 5, 17 % 5)
  3. 무엇이 출력될까요?
    print(2 + 3 * 4 ** 2)
  4. 무엇이 출력될까요?
    print(2 ** 3)
  5. 무엇이 출력될까요?
    print(2 ^ 3)
    • 8
    • 6
    • 1
    • An error
  6. 무엇이 출력될까요?
    print(int("20") + 5)
  7. 무엇이 출력될까요?
    print("20" + "5")
  8. 무엇이 출력될까요?
    print(int(7.9))
  9. 무엇이 출력될까요?
    print(round(2.5))
  10. 김밥 한 줄이 3,500원이고 10,000원이 있습니다. 무엇이 출력될까요?
    won = 10000
    price = 3500
    print(won // price, won % price)
  11. n이 짝수인지 알아보는 식은?
    • n / 2 == 0
    • n // 2 == 0
    • n % 2 == 0
    • n ** 2 == 0
자주 하는 실수
  • 「2 ^ 3은 8이다.」 파이썬에서 ^는 비트 연산자라 2 ^ 3은 1입니다. 거듭제곱은 **이고 2 ** 3이 8입니다. 오류 없이 실행되기 때문에 알아채기 어렵습니다.
  • 「숫자를 입력하면 input()이 수를 준다.」 input()은 언제나 문자열을 줍니다. "14" + 1은 TypeError: can only concatenate str (not "int") to str를 냅니다. int(input(...))로 먼저 바꾸세요.
  • 「0.1 + 0.2 == 0.3은 True다.」 False입니다. 0.1 + 0.2가 0.30000000000000004이기 때문입니다. round(0.1 + 0.2, 2) == 0.3처럼 반올림한 값을 비교하거나, 원이나 센트 같은 정수 단위로 세세요.
선생님 메모예측 문제부터 풀게 하고 4.0에서 놀라게 두세요. 몫과 나머지를 초등학교 나눗셈에서 이미 배웠기 때문에, //는 몫이고 %는 나머지라고 이름을 붙여 주면 금방 받아들입니다. 실수 오차는 한 번 보여 주고 넘어가도 됩니다. 남겨야 할 습관은 금액을 원 단위 정수로 다루는 습관입니다. round(2.5)가 2라는 것은 수학 시간의 반올림(사사오입)과 달라서 꼭 질문이 나옵니다. 말로 다투기보다 공식 설명서의 round 항목을 함께 보면 됩니다. input()의 문자열을 바꾸지 않아서 나는 오류는 첫 프로젝트에서 가장 많이 만나는 오류입니다.
핵심 정리
  • /는 언제나 실수, //는 몫, %는 나머지.
  • 거듭제곱은 **이고 ^가 아님.
  • 순서: 괄호, **, * / // %, + -.
  • 0.1 + 0.2는 0.30000000000000004. 금액은 정수로.
  • input()은 문자열을 주므로 int()나 float()로 바꿈.
이 과정의 출처 (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

확인한 날: 2026-10-19