
이미지 출처: Pexels (pexels.com) · Pexels License
지난 편에서 만든 자기소개 프로그램, 기억나시나요? 이름을 바꾸려면 세 줄을 전부 고쳐야 했습니다. 오늘의 미션은 그 불편을 없애는 것입니다. 이름을 한 곳에만 적어 두고, 나머지 줄은 그 이름을 가져다 쓰게 만듭니다. 그 "한 곳"이 오늘의 주인공, 변수입니다.
미션은 세 단계로 나눠 갑니다. 단계마다 실행창이 있으니 직접 돌려 보면서 따라오세요.
미션 1 — 이름을 한 번만 적기
먼저 지난 편의 코드를 그대로 가져왔습니다. 이름이 세 군데에 흩어져 있습니다.
print("=" * 30)
print("안녕하세요, 저는 홍길동입니다.")
print("홍길동은 파이썬을 오늘 시작했습니다.")
print("홍길동의 첫 프로그램입니다.")
print("=" * 30)📱 코드 실행(실습)은 태블릿·PC에서 이용할 수 있어요. 모바일에서는 위 코드를 눈으로 따라가며 확인하세요.
이름을 '김철수'로 바꾸려면 세 줄을 찾아 고쳐야 합니다. 열 줄, 백 줄짜리 프로그램이면 하나쯤 빠뜨리기 딱 좋습니다. 이럴 때 파이썬은 값을 상자에 넣고 이름표를 붙여 둡니다.
name = "홍길동"
이 한 줄이 하는 일은 이렇습니다.

등호 오른쪽의 값을 상자에 넣고, 왼쪽의 글자를 이름표로 붙입니다. 상자는 만들 때 크기나 종류를 정하지 않습니다 — 넣는 값이 정합니다.
상자 비유가 잘 안 와닿는 분은 엑셀을 떠올려도 됩니다. 엑셀에서 A1 셀에 값을 적어 두고 다른 셀에서 =A1로 가져다 쓰듯, 변수는 이름 붙은 칸에 값을 넣어 두고 어디서든 그 이름으로 꺼내 쓰는 것입니다. 상자든 셀이든 핵심은 같습니다 — 값 하나, 이름 하나.
여기서 오늘 가장 중요한 규칙이 나옵니다. 수학 시간에 배운 =는 "같다"였지만, 파이썬의 =는 **"오른쪽 값을 왼쪽 이름에 넣는다"**입니다. 그래서 name = "홍길동"은 "name은 홍길동과 같다"가 아니라 **"홍길동을 name이라는 상자에 넣어라"**로 읽습니다. 이 방향(오른쪽에서 왼쪽으로)만 기억하면 변수의 절반은 끝입니다.
상자를 만들었으니, 이제 세 줄이 그 상자를 가져다 쓰게 고칩니다. 글자와 상자를 이어 붙일 때는 +를 씁니다.
name = "홍길동" # 상자 하나에 이름을 넣어 둔다
print("=" * 30)
print("안녕하세요, 저는 " + name + "입니다.")
print(name + "은 파이썬을 오늘 시작했습니다.")
print(name + "의 첫 프로그램입니다.")
print("=" * 30)📱 코드 실행(실습)은 태블릿·PC에서 이용할 수 있어요. 모바일에서는 위 코드를 눈으로 따라가며 확인하세요.
첫 줄의 "홍길동"만 "김철수"로 바꾸고 실행해 보세요. 아래 세 줄이 한꺼번에 따라 바뀝니다. 이름을 적는 곳이 한 곳이 됐으니, 빠뜨릴 곳도 없어졌습니다. 미션 1 완료입니다.
미션 2 — 상자에 숫자 넣기, 그리고 첫 번째 함정
이번엔 나이도 넣어 보겠습니다. 숫자는 따옴표 없이 씁니다.
age = 20
그리고 "저는 20살입니다"를 찍으려고, 미션 1에서 배운 대로 +로 이어 붙입니다.
name = "홍길동"
age = 20
print("저는 " + age + "살입니다.")📱 코드 실행(실습)은 태블릿·PC에서 이용할 수 있어요. 모바일에서는 위 코드를 눈으로 따라가며 확인하세요.
이런 빨간 문장이 나옵니다.
TypeError: can only concatenate str (not "int") to str
번역하면 "글자(str)에는 글자만 이어 붙일 수 있고, 정수(int)는 안 됩니다." 파이썬은 상자 안에 든 것이 글자인지 숫자인지를 구분합니다. 따옴표로 감싼 "20"은 글자이고, 따옴표 없는 20은 숫자입니다. 사람 눈엔 같아 보여도 파이썬에게는 종류(type)가 다른 값이고, +는 종류가 같은 것끼리만 붙입니다.
상자 안에 든 값의 종류는 type()으로 물어볼 수 있습니다.
name = "홍길동"
age = 20
height = 175.5
print(type(name)) # <class 'str'> 글자
print(type(age)) # <class 'int'> 정수
print(type(height)) # <class 'float'> 소수
print(type("20")) # 따옴표를 씌우면 숫자도 글자가 됩니다📱 코드 실행(실습)은 태블릿·PC에서 이용할 수 있어요. 모바일에서는 위 코드를 눈으로 따라가며 확인하세요.
오늘 만나는 종류는 세 가지면 충분합니다.
- str — 글자. 따옴표로 감싼 것 (
"홍길동","20") - int — 정수. 따옴표 없는 정수 (
20,-3) - float — 소수. 소수점이 있는 숫자 (
175.5)
그러면 숫자를 글자에 붙이려면 어떻게 할까요? 두 가지 길이 있습니다. 하나는 숫자를 글자로 바꿔서 붙이는 str(), 다른 하나는 오늘의 마지막 도구입니다.
name = "홍길동"
age = 20
print("저는 " + str(age) + "살입니다.") # str(20) → "20"📱 코드 실행(실습)은 태블릿·PC에서 이용할 수 있어요. 모바일에서는 위 코드를 눈으로 따라가며 확인하세요.
미션 3 — 상자를 문장 안에 바로 끼워 넣기(f-string)
+와 str()로 이어 붙이는 방식은 상자가 많아지면 따옴표와 더하기가 뒤엉킵니다. 파이썬에는 더 편한 길이 있습니다. 문장 앞에 f를 붙이고, 상자 이름을 중괄호 { } 안에 쓰면 그 자리에 값이 들어갑니다. 숫자든 글자든 가리지 않습니다.
name = "홍길동"
age = 20
lang = "파이썬"
print("=" * 30)
print(f"안녕하세요, 저는 {name}입니다.")
print(f"올해 {age}살이고, {lang}을 오늘 시작했습니다.")
print(f"내년이면 {age + 1}살이 됩니다.") # 중괄호 안에서 계산도 됩니다
print("=" * 30)📱 코드 실행(실습)은 태블릿·PC에서 이용할 수 있어요. 모바일에서는 위 코드를 눈으로 따라가며 확인하세요.
세 번째 줄을 보세요. {age + 1}처럼 중괄호 안에서 계산까지 됩니다. str()도, +도 필요 없습니다. 앞으로 이 시리즈에서 화면에 뭔가를 찍을 때는 거의 항상 이 f-string을 쓰게 됩니다.
두 번째 함정 — 같은 이름표에 다시 넣으면
마지막으로, 처음 보면 어색한 코드 한 줄을 봅니다.
age = age + 1
수학이라면 말이 안 되는 식입니다(어떤 수가 자기보다 1 크다니). 하지만 =가 "같다"가 아니라 "넣는다"라는 걸 기억하면 풀립니다. 오른쪽을 먼저 계산(age 상자에서 20을 꺼내 1을 더해 21)하고, 그 결과를 같은 상자에 다시 넣습니다. 옛 값 20은 버려집니다.

이름표는 그대로, 속만 교체됩니다. 상자는 언제나 마지막에 넣은 값 하나만 기억합니다.
age = 20
print(age) # 20
age = age + 1
print(age) # 21 — 옛 값 20은 사라졌습니다
age = "스무 살" # 숫자 상자에 글자를 넣어도 됩니다 (종류가 바뀔 뿐)
print(type(age)) # <class 'str'>📱 코드 실행(실습)은 태블릿·PC에서 이용할 수 있어요. 모바일에서는 위 코드를 눈으로 따라가며 확인하세요.
마지막 두 줄이 보여주듯, 파이썬의 상자는 종류를 미리 정하지 않습니다. 숫자가 들어 있던 상자에 글자를 넣으면 그냥 글자 상자가 됩니다. 편리하지만, 그래서 미션 2의 TypeError처럼 "지금 이 상자에 뭐가 들어 있지?"를 잊으면 에러가 납니다. 헷갈리면 type()으로 물어보면 됩니다.
이름표에도 규칙이 있습니다
상자 이름(변수 이름)은 아무렇게나 지어도 되지만, 몇 가지는 파이썬이 거부합니다.
- 숫자로 시작 금지 —
1st = 3은 에러,first = 3은 됩니다 - 띄어쓰기 금지 —
my name은 안 되고,my_name처럼 밑줄로 잇습니다 - 대소문자 구분 —
name과Name은 다른 상자입니다(지난 편의print/Print와 같은 규칙) - 파이썬이 이미 쓰는 단어 금지 —
print = 3이라고 쓰면 그 뒤로 화면 출력이 안 됩니다.print,type,if,for같은 단어는 상자 이름으로 쓰지 않습니다
이름은 무엇이 들었는지 읽히게 짓는 것이 좋습니다. a = 20보다 age = 20이, 한 달 뒤의 나에게 훨씬 친절합니다.
여기서 한 발 더
실행창에서 이런 것들을 실험해 보면 오늘 내용이 손에 붙습니다.
x = 5다음에x = x * 2를 세 번 반복하고print(x)— 값이 어떻게 불어나는지a = "3",b = 4로 두고a + b— 어떤 에러가 나는지 미리 봐 두기, 그리고int(a) + b로 고쳐 보기first = "홍",last = "길동"으로 나눠 두고f"{first}{last}"와first + last— 두 방식이 같은 결과를 내는지
int(a)처럼 글자를 숫자로 바꾸는 도구는 다음 편에서 제대로 다룹니다. 사용자에게 키보드로 값을 입력받는 input()이 주는 값이 무조건 글자라서, 이 변환이 필수가 되기 때문입니다.
오늘 배운 것, 문제로 확인
미니 퀴즈
포켓코딩(PYTHON1) 3편 · 2편(파이썬 시작하기 — print)에서 이어집니다. 다음 편: 파이썬 입력과 형변환 — input은 항상 문자열.