수와 계산
파이썬 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」의 몫과 나머지를 하나씩 맡습니다(몫은 //, 나머지는 %).
%는 생각보다 자주 씁니다. 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 + 2 | 9 |
| - | 빼기 | 7 - 2 | 5 |
| * | 곱하기 | 7 * 2 | 14 |
| / | 나누기(실수) | 7 / 2 | 3.5 |
| // | 몫(내림 나눗셈) | 7 // 2 | 3 |
| % | 나머지 | 7 % 2 | 1 |
| ** | 거듭제곱 | 7 ** 2 | 49 |
계산 순서는 수학 시간과 같습니다. **가 먼저, 그다음 *, /, //, %, 마지막으로 +와 -이고, 같은 무리 안에서는 왼쪽부터 계산합니다. 괄호가 가장 먼저이니 헷갈리면 괄호를 치세요. 괄호는 공짜이고, 다음에 읽는 사람에게 뜻이 분명해집니다.
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.0input()은 언제나 문자열을 줍니다
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| / | 언제나 실수를 주는 나눗셈. 8 / 2는 4.0 |
| // | 몫(내림 나눗셈). 7 // 2는 3 |
| % | 나머지. 7 % 2는 1 |
| ** | 거듭제곱. 2 ** 3은 8 |
| int() | "15"나 3.9를 정수(15, 3)로 바꿈 |
| input() | 사용자가 친 한 줄을 문자열로 읽음 |
| round(x, n) | 소수 n째 자리까지 반올림, 한가운데 값은 짝수 쪽 |
- 무엇이 출력될까요?
print(9 / 3) - 무엇이 출력될까요?
print(17 // 5, 17 % 5) - 무엇이 출력될까요?
print(2 + 3 * 4 ** 2) - 무엇이 출력될까요?
print(2 ** 3) - 무엇이 출력될까요?
print(2 ^ 3)861An error
- 무엇이 출력될까요?
print(int("20") + 5) - 무엇이 출력될까요?
print("20" + "5") - 무엇이 출력될까요?
print(int(7.9)) - 무엇이 출력될까요?
print(round(2.5)) - 김밥 한 줄이 3,500원이고 10,000원이 있습니다. 무엇이 출력될까요?
won = 10000 price = 3500 print(won // price, won % price) - 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처럼 반올림한 값을 비교하거나, 원이나 센트 같은 정수 단위로 세세요.
- /는 언제나 실수, //는 몫, %는 나머지.
- 거듭제곱은 **이고 ^가 아님.
- 순서: 괄호, **, * / // %, + -.
- 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