문자열의 글자에는 0부터 시작하는 자리 번호(인덱스, index)가 붙어 있습니다. s[0]처럼 번호로 한 글자를 꺼내고, s[1:3]처럼 시작과 끝 번호를 주면 그 사이를 잘라 냅니다. 끝 번호의 글자는 들어가지 않습니다.
날짜 '2026-10-15'에서 월만 떼어 내거나, 전화번호의 가운데 네 자리를 가리려면 글자의 자리를 짚어 꺼내야 합니다. 자리 번호는 1이 아니라 0부터 세고, 자르기는 끝 번호를 빼고 꺼냅니다. 이 두 가지를 놓치면 한 글자씩 어긋난 결과가 나옵니다.
1자리 번호는 0부터
문자열 'python'의 글자마다 앞에서부터 0, 1, 2, … 번호가 붙습니다. 번호는 '첫 글자에서 몇 칸 떨어져 있나'를 셉니다. 첫 글자는 0칸 떨어져 있어 0번입니다.
| 글자 | p | y | t | h | o | n |
|---|---|---|---|---|---|---|
| 번호 | 0 | 1 | 2 | 3 | 4 | 5 |
| 뒤에서 | -6 | -5 | -4 | -3 | -2 | -1 |
이름 뒤 대괄호에 번호를 넣으면 그 자리의 글자 하나를 꺼냅니다.
s = 'python'
print(s[0])
print(s[1])
print(s[5])
p
y
n여섯 글자의 마지막 번호는 6이 아니라 5입니다. 마지막 번호는 늘 len(s) - 1입니다.
2음수 번호는 뒤에서 센다
번호 앞에 -를 붙이면 뒤에서부터 셉니다. 마지막 글자가 -1, 그 앞이 -2입니다. 0은 이미 첫 글자라 뒤에서는 -1부터 셉니다.
s = 'python'
print(s[-1])
print(s[-2])
print(s[len(s) - 1])
n
o
ns[-1]과 s[len(s) - 1]은 같은 글자입니다. 길이를 몰라도 마지막 글자를 꺼낼 수 있어 -1을 많이 씁니다.
3자르기 [시작:끝] — 끝 자리는 빠진다
대괄호 안에 시작:끝을 쓰면 시작 번호부터 끝 번호 바로 앞까지 잘라 새 문자열을 만듭니다. 이것을 자르기라 하고, 자료에 따라 슬라이싱(slicing)이라고도 부릅니다. 아래 코드는 무엇을 찍을까요?
s = 'python'
print(s[1:3])
실행 결과 보기
yt예상과 다르면 그곳이 배울 곳입니다. [1:3]은 1번 y와 2번 t만 꺼냅니다. 끝 번호 3의 h는 들어가지 않습니다. 꺼낸 글자 수는 끝 − 시작, 곧 3 − 1 = 2입니다.
시작이나 끝을 비워 두면 '처음부터'나 '끝까지'가 됩니다. 시작에 음수를 쓰면 뒤에서 센 자리부터입니다.
s = 'python'
print(s[:2])
print(s[2:])
print(s[-3:])
print(s[:2] + s[2:])
py
thon
hon
pythons[:2]와 s[2:]는 2번 자리에서 정확히 갈려, 둘을 이으면 처음 문자열이 됩니다. 끝 번호를 빼기 때문에 겹치거나 빠지는 글자가 없습니다.
자르기는 새 문자열을 만들 뿐입니다. 이름 s는 그대로 'python'에 붙어 있습니다.
4없는 자리를 짚으면
글자 하나를 꺼낼 때 없는 번호를 쓰면 오류가 납니다.
s = 'python'
print(s[10])
Traceback (most recent call last): File "main.py", line 2, in <module> print(s[10]) ~^^^^IndexError: string index out of range맨 아래 줄은 '문자열의 자리 번호가 범위를 벗어났다'는 뜻입니다. 'python'의 번호는 앞에서 0~5, 뒤에서 -1~-6이라 10은 없는 자리입니다. 2번 줄의 ^ 표시가 [10]을 가리킵니다.
자르기는 범위를 벗어나도 오류가 나지 않습니다. 있는 글자까지만 꺼내고, 하나도 없으면 빈 문자열 ''을 만듭니다.
s = 'python'
print(s[4:10])
print(len(s[10:]))
on
0예제
전화번호의 가운데 네 자리를 별표로 가립니다. 앞 네 글자와 뒤 네 글자를 잘라 f-문자열로 잇습니다.
phone = '010-1234-5678'
head = phone[:4]
tail = phone[-4:]
masked = f'{head}****-{tail}'
print(masked)
print(phone)
010-****-5678
010-1234-56782번 줄의 phone[:4]는 0~3번 '010-'이고, 3번 줄의 phone[-4:]는 뒤에서 네 글자 '5678'입니다. 4번 줄이 그 사이에 '****-'를 끼워 새 문자열을 만듭니다.
6번 줄처럼 phone은 그대로입니다. 자르기와 f-문자열은 새 문자열을 만들 뿐 원래 문자열을 바꾸지 않습니다.
자주 틀리는 곳
틀린 생각: [1:3]은 3번 자리까지 꺼낸다.
'1부터 3까지'로 읽으면 3번 글자도 드는 것 같지만, 자르기는 끝 번호의 글자를 넣지 않습니다.
s = 'python'
print(s[1:3])
print(s[1:4])
yt
yth[1:3]은 1번 y와 2번 t 두 글자, [1:4]는 3번 h까지 세 글자입니다. 반복 단원의 range(1, 4)도 같은 규칙으로 4를 넣지 않습니다.
맞는 규칙: 자르기는 끝 번호 바로 앞에서 멈춥니다. 그래서 끝 번호는 꺼낼 마지막 글자의 다음 번호로 쓰고, 끝까지 꺼낼 때는 비웁니다.
틀린 생각: 첫 글자의 자리 번호는 1이다.
글자를 셀 때는 하나, 둘 하고 1부터 세니 첫 글자가 1번 같지만, 자리 번호는 0부터입니다.
s = 'python'
print(s[1])
print(s[0])
y
p[1]은 둘째 글자 y를 꺼내고, 첫 글자 p는 [0]으로 꺼냅니다.
맞는 규칙: 자리 번호는 첫 글자에서 몇 칸 떨어져 있는지를 세어 첫 글자가 0번입니다. 첫 글자는 [0], 마지막 글자는 [-1]로 꺼냅니다.
틀린 생각: 자르기도 없는 자리를 짚으면 오류로 멈춘다.
글자 하나를 꺼낼 때 없는 번호가 오류였으니 자르기도 그럴 것 같지만, 4절처럼 s[10]은 IndexError로 멈추고 s[10:]은 빈 문자열을 만듭니다.
맞는 규칙: 자르기는 범위를 벗어나도 있는 글자까지만 꺼내고, 하나도 없으면 빈 문자열을 만듭니다. 오류로 멈추는 것은 글자 하나를 번호로 꺼낼 때뿐이니, 그때만 있는 자리인지 봅니다.
확인 문제
1. 예제의 1번 줄을 phone = '010-9876-5432'로 바꿨습니다. 무엇이 찍힐까요? 두 줄을 글자 그대로 쓰세요.
phone = '010-9876-5432'
head = phone[:4]
tail = phone[-4:]
masked = f'{head}****-{tail}'
print(masked)
print(phone)
힌트
글자마다 번호를 적어 보세요. 6번 줄이 찍는 phone이 어느 값에 붙어 있는지도 보세요.
정답
010-****-5432
010-9876-5432앞 네 글자 '010-'와 뒤 네 글자 '5432' 사이에 '****-'가 들어갑니다. phone은 바뀌지 않아 둘째 줄은 처음 번호 그대로입니다.
흔한 오답은 둘째 줄도 010-****-5432로 쓴 답입니다. 가린 새 문자열을 만들면 phone도 그 값으로 바뀐다고 본 것입니다. 자르기와 f-문자열은 새 문자열을 만들 뿐 phone은 그대로입니다.
2. 날짜에서 월 '10'만 꺼내 찍도록 빈칸에 들어갈 자르기 번호를 쓰세요.
date = '2026-10-15'
print(date[____])
힌트
글자마다 번호를 적어 보세요. '10'의 1은 몇 번 자리이고, 끝 번호는 어디의 번호여야 할까요?
정답
5:7입니다.
date = '2026-10-15'
print(date[5:7])10'1'이 5번, '0'이 6번이라 6번까지 꺼내려면 끝 번호는 그다음 7입니다.
2절의 뒤에서 센 번호로 -5:-3이라 써도 '10'을 꺼냅니다. 앞뒤를 섞은 5:-3과 -5:7도 같습니다.
흔한 오답은 5:6입니다. 끝 번호의 글자도 든다고 본 것입니다(끝도 든다는 생각). 5:6은 '1' 한 글자만 꺼냅니다.
3. 학번 앞 네 자리는 입학 연도, 그다음 세 자리는 학과 번호입니다. 무엇이 찍힐까요? 세 줄을 글자 그대로 쓰세요.
sid = '20261057'
year = sid[:4]
num = sid[4:7]
print(year)
print(num)
print(sid[-1])
힌트
여덟 글자에 0~7번을 붙여 보세요. [4:7]의 끝 번호 7이 어느 글자인지도 보세요.
정답
2026
105
7[:4]는 0~3번 '2026', [4:7]은 4~6번 '105', [-1]은 마지막 글자 '7'입니다.
흔한 오답은 둘째 줄의 1057입니다. 7번 자리까지 든다고 본 것입니다(끝도 든다는 생각).
아래 3절 코드의 2번 줄 [1:3]을 [2:5]로 바꾸면 찍히는 글자를 봅니다.
처음 펼 때 약 6MB를 받습니다.컴퓨터에서 해 보기
파이썬 3.14. Tab을 누르면 다음 단추나 칸으로 갑니다. 들여쓰기는 빈칸 네 개입니다. Enter는 앞줄 들여쓰기를 잇고, 콜론 뒤에서는 한 단계 더 들여 씁니다. Ctrl+Enter로 실행합니다.
'실행'을 누르면 여기에 나옵니다.
여기서 쓴 코드 · 내 예상은 저장하지도 운영자에게 보내지도 않습니다. 페이지를 새로 열면 처음 코드입니다.