파이썬의 값에는 종류가 있습니다. 3은 정수, 3.5는 실수, 따옴표로 감싼 '3'은 문자열(글자)입니다. 같은 +도 값의 종류에 따라 더하기가 되기도 하고 이어 붙이기가 되기도 합니다.
화면에 찍힌 3만 봐서는 수인지 글자인지 알 수 없습니다. print가 문자열의 따옴표를 찍지 않기 때문입니다.
종류를 놓치면 4000원짜리 두 잔 값이 8000이 아니라 40004000으로 찍히거나, 프로그램이 오류로 멈춥니다.
앞 단원에서 =의 오른쪽이 값 하나로 계산된다고 배웠습니다. 이 레슨은 그 값이 어떤 종류인지, 종류가 계산을 어떻게 바꾸는지 봅니다.
이 단원(수와 글자)을 이미 안다면 단원 연습 문제부터 풀고 틀린 레슨만 보세요.
1값의 세 종류: 정수·실수·문자열
파이썬은 값마다 종류를 붙여 둡니다. 먼저 쓰는 종류는 셋입니다.
| 종류 | 파이썬 이름 | 값의 예 | 알아보는 법 |
|---|---|---|---|
| 정수 | int | 3·4000·-7 | 소수점이 없는 수 |
| 실수 | float | 3.5·0.1·3.0 | 소수점이 있는 수 |
| 문자열 | str | '3'·'커피' | 따옴표로 감싼 글자 |
따옴표 안에 숫자만 있어도 문자열입니다. '3'은 수 3이 아니라 글자 3 한 개입니다.
작은따옴표 대신 큰따옴표로 감싼 "3"도 같은 문자열입니다. 이 과목은 작은따옴표를 씁니다.
3.0은 크기는 3과 같지만 소수점이 있어 실수입니다.
종류는 이름이 아니라 값이 가진 것입니다. x = '3'은 이름 x를 문자열 값 '3'에 붙입니다.
앞 단원 그림에서 값 칸 위에 적혀 있던 int가 이 종류 이름입니다. 문자열 값이면 그 자리에 str이 적힙니다.
위 그림의 표처럼 값을 적을 때는 문자열에 따옴표를 붙여 수와 가릅니다.
2type()으로 종류 확인하기
화면에 찍힌 글자만으로는 종류를 알 수 없습니다. 종류가 궁금하면 type()에 값을 넣어 찍어 봅니다.
print(3)
print('3')
print(type(3))
print(type('3'))
print(type(3.5))
3
3
<class 'int'>
<class 'str'>
<class 'float'>1번 줄과 2번 줄은 똑같이 3을 찍지만, 하나는 수이고 하나는 글자입니다.
type(3)은 3의 종류를 알아내고, print가 그 종류를 <class 'int'>로 찍습니다. '이 값의 종류는 int(정수)'라는 뜻입니다.
3종류가 계산을 정한다
=는 오른쪽을 먼저 계산해 값 하나를 만들고 이름을 붙입니다(규칙 2). 이때 파이썬은 값의 종류를 보고 할 일을 고릅니다. 그림의 코드를 오류가 나는 마지막 줄만 빼고 다시 보면 이렇습니다.
a = '3' + '4'
b = 3 + 4
c = '3' * 3
print(a, b, c)
34 7 333같은 기호가 종류에 따라 다른 일을 합니다.
| 식 | 값 | 종류 | 하는 일 |
|---|---|---|---|
3 + 4 | 7 | int | 더하기 |
'3' + '4' | '34' | str | 이어 붙이기 |
3 * 3 | 9 | int | 곱하기 |
'3' * 3 | '333' | str | 세 번 이어 붙이기(되풀이) |
카페 계산에서 이 차이가 드러납니다. 가격을 따옴표로 감싸 두고 두 잔 값을 찍으면 무엇이 찍힐까요?
price = '4000'
print(price * 2)
실행 결과 보기
40004000예상과 다르면 그곳이 배울 곳입니다. price가 붙은 값은 따옴표로 감싼 문자열 '4000'이라, * 2는 곱하기가 아니라 두 번 이어 붙이기입니다. 수로 계산하려면 따옴표 없이 price = 4000으로 씁니다.
4글자와 수를 섞으면: TypeError
글자와 수를 +로 이으려 하면 파이썬은 계산하지 못하고 멈춥니다.
a = '34'
b = 7
print(a + b)
Traceback (most recent call last): File "main.py", line 3, in <module> print(a + b) ~~^~~TypeError: can only concatenate str (not "int") to str오류 메시지는 맨 아래 줄부터 읽습니다. TypeError는 값의 종류가 맞지 않는다는 오류이고, 설명은 '문자열(str)에는 문자열만 이을 수 있다, int는 안 된다'는 뜻입니다.
그 위의 line 3과 ^ 표시는 3번 줄의 +에서 멈췄다고 알려 줍니다. 3번 줄에 쓰인 이름 a는 글자에, b는 수에 붙어 있습니다.
고치려면 두 값의 종류를 맞춥니다. 글자로 이으려면 둘 다 글자로('34' + '7'은 '347'), 수로 더하려면 둘 다 수로(34 + 7은 41) 씁니다.
값을 다른 종류의 새 값으로 만들어 주는 str()·int()는 이 단원의 '문자열 잇기와 되풀이'와 '입력은 늘 글자' 레슨에서 배웁니다.
수를 앞에 두면 맨 아래 줄의 설명이 달라지지만 뜻은 같습니다. + 양쪽의 종류가 맞지 않는다는 것입니다.
| 식 | 오류 메시지 맨 아래 줄 |
|---|---|
'3' + 4 | TypeError: can only concatenate str (not "int") to str |
3 + '4' | TypeError: unsupported operand type(s) for +: 'int' and 'str' |
예제
카페 주문 한 줄을 찍습니다. 메뉴 이름은 글자, 잔 수와 가격은 수입니다.
item = '커피'
price = 4000
count = 2
total = price * count
print(item, count, total)
print(type(item), type(total))
커피 2 8000
<class 'str'> <class 'int'>계산은 수끼리만 합니다. 4번 줄의 price * count는 4000 곱하기 2라 8000이고, 이름 total이 그 값에 붙습니다.
5번 줄처럼 print에 쉼표로 값을 넘기면 종류가 섞여도 빈칸을 끼워 차례로 찍습니다. +로 잇지 않았으니 오류가 나지 않습니다.
자주 틀리는 곳
틀린 생각: 따옴표로 감싸도 숫자만 있으면 수로 계산된다.
안에 든 것이 숫자뿐이라 수처럼 보이지만, 따옴표로 감싼 값은 글자(문자열)입니다.
print('3' * 3)
print(3 * 3)
333
91번 줄의 '3'은 글자라 * 3이 세 번 이어 붙이기가 되고, 2번 줄의 3은 수라 곱하기가 됩니다.
맞는 규칙: 파이썬은 값의 종류를 보고 할 일을 고르는데, 따옴표로 감싼 값은 숫자만 있어도 문자열입니다. 수로 계산하려면 따옴표 없이 씁니다.
틀린 생각: 화면에 같게 찍힌 두 값은 종류도 같다.
print는 문자열의 따옴표를 찍지 않아 글자 7과 수 7이 똑같아 보입니다. 그래도 두 값의 종류는 다릅니다.
print('7', 7)
print(type('7'), type(7))
7 7
<class 'str'> <class 'int'>1번 줄은 7을 두 번 찍었지만, 2번 줄의 type()은 앞의 7이 str, 뒤의 7이 int라고 알려 줍니다.
맞는 규칙: 종류는 화면의 글자가 아니라 값이 가진 것이라, 찍힌 모양으로는 가릴 수 없습니다. 종류가 궁금하면 type()으로 찍어 봅니다.
틀린 생각: 글자와 수를 +로 이으면 파이썬이 종류를 알아서 맞춰 준다.
사람은 '잔 수: '와 2를 이으면 '잔 수: 2'로 읽지만, 파이썬은 글자와 수를 +로 잇지 못하고 멈춥니다.
label = '잔 수: '
count = 2
print(label + count)
Traceback (most recent call last): File "main.py", line 3, in <module> print(label + count) ~~~~~~^~~~~~~TypeError: can only concatenate str (not "int") to str맨 아래 줄은 4절에서 본 TypeError입니다. 3번 줄에서 글자에 붙은 label과 수에 붙은 count를 +로 이으려다 멈췄습니다.
맞는 규칙: +는 글자끼리는 잇고 수끼리는 더할 뿐, 글자와 수를 섞으면 TypeError로 멈춥니다. 함께 찍으려면 + 대신 쉼표로 넘기거나, 뒤에서 배울 str()로 수를 적은 새 문자열을 만들어 잇습니다.
확인 문제
1. 예제의 1번 줄을 item = 4000으로 바꿨습니다. 무엇이 찍힐까요? 두 줄을 글자 그대로 쓰세요.
item = 4000
price = 4000
count = 2
total = price * count
print(item, count, total)
print(type(item), type(total))
힌트
item이 붙은 값에 따옴표가 있는지 보세요.
정답
4000 2 8000
<class 'int'> <class 'int'>이름이 item이어도 붙은 값은 따옴표 없는 4000, 곧 정수라 <class 'int'>입니다.
흔한 오답은 둘째 줄 첫 칸의 <class 'str'>입니다. 이름이 메뉴처럼 보여 글자라고 본 것입니다. 컴퓨터는 이름의 뜻을 모르고 쓴 대로만 합니다(규칙 6).
2. 다음 코드가 33과 34를 두 줄로 찍도록 빈칸에 들어갈 값을 쓰세요.
x = ____
print(x * 2)
print(x + '4')
힌트
3번 줄에서 x에 글자 '4'를 +로 잇습니다. x가 어떤 종류여야 멈추지 않을까요?
정답
'3'입니다. 큰따옴표 "3"이나 뒤에서 배울 str(3)처럼 글자 '3'을 만드는 것도 맞습니다.
x = '3'
print(x * 2)
print(x + '4')33
34x가 글자여야 * 2가 두 번 이어 붙이기가 되고, + '4'가 잇기가 됩니다.
흔한 오답은 따옴표 없는 3입니다. 수 3도 글자처럼 이어 붙는다고 본 것입니다(문자열과 수를 가리지 않는 생각). 그러면 2번 줄은 6을 찍고, 3번 줄은 수와 글자를 섞어 TypeError로 멈춥니다.
3. 장보기 계산입니다. 무엇이 찍힐까요? 글자 그대로 쓰세요.
apple = '2'
pear = 3
print(apple * pear)
print(pear * 2)
힌트
곱하는 두 값의 종류를 먼저 가르세요. apple이 붙은 값에는 따옴표가 있습니다.
정답
222
63번 줄은 글자 '2'에 정수 3을 곱해 '2'를 세 번 이어 붙입니다. 4번 줄은 수끼리 곱해 6입니다.
흔한 오답은 첫 줄의 6입니다. 따옴표 안의 2도 수라고 본 것입니다(문자열과 수를 가리지 않는 생각).
아래 3절 코드의 4번 줄을 print(a + c)로 바꾸면 찍히는 것을 봅니다.
처음 펼 때 약 6MB를 받습니다.컴퓨터에서 해 보기
파이썬 3.14. Tab을 누르면 다음 단추나 칸으로 갑니다. 들여쓰기는 빈칸 네 개입니다. Enter는 앞줄 들여쓰기를 잇고, 콜론 뒤에서는 한 단계 더 들여 씁니다. Ctrl+Enter로 실행합니다.
'실행'을 누르면 여기에 나옵니다.
여기서 쓴 코드 · 내 예상은 저장하지도 운영자에게 보내지도 않습니다. 페이지를 새로 열면 처음 코드입니다.