값과 변수
수학에서 score = score + 5는 해가 없는 식입니다. 파이썬에서는 아주 흔한 문장이라서, score가 10이었다면 15가 됩니다.
= 기호는 「같다」는 뜻이 아닙니다
수학 시간에 score = score + 5라는 식을 보면 「어떤 수도 자기 자신에 5를 더한 값과 같을 수 없으니 틀린 식」이라고 말하겠지요. 수학에서는 맞는 말이고, 그래서 프로그램에서 이 줄을 처음 보면 헷갈립니다. 파이썬의 =는 양쪽이 같다는 선언이 아닙니다. 방향이 있는 명령입니다. 오른쪽을 먼저 계산하고, 그 결과에 왼쪽 이름을 붙이라는 뜻입니다. 그래서 이 기호를 대입 연산자라고 부르고, 읽을 때도 「score는 score 더하기 5와 같다」가 아니라 「score에 score 더하기 5를 넣는다」라고 읽는 편이 좋습니다.
score = 10
score = score + 5
print(score)15파이썬이 읽는 순서대로 따라가 봅시다. 첫째 줄에서 오른쪽은 10이니 score라는 이름이 10을 가리킵니다. 둘째 줄의 오른쪽은 score + 5, 다시 말해 10 + 5 = 15이고, 이제 score는 15를 가리킵니다. 처음의 10은 더 이상 쓰이지 않습니다. 셋째 줄은 그 순간 score가 가리키는 값을 출력합니다. 이렇게 값을 가리키는 이름을 변수라 하고, 변수에 값을 넣는 줄을 대입문이라고 합니다.
추적표로 변수를 한 줄씩 따라갑니다
변수 여러 개가 바뀌는 프로그램은 추적표를 그려서 읽습니다. 코드 한 줄마다 한 행, 변수마다 한 열을 두고, 그 줄이 실행된 뒤 각 변수의 값을 적습니다. 느려 보여도 확실합니다. 「왜 이 값이 나오지?」 하는 질문은 대부분 추적표 하나로 1분 안에 풀립니다.
score = 10
bonus = score * 2
score = 0
print(score, bonus)0 20| 줄 | score | bonus |
|---|---|---|
| score = 10 | 10 | (아직 없음) |
| bonus = score * 2 | 10 | 20 |
| score = 0 | 0 | 20 |
| print(score, bonus) | 0 | 20 |
마지막 두 행을 보세요. score를 0으로 바꿔도 bonus는 그대로 20입니다. 둘째 줄이 실행될 때 파이썬은 10 * 2 = 20을 계산해서 그 수를 bonus에 넣었습니다. bonus에 들어 있는 것은 계산 결과이지 계산식이 아니라서, 20이 어디서 왔는지 기억하지 않습니다.
값마다 자료형이 있습니다
값에는 종류가 있고, 이것을 자료형이라고 합니다. 42 같은 정수는 int, 3.5처럼 소수점이 있는 실수는 float, 따옴표 안의 글자는 문자열 str, True와 False는 참과 거짓을 나타내는 bool입니다. 내장 함수 type에 값을 넣으면 자료형을 알려 줍니다. 자료형이 중요한 까닭은 같은 기호도 자료형에 따라 하는 일이 달라지기 때문입니다. 2 + 3은 더하기이지만 "2" + "3"은 두 문자열을 이어 붙여 "23"을 만듭니다.
print(type(42))
print(type(3.5))
print(type("42"))
print(type(True))
print(2 + 3, "2" + "3")<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
5 23이름 짓는 규칙
변수 이름에는 영문자, 숫자, 밑줄 _을 쓸 수 있습니다. 다만 숫자로 시작할 수 없고 띄어쓰기도 넣을 수 없습니다. 대문자와 소문자는 다른 글자로 보기 때문에 Score와 score는 서로 다른 변수입니다. if, for, True처럼 파이썬 문법에 쓰이는 낱말(예약어)은 이름으로 쓸 수 없습니다. 파이썬에서는 lunch_price처럼 소문자로 쓰고 낱말 사이를 밑줄로 잇는 방식을 많이 씁니다. 한글 이름도 문법상 허용되지만, 다른 사람과 코드를 나누려면 영어 이름이 무난합니다. 잠깐 시험할 때는 x도 괜찮지만, 남이 읽을 프로그램에서는 seats_left처럼 값의 뜻이 드러나는 이름이 좋습니다.
a = "left"
b = "right"
a, b = b, a
print(a, b)right left마지막 예제는 두 값을 한 줄로 맞바꿉니다. 파이썬은 오른쪽의 b, a를 먼저 다 계산한 다음에 두 결과를 a와 b에 나누어 넣습니다. 다른 언어에서는 같은 일을 하려면 보통 변수를 하나 더 써야 합니다.
| 변수 | 값을 가리키는 이름 |
| 대입 | 이름 = 값. 오른쪽을 계산해서 왼쪽 이름에 넣음 |
| int(정수) | 7, -3, 2026 같은 정수 |
| float(실수) | 3.5, 0.1처럼 소수점이 있는 수 |
| str(문자열) | 따옴표 안의 글자 |
| bool(불) | True 또는 False |
| 추적표 | 줄마다 변수의 값을 적은 표 |
- 무엇이 출력될까요?
x = 4 x = x + 3 print(x) - 무엇이 출력될까요?
a = 3 b = a a = 7 print(b) - 무엇이 출력될까요?
price = 1500 count = 3 total = price * count print(total) - 무엇이 출력될까요?
n = 2 n = n * n n = n * n print(n)48162
- 무엇이 출력될까요?
print(type(7.0)) - 무엇이 출력될까요?
print("7" + "7") - 변수 이름으로 쓸 수 있는 것은?
- 2nd_place
- seats left
- seats_left
- for
- 무엇이 출력될까요?
a = "left" b = "right" a, b = b, a print(b) - 무엇이 출력될까요?
Score = 5 score = 9 print(Score)5914An error
- x = 10을 실행하고 다음 줄에 x + 1만 쓰면 x는 얼마일까요?
- 10
- 11
- x + 1
- 오류
- 「5 = x와 x = 5는 같은 뜻이다.」 이름은 반드시 왼쪽에 있어야 합니다. 5 = x는 SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?라는 오류를 냅니다.
- 「bonus = score * 2라고 쓰면 bonus가 score를 계속 따라간다.」 bonus에는 그 순간 계산한 수가 들어갑니다. 추적표에서 본 것처럼 나중에 score가 바뀌어도 bonus는 그대로입니다.
- 「x + 1이라고만 써도 x가 1 늘어난다.」 식만 쓰면 아무것도 바뀌지 않습니다. x = x + 1이나 줄여 쓴 x += 1이 필요합니다.
- =는 「오른쪽을 계산해서 왼쪽 이름에 넣는다」는 뜻.
- 추적표에는 줄마다 모든 변수의 값을 적음.
- 자료형: int, float, str, bool. type()으로 확인.
- 이름: 영문자·숫자·밑줄, 숫자로 시작 금지, 대소문자 구별.
이 과정의 출처 (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