문자열은 글자를 차례로 늘어놓은 값입니다. +로 두 문자열을 이어 새 문자열을 만들고, *로 되풀이하고, len()으로 글자 수를 셉니다.
주문 문구 '커피 두 잔'은 메뉴 이름에 수량 문구를 이어 붙여 만들고, 영수증의 구분선은 '-' 한 글자를 여러 번 되풀이해 만듭니다. 그런데 문구에 수를 넣으려 하면 오류가 납니다. 수는 글자가 아니기 때문입니다. 이 레슨은 문자열을 잇고 세는 법과, 수를 문자열로 바꿔 잇는 법을 봅니다.
1잇기와 되풀이
두 문자열 사이의 +는 앞 문자열의 글자 뒤에 뒤 문자열의 글자를 차례로 이어 새 문자열 하나를 만듭니다.
drink = '커피'
msg = drink + ' 두 잔'
print(msg)
print(drink + '두 잔')
print(drink)
커피 두 잔
커피두 잔
커피+는 빈칸을 넣어 주지 않습니다. 2번 줄은 ' 두 잔'의 맨 앞에 빈칸이 있어 '커피 두 잔'이 되고, 4번 줄은 빈칸 없이 붙어 '커피두 잔'이 됩니다.
이어 붙인 결과는 새 값입니다. 오른쪽이 새 문자열 하나로 계산되고 이름 msg가 그 값에 붙을 뿐이라(규칙 2), 5번 줄의 drink는 그대로 '커피'입니다.
문자열에 정수를 곱하면 그 문자열을 그만큼 되풀이해 잇습니다. 구분선을 그릴 때 씁니다.
print('-' * 10)
print('커피' * 2)
----------
커피커피2len()으로 글자 수 세기
len()은 문자열의 글자 수를 셉니다. 아래 두 줄은 무엇을 찍을까요?
print(len('안녕'))
print(len('커피 두 잔'))
실행 결과 보기
2
6예상과 다르면 그곳이 배울 곳입니다. 한글 한 자는 한 글자이고, 빈칸도 한 글자입니다. '커피 두 잔'은 한글 넷과 빈칸 둘이라 6입니다. 따옴표 사이에 아무것도 없는 빈 문자열 ''의 글자 수는 0입니다.
수에는 글자 수가 없습니다. 가격의 자릿수를 세려고 수를 그대로 넣으면 오류가 납니다.
price = 4000
print(len(price))
Traceback (most recent call last): File "main.py", line 2, in <module> print(len(price)) ~~~^^^^^^^TypeError: object of type 'int' has no len()맨 아래 줄은 'int(정수)에는 len()이 없다'는 뜻입니다. 2번 줄에서 멈췄고, 넣은 price가 1번 줄에서 수 4000에 붙었습니다. 자릿수가 필요하면 다음 절의 str()로 먼저 글자로 바꿉니다.
3수를 이으려면 str()
문자열에 수를 +로 바로 이을 수는 없습니다. '수와 글자' 레슨에서 본 TypeError가 납니다.
label = '나이: '
age = 20
print(label + age)
Traceback (most recent call last): File "main.py", line 3, in <module> print(label + age) ~~~~~~^~~~~TypeError: can only concatenate str (not "int") to strstr()은 값을 받아 그 값을 글자로 적은 새 문자열을 만듭니다. str(20)은 글자 두 개짜리 문자열 '20'입니다. 수를 이으려면 먼저 str()로 바꿉니다.
label = '나이: '
age = 20
print(label + str(age))
print(len(str(4000)))
나이: 20
4age는 그대로 수 20에 붙어 있습니다. str(age)가 만든 새 문자열 '20'이 label 뒤에 이어졌을 뿐입니다. 4번 줄은 4000을 글자 '4000'으로 바꾼 뒤 세어 4입니다.
예제
영수증의 주문 한 줄을 구분선 사이에 찍습니다. 구분선은 *, 수량 문구는 str()과 +로 만듭니다.
line = '-' * 12
item = '커피'
count = 2
cups = str(count) + '잔'
print(line)
print(item + ' ' + cups)
print(line)
------------
커피 2잔
------------4번 줄이 수 2를 글자 '2'로 바꿔 '잔'과 이어 '2잔'을 만듭니다. 6번 줄은 메뉴와 수량 사이에 빈칸 ' '을 직접 끼워 넣습니다. +는 빈칸을 저절로 넣지 않기 때문입니다.
자주 틀리는 곳
틀린 생각: 문자열 뒤에 수를 +로 바로 이을 수 있다.
'커피' 뒤에 2를 붙여 '커피2'를 만들고 싶을 때 그대로 잇기 쉽지만, +는 문자열과 수를 잇지 못합니다.
drink = '커피'
print(drink + 2)
Traceback (most recent call last): File "main.py", line 2, in <module> print(drink + 2) ~~~~~~^~~TypeError: can only concatenate str (not "int") to str2번 줄에서 글자에 붙은 drink 뒤에 수 2를 이으려다 TypeError로 멈췄습니다. drink + str(2)처럼 str()이 만든 글자 '2'를 이으면 '커피2'가 찍힙니다.
맞는 규칙: +는 문자열끼리만 이어서, 수를 만나면 TypeError로 멈춥니다. 수를 이으려면 str()로 그 수를 적은 새 문자열을 만들어 잇습니다.
틀린 생각: len()은 한글 한 자를 두 글자로 센다.
한글이 화면에서 영어 글자보다 넓어 보여 len('안녕')을 4로 쓰기 쉽지만, len()은 화면 폭을 재지 않습니다.
print(len('안녕'))
2'안녕'은 '안'과 '녕' 두 글자라 2입니다.
맞는 규칙: len()은 화면 폭이 아니라 글자 수를 세고, 키보드로 친 한글 한 자도 영어 한 자처럼 한 글자입니다.
틀린 생각: 빈칸은 글자가 아니다.
빈칸은 눈에 보이지 않아 글자 수에서 빼거나, +가 알아서 넣어 준다고 보기 쉽습니다. 그러나 빈칸도 한 글자입니다.
print(len('a b'))
print('커피' + '두 잔')
3
커피두 잔'a b'는 a, 빈칸, b 세 글자라 3입니다. 2번 줄은 '커피'와 '두 잔' 사이에 빈칸을 쓰지 않아 붙어 찍힙니다.
맞는 규칙: 빈칸도 한 글자라 len()이 세고, +는 따옴표 안에 쓴 글자만 잇습니다. 빈칸이 필요하면 따옴표 안에 직접 넣습니다.
확인 문제
1. 예제의 1번 줄을 line = '-=' * 4로 바꿨습니다. 무엇이 찍힐까요? 세 줄을 글자 그대로 쓰세요.
line = '-=' * 4
item = '커피'
count = 2
cups = str(count) + '잔'
print(line)
print(item + ' ' + cups)
print(line)
힌트
* 왼쪽에 있는 문자열의 글자 수를 봅니다.
정답
-=-=-=-=
커피 2잔
-=-=-=-='-=' * 4는 '-=' 두 글자를 네 번 이어 8글자가 됩니다. 가운데 줄은 그대로입니다.
흔한 오답은 ----====입니다. 글자마다 따로 되풀이한다고 본 것입니다. *는 문자열 전체를 통째로 되풀이합니다.
2. 다음 코드가 커피2잔을 찍도록 빈칸을 채우세요.
count = 2
cups = ____ + '잔'
print('커피' + cups)
힌트
1번 줄에서 count가 붙은 값의 종류를 보고, 2번 줄 + 오른쪽의 '잔'과 견줘 봅니다.
정답
str(count)입니다.
count = 2
cups = str(count) + '잔'
print('커피' + cups)커피2잔'2'를 직접 써도 같은 글자가 찍히지만, count가 3으로 바뀌면 따라 바뀌지 않습니다. 뒤에서 배울 f'{count}'도 count가 붙은 값으로 글자를 만들어 맞습니다.
흔한 오답은 count입니다. 수 2를 글자처럼 이을 수 있다고 본 것입니다(문자열과 수를 가리지 않는 생각). 그대로 이으면 TypeError로 멈춥니다.
3. 시험 점수를 문자열로 바꿔 다룹니다. 무엇이 찍힐까요? 두 줄을 글자 그대로 쓰세요.
score = 95
text = str(score)
print(text * 2)
print(len(text))
힌트
2번 줄의 str()이 만드는 값의 종류부터 정합니다.
정답
9595
2글자 '95'를 두 번 이어 '9595'이고, '95'는 두 글자라 len()이 2입니다.
흔한 오답은 첫 줄의 190입니다. text를 수로 본 것입니다(문자열과 수를 가리지 않는 생각).
아래 예제 코드의 4번 줄을 cups = str(count) * 2 + '잔'으로 바꾸면 찍히는 세 줄을 봅니다.
처음 펼 때 약 6MB를 받습니다.컴퓨터에서 해 보기
파이썬 3.14. Tab을 누르면 다음 단추나 칸으로 갑니다. 들여쓰기는 빈칸 네 개입니다. Enter는 앞줄 들여쓰기를 잇고, 콜론 뒤에서는 한 단계 더 들여 씁니다. Ctrl+Enter로 실행합니다.
'실행'을 누르면 여기에 나옵니다.
여기서 쓴 코드 · 내 예상은 저장하지도 운영자에게 보내지도 않습니다. 페이지를 새로 열면 처음 코드입니다.