딱지 지도 — 지금 여기
- 값에 이름을 붙이고, 그 이름으로 다시 꺼내 써요.
- 등호를 ‘오른쪽 값을 왼쪽 이름에 연결’로 읽어요.
- 이름은 같아도 나중에 연결된 값이 달라질 수 있음을 알아요.
- 바꾸지 않기로 한 값과 숫자·글자의 종류를 구별해요.
지난 시간에는 글자를 바로 보여 줬어요. 이번에는 잠깐 맡겨 두었다가 이름으로 불러 볼 거예요. 냉장고 반찬통에도 이름을 붙이면 찾기 쉽지요? 컴퓨터에게도 그런 이름표가 있으면 편해요.
오늘 도착점은 네 가지.
- 값에 이름을 붙이고, 그 이름으로 다시 꺼내 써요.
- 등호를 ‘오른쪽 값을 왼쪽 이름에 연결’로 읽어요.
- 이름은 같아도 나중에 연결된 값이 달라질 수 있음을 알아요.
- 바꾸지 않기로 한 값과 숫자·글자의 종류를 구별해요.
오늘은 값을 다른 종류로 바꾸지 않아요. 형 변환은 3강에서 만나요. 지금은 이름표와 값, 둘의 관계만 또렷하면 돼요.
오늘의 도착점: 값에 이름표를 붙여 그 이름으로 다시 꺼내 보여 주고, 값을 바꿔 붙인 뒤 마지막 값을 맞혀 봐요.
날짜: 내가 붙이고 싶은 이름표:
type은 ‘타입’이라고 읽어요. print처럼 파이썬에 미리 준비된 함수예요. 오늘 새로 외울 예약어는 없어요. 변수·상수라는 한글도 코드에 적어야 하는 명령은 아니에요.
변수는 ‘변할 수 있는 수’라는 말처럼 들리지만, 숫자만 맡기는 것은 아니에요. 글자도 이름으로 불러 쓸 수 있어요. 이름은 찾는 표지, 값은 실제 내용. 이 둘을 나누어 기억해요.
카드를 가리고 말해 볼까요?
- 오른쪽 값을 왼쪽 이름에 연결하는 기호:
- 같은 이름에 다시 연결하는 일:
- 값의 종류를 묻는 함수:
답은 =, 재대입, type이에요. 한 번에 다 외워지지 않아도 괜찮아요. 이제 그림에서 계속 만날 거예요.
동네 공방에서 작은 장식을 만든다고 해 봐요. 오늘 쓸 구슬을 바구니에 담고 ‘오늘 재료’라고 적어요. 누가 “오늘 재료 좀 가져와 주세요” 하면 바구니를 찾으면 되겠지요?
구슬이 몇 개인지 매번 길게 설명하지 않아도 돼요. 이름표로 부르면 그때 연결된 내용을 찾을 수 있으니까요. 그래서 이름을 만들어요. 다시 쓰려고, 무엇에 쓰는 값인지 알아보려고요.
처음에는 오늘 재료를 4개로 정했어요. 잠시 뒤 준비를 바꾸어서 6개를 쓰기로 해요. 이름은 ‘오늘 재료’ 그대로지만, 지금 불러오는 내용은 달라졌어요. 이것이 재대입을 이해하는 출발점이에요.
실제 파이썬은 바구니 속 구슬을 사람처럼 갈아 넣는 것은 아니에요. 이름표가 다른 값 쪽을 가리키게 된다고 생각하면 더 정확해요. 그림에서는 예전 연결을 지우고 새 연결을 그릴 거예요.
먼저 이름이 없어요. 대입을 실행하고 나면 이름표로 값을 찾을 수 있어요. 그다음 print가 이름을 만나면 그 이름이 가리키는 값을 받아 보여 줘요.
중요한 구별 하나. 코드에 count라고 썼다고 해서 화면에도 count라는 영어가 나오는 것은 아니에요. 따옴표가 없는 이름은 연결된 값을 찾는 데 쓰여요.
count는 ‘개수’라는 뜻으로 고른 이름이에요. 파이썬이 정해 둔 특별한 명령은 아니에요. 이번에는 책과 똑같이 소문자로 적어요.
count = 4print(count)print(count)
4 4
첫 줄에서는 이름만 연결해요. 대입 자체는 화면에 값을 보여 주지 않아요. 둘째 줄과 셋째 줄의 print가 각각 4를 보여 줬어요. 매번 숫자를 직접 적지 않아도 같은 이름으로 다시 쓸 수 있네요.
예제 2 · 글자 값도 맡겨요
이번 예제는 앞의 코드를 지우고 새로 실행해요. item은 ‘물건’이라는 뜻으로 정한 이름이에요.
item = "리본"print(item)print("item")
리본 item
둘째 줄의 item에는 따옴표가 없어요. 그래서 이름을 따라가서 리본이라는 값을 찾았어요. 셋째 줄은 큰따옴표 안에 item을 적었지요? 이때는 그 네 글자 자체를 보여 줘요.
둘을 함께 쓰면 안내 문구 옆에 현재 값을 붙일 수 있어요. 아래 두 줄만 새로 실행해 봐요.
item = "리본"print("item:", item)
item: 리본
따옴표 안의 item:은 안내 글, 바깥의 item은 값을 찾는 이름이에요. 쉼표로 나누었으니 둘 사이에는 빈칸 하나도 들어가요.
예제 3 · 같은 이름에 다시 대입하기
count = 4count = 6print(count)
6
둘째 줄까지 실행한 뒤 count가 가리키는 값은 6이에요. 그다음 출력하니 6이 나왔어요. 4와 6이 함께 나오거나 저절로 더해지는 것은 아니에요.
등호는 이렇게 읽어요. 오른쪽의 6을 왼쪽 이름 count에 연결한다. 수학 시간처럼 ‘양쪽이 같은가?’ 하고 묻는 것이 아니에요. 그 비교는 다음 강에서 따로 배워요.
예제 4 · 바꾸지 않기로 한 값, 상수
공방에서 장식 한 세트에 넣을 구슬 수를 5개로 정했어요. 작업 중에는 바꾸지 않기로 약속할게요.
BEADS_PER_SET = 5print(BEADS_PER_SET)
5
이름은 ‘한 세트당 구슬 수’라는 뜻으로 골랐어요. 단어 사이의 밑줄 _은 스페이스바로 띄운 빈칸이 아니에요. 하나의 이름을 읽기 쉽게 이어 준 기호예요.
상수는 바꾸지 않기로 약속한 값이에요. 파이썬에서는 이런 용도의 이름을 보통 영어 대문자로 적어요. 이 규칙을 ‘관례’라고 해요. 사람들이 알아보기 좋게 함께 지키는 방식이라는 뜻이지요.
하지만 대문자를 쓴다고 파이썬이 재대입을 막아 주지는 않아요. 자동 잠금장치가 아니라, 사람에게 보여 주는 약속이에요. 이번 예제에서는 그 약속대로 값을 바꾸지 않아요.
이름표를 만들 때의 작은 약속
처음에는 영어 소문자로 뜻이 떠오르는 이름을 쓰면 편해요. 단어를 이어 쓸 때는 밑줄을 써요. 숫자를 쓸 수도 있지만 숫자로 시작할 수는 없어요. 또 이름 중간에 빈칸은 넣지 않아요.
대문자와 소문자도 구별해요. 같은 낱말처럼 보여도 다르게 적으면 다른 이름이에요. 지금은 영어 철자 공부보다 한 번 정한 이름을 똑같이 쓰기가 먼저예요.
print나 type처럼 이미 쓰는 함수 이름을 내 변수 이름으로 고르지 않아요. 예약어도 이름으로 쓸 수 없어요. 오늘은 count, item처럼 새 이름만 사용하면 충분해요.
예제 5 · 모양이 같아도 종류는 달라요
type에 값을 건네면 값의 종류를 알려 줘요. 그 답을 화면에서 보려면 바깥에서 print로 보여 달라고 해요. 안쪽에서 종류를 알아내고, 바깥에서 보여 주기. 이 순서예요.
print(type(8))print(type("8"))print(type(1.5))
<class 'int'> <class 'str'> <class 'float'>
조금 낯선 영어가 나왔네요. 오늘은 꺾쇠와 class를 외우지 않아도 돼요. 작은따옴표 안의 이름만 먼저 읽어요.
| 출력 속 이름 | 읽기 | 쉬운 뜻 | 방금 확인한 값 |
|---|---|---|---|
| int | 인트 | 정수, 소수점 없는 수 | 8 |
| str | 에스티알 | 문자열, 글자들의 묶음 | "8" |
| float | 플로트 | 소수점을 쓰는 수를 다루는 종류 | 1.5 |
숫자처럼 생겼어도 큰따옴표로 묶은 "8"은 글자 값이에요. 한 글자여도 문자열이라고 불러요. ‘문자열은 꼭 긴 문장이어야 한다’고 생각하지 않아요.
위 출력에 작은따옴표가 보인다고 앞 강과 모순되는 것은 아니에요. 이번에는 글자 8을 출력한 게 아니라, type이 알려 준 종류 정보를 출력한 거예요. 그 정보가 위와 같은 모양으로 표시돼요.
예제 6 · 이름으로 찾은 값의 종류도 물어봐요
label = "8"print(label)print(type(label))
8 <class 'str'>
첫 출력만 보면 숫자 8과 비슷하지요? 하지만 type으로 확인하니 str, 글자 값이에요. 출력 모양만 보고 종류를 단정하지 않기. 오늘 꼭 챙길 습관이에요.
변수 이름이 label이어서 글자가 된 것은 아니에요. 오른쪽에 적은 "8"이 글자 값이기 때문이에요. 이름이 종류를 정해 주는 마법은 아니랍니다.
예제 3으로 돌아가요. 위에서 아래로 한 줄씩만 따라가 보세요. 아직 실행하지 않은 줄의 값을 미리 적지 않아요.
| 실행한 곳 | count가 가리키는 값 | 그 줄에서 새로 출력한 것 |
|---|---|---|
| 실행 전 | 이름이 아직 없어요 | 없어요 |
| 첫째 줄 뒤 | 4 | 없어요 |
| 둘째 줄 뒤 | 6 | 없어요 |
| 셋째 줄 뒤 | 6 | 6 |
대입을 두 번 했다고 결과가 두 줄 나오지는 않아요. 화면에 보여 달라는 부탁은 마지막 print 한 번뿐이에요.
이번에는 예제 2의 표를 직접 채워요. 책의 결과를 손으로 가리고 시작해 보세요.
| 실행한 곳 | item이 가리키는 글자 값 | 새로 출력한 글 |
|---|---|---|
| 첫째 줄 뒤 | ||
| 둘째 줄 뒤 | ||
| 셋째 줄 뒤 |
대조 답: 이름이 가리키는 값은 세 행 모두 리본이에요. 새 출력은 차례로 없음 / 리본 / item이에요. 셋째 줄은 따옴표 안의 글을 보여 줄 뿐, item에 다시 대입하지 않아요.
내가 예측한 결과와 실제 결과가 달랐던 예제:
어디서 달라졌나요? 대입 따옴표 재대입 종류
다시 확인한 내용:
앞쪽을 가리고 써 봐요. 아래 빈칸 틀의 번호·대괄호는 종이 연습용이에요. 실행기에는 완성한 코드만 넣어요.
연습 1. 값에 이름을 붙여요.
글자 값 ‘단추’를 item에 대입하고, 그 이름으로 값을 출력해요.
첫 줄: item ① "단추"
둘째 줄: print(②)
① ②
연습 2. 이름은 그대로, 값은 다시.
count에 2를 대입한 뒤, 다시 7을 대입하고 마지막 값을 출력해요.
첫 줄: count = 2
둘째 줄: count = ③
셋째 줄: print(count)
③ 예상 출력:
연습 3. 종류를 물어봐요.
글자 값 ‘12’를 label에 대입해요. 그 이름으로 찾은 값의 종류를 type으로 알아내고 print로 보여 주세요.
첫 줄:
둘째 줄:
말로 답하기. 상수 용도 이름을 대문자로 적으면 파이썬이 재대입을 막아 줄까요?
내 답과 이유:
직접 쓰기 대조 답
연습 1의 ①은 등호, ②는 따옴표 없는 item이에요.
item = "단추"print(item)
단추
연습 2의 ③은 7이에요. 마지막에 연결된 값이 나와요.
count = 2count = 7print(count)
7
연습 3은 종류를 묻는 type을 print 안에 넣어요.
label = "12"print(type(label))
<class 'str'>
말로 답하기의 답은 ‘아니요’예요. 대문자는 바꾸지 않기로 한 약속을 알리는 관례이지, 자동으로 막는 장치가 아니에요.
한 번 틀렸다면 그곳만 고쳐 실행해 봐요. 처음부터 몽땅 다시 쓸 필요는 없어요.
고친 곳: 실제 실행 확인: 완료 아직
이 교재를 위한 창작 문항이에요. 실제 기출문제를 인용하거나 변형한 문항이 아니에요.
문제. 다음 파이썬 코드의 출력으로 알맞은 것은 무엇인가요?
tag = 3tag = "3"print(type(tag))
3<class 'int'><class 'str'><class 'float'>내 답: 마지막에 연결된 값의 종류:
정답먼저 풀고 눌러서 펼쳐 보세요
첫째 줄에서는 숫자 3에 이름을 연결했어요. 하지만 둘째 줄에서 글자 값 ‘3’으로 다시 연결했지요. 셋째 줄은 지금 tag가 가리키는 값의 종류를 물어요. 그래서 str이 나와요.
<class 'str'>
딱지 떼기
도장
- 변수는 값을 다시 쓰려고 붙이는 이름이라고 말할 수 있어요.
- 이름표와 실제 값이 다르다는 것을 그림에서 짚을 수 있어요.
- 대입은 오른쪽 값을 왼쪽 이름에 연결한다고 읽어요.
- 대입만 하면 화면 출력은 없다는 것을 알아요.
- 재대입 뒤에는 지금 연결된 값을 찾는다고 설명할 수 있어요.
- 상수의 대문자는 ‘바꾸지 말자’는 관례임을 알아요.
- 숫자 8과 글자 값 ‘8’을 type으로 구별할 수 있어요.
- 직접 쓴 코드를 실제 실행기에 넣어 결과와 대조했어요.
아직 헷갈리는 곳 하나만 골라요. 따옴표면 예제 2, 값 변경이면 예제 3, 종류면 예제 5·6을 다시 보면 돼요.
오늘의 한 문장: 값은 로 다시 찾아 쓸 수 있어요.
다음 강에서는 숫자를 계산하고 종류도 바꾸어 볼 거예요. 오늘은 이름표만 단단히 붙이면 준비 끝이에요.
출처·저작 메모
- 생활 비유·예제·그림·문항은 이 책을 위해 새로 만들었어요.
- 개념 참고: Python 공식 문서, 대입문(https://docs.python.org/3/reference/simple_stmts.html#assignment-statements), 내장함수 type(https://docs.python.org/3/library/functions.html#type), 이름의 대소문자·식별자 규칙(https://docs.python.org/3/reference/lexical_analysis.html#identifiers), PEP 8 상수 이름 관례(https://peps.python.org/pep-0008/#constants). 문장·예제·그림은 전재하지 않았어요.
- 외부 이미지·아이콘은 사용하지 않았어요. 그림은 기본 도형으로 새로 그렸어요.