
04. 문자열 다루기 - 텍스트와 친해지기
프로그래밍에서 숫자만큼 자주 다루는 것이 문자열이다. 이름, 주소, 이메일, 메시지... 대부분의 데이터는 결국 텍스트다. 문자열을 자유자재로 다루는 법을 익혀보자.
문자열 만들기
2편에서 잠깐 배웠지만, 다시 정리하고 넘어가자.
# 작은따옴표
name = '홍길동'
# 큰따옴표
greeting = "안녕하세요"
# 여러 줄 문자열 (삼중 따옴표)
poem = """장미는 빨갛고
제비꽃은 파랗고
파이썬은 재밌다"""
print(poem)
작은따옴표와 큰따옴표의 기능 차이는 없다. 다만 따옴표 안에 따옴표가 필요할 때 유용하다.
# 큰따옴표 안에 작은따옴표
msg1 = "그가 '안녕'이라고 말했다"
# 작은따옴표 안에 큰따옴표
msg2 = '그가 "안녕"이라고 말했다'
# 이스케이프 문자 사용
msg3 = "그가 \"안녕\"이라고 말했다"
인덱싱 - 한 글자 꺼내기
문자열은 글자들이 순서대로 나열된 것이다. 각 글자에는 번호(인덱스)가 붙어있다.

핵심: 인덱스는 0부터 시작한다!
text = "파이썬"
print(text[0]) # 파
print(text[1]) # 이
print(text[2]) # 썬
뒤에서부터 셀 수도 있다. 이때는 음수 인덱스를 사용한다.
text = "Python"
print(text[-1]) # n (맨 뒤)
print(text[-2]) # o (뒤에서 두 번째)
print(text[-6]) # P (맨 앞 = 뒤에서 여섯 번째)
💡 팁: 음수 인덱스는 뒤에서부터 세는 것이다.
-1이 마지막 글자,-2가 마지막에서 두 번째... 이런 식이다.
슬라이싱 - 문자열 잘라내기
인덱싱이 한 글자를 꺼내는 것이라면, 슬라이싱은 범위를 지정해서 여러 글자를 한꺼번에 꺼내는 것이다.

text = "Hello Python"
# text[시작:끝] - 시작부터 끝-1까지
print(text[0:5]) # Hello
print(text[6:12]) # Python
# 시작 생략 = 처음부터
print(text[:5]) # Hello
# 끝 생략 = 끝까지
print(text[6:]) # Python
# 둘 다 생략 = 전체 복사
print(text[:]) # Hello Python
⚠️ 주의:
text[0:5]는 인덱스 0, 1, 2, 3, 4까지다. 5는 포함하지 않는다! "시작은 포함, 끝은 미포함" - 이것만 기억하면 된다.
스텝(간격) 지정하기
세 번째 숫자로 간격을 지정할 수 있다.
text = "0123456789"
# 2칸씩 건너뛰기
print(text[::2]) # 02468
# 뒤집기!
print(text[::-1]) # 9876543210
문자열 뒤집기는 면접이나 코딩 테스트에서도 자주 나오는 패턴이다.
word = "파이썬"
print(word[::-1]) # 썬이파
문자열 연산
문자열도 +와 *로 연산할 수 있다. 다만 숫자와는 의미가 다르다.
# 문자열 연결 (이어붙이기)
first = "Hello"
last = "World"
print(first + " " + last) # Hello World
# 문자열 반복
print("하" * 3) # 하하하
print("-" * 30) # ------------------------------ (구분선 만들기)
# 실전 예시: 이름표 만들기
name = "홍길동"
print("=" * 20)
print(f" 이름: {name}")
print("=" * 20)
출력:
====================
이름: 홍길동
====================
주요 문자열 메서드
메서드(method)란 문자열에 붙어있는 기능이다. 문자열.메서드이름() 형태로 사용한다.

대소문자 변환
text = "Hello Python"
print(text.upper()) # HELLO PYTHON (전부 대문자)
print(text.lower()) # hello python (전부 소문자)
print(text.title()) # Hello Python (단어 첫 글자만 대문자)
공백 제거
사용자 입력을 받을 때 앞뒤에 불필요한 공백이 들어오는 경우가 많다. 이때 유용하다.
text = " Hello Python "
print(text.strip()) # "Hello Python" (양쪽 공백 제거)
print(text.lstrip()) # "Hello Python " (왼쪽만)
print(text.rstrip()) # " Hello Python" (오른쪽만)
찾기와 바꾸기
text = "파이썬은 재밌다. 파이썬을 열심히 공부하자."
# 찾기
print(text.find("파이썬")) # 0 (처음 등장하는 위치)
print(text.find("자바")) # -1 (없으면 -1)
print(text.count("파이썬")) # 2 (등장 횟수)
# 바꾸기
print(text.replace("파이썬", "Python"))
# Python은 재밌다. Python을 열심히 공부하자.
나누기와 합치기
# split: 문자열을 쪼개서 리스트로
sentence = "사과,바나나,포도,수박"
fruits = sentence.split(",")
print(fruits) # ['사과', '바나나', '포도', '수박']
# 공백 기준으로 나누기
words = "Hello Python World".split()
print(words) # ['Hello', 'Python', 'World']
# join: 리스트를 합쳐서 문자열로
result = " - ".join(fruits)
print(result) # 사과 - 바나나 - 포도 - 수박
시작/끝 확인
filename = "report.pdf"
print(filename.startswith("report")) # True
print(filename.endswith(".pdf")) # True
print(filename.endswith(".xlsx")) # False
구성 확인
print("12345".isdigit()) # True (숫자로만 구성?)
print("hello".isalpha()) # True (글자로만 구성?)
print("hello123".isalnum()) # True (글자+숫자로만 구성?)
print(" ".isspace()) # True (공백으로만 구성?)
문자열 메서드 정리표
| 분류 | 메서드 | 설명 |
|---|---|---|
| 대소문자 | upper() | 전부 대문자로 |
| lower() | 전부 소문자로 | |
| title() | 단어 첫 글자만 대문자 | |
| 공백 제거 | strip() | 양쪽 공백 제거 |
| lstrip() | 왼쪽 공백 제거 | |
| rstrip() | 오른쪽 공백 제거 | |
| 찾기/바꾸기 | find() | 문자 위치 찾기 (없으면 -1) |
| count() | 등장 횟수 세기 | |
| replace(a, b) | a를 b로 바꾸기 | |
| 나누기/합치기 | split() | 문자열 → 리스트로 쪼개기 |
| join() | 리스트 → 문자열로 합치기 | |
| 시작/끝 확인 | startswith() | 특정 문자열로 시작하는지 |
| endswith() | 특정 문자열로 끝나는지 |
문자열 포매팅
변수 값을 문자열에 끼워넣는 방법. 세 가지가 있는데, f-string이 가장 편하고 최근 방식이다.
name = "홍길동"
age = 25
score = 98.5
# 방법 1: f-string (추천!)
print(f"이름: {name}, 나이: {age}세")
# 방법 2: format() 메서드
print("이름: {}, 나이: {}세".format(name, age))
# 방법 3: % 연산자 (옛날 방식)
print("이름: %s, 나이: %d세" % (name, age))
f-string 활용법
f-string 안에서는 계산식도 사용할 수 있다.
price = 15000
quantity = 3
print(f"단가: {price}원")
print(f"수량: {quantity}개")
print(f"합계: {price * quantity}원")
print(f"부가세 포함: {price * quantity * 1.1:.0f}원")
출력:
단가: 15000원
수량: 3개
합계: 45000원
부가세 포함: 49500원
💡 팁:
:.0f는 소수점 이하를 표시하지 않겠다는 뜻이다.:.2f면 소수점 둘째 자리까지 표시한다. 가격 같은 것을 깔끔하게 출력할 때 유용하다.
문자열은 변경할 수 없다 (불변)
파이썬의 문자열은 한번 만들면 수정이 불가능하다. 이걸 "불변(immutable)"이라고 한다.
text = "Hello"
# text[0] = "h" # TypeError! 문자열은 수정 불가
# 새 문자열을 만들어야 한다
text = "h" + text[1:]
print(text) # hello
replace() 같은 메서드도 원본을 바꾸는 게 아니라 새 문자열을 만들어서 돌려주는 것이다.
original = "Hello"
new = original.replace("H", "h")
print(original) # Hello (원본 그대로!)
print(new) # hello (새로 만들어진 문자열)
직접 해보기
문제 1. 이메일 주소에서 아이디와 도메인을 분리해보자.
email = "python@example.com"
# 결과: 아이디 = python, 도메인 = example.com
문제 2. 주어진 문자열을 뒤집고, 모두 대문자로 바꿔보자.
text = "Hello Python"
# 결과: NOHTYP OLLEH
문제 3. 다음 문장에서 "파이썬"이 몇 번 나오는지 세고, 전부 "Python"으로 바꿔보자.
text = "파이썬은 쉽다. 파이썬은 강력하다. 파이썬을 배우자."
문제 4. f-string을 사용해서 아래와 같이 출력해보자.
========== 성적표 ==========
이름: 홍길동
국어: 90점
영어: 85점
수학: 95점
평균: 90.0점
============================
정답 보기
# 문제 1
email = "python@example.com"
parts = email.split("@")
print(f"아이디 = {parts[0]}, 도메인 = {parts[1]}")
# 문제 2
text = "Hello Python"
result = text[::-1].upper()
print(result) # NOHTYP OLLEH
# 문제 3
text = "파이썬은 쉽다. 파이썬은 강력하다. 파이썬을 배우자."
print(f"파이썬 등장 횟수: {text.count('파이썬')}번")
print(text.replace("파이썬", "Python"))
# 문제 4
name = "홍길동"
kor, eng, math = 90, 85, 95
avg = (kor + eng + math) / 3
print("=" * 28)
print(f"{'성적표':^12}")
print("=" * 28)
print(f"이름: {name}")
print(f"국어: {kor}점")
print(f"영어: {eng}점")
print(f"수학: {math}점")
print(f"평균: {avg}점")
print("=" * 28)
오늘의 정리
| 항목 | 내용 |
|---|---|
| 인덱싱 | text[0], text[-1] - 한 글자 꺼내기 |
| 슬라이싱 | text[시작:끝] - 범위로 잘라내기 (끝은 미포함) |
| 문자열 연산 | + (연결), * (반복) |
| 주요 메서드 | upper, lower, strip, find, replace, split, join |
| 포매팅 | f"값은 {변수}" - f-string 추천! |
| 불변성 | 문자열은 수정 불가. 새로 만들어야 한다 |
다음 편 예고: 입력과 출력 - 사용자와 대화하기
지금까지는 코드에 직접 값을 적었다. 다음 시간에는 input()으로 사용자에게 값을 입력받고, print()를 더 다양하게 활용하는 방법을 배운다.
태그: 파이썬 Python 파이썬독학 문자열 string 슬라이싱 인덱싱 split join format 파이썬기초 IT교육
'Python' 카테고리의 다른 글
| 06. 주석과 코딩 스타일 - 읽기 좋은 코드 만들기 (2) | 2026.02.21 |
|---|---|
| 05. 입력과 출력 - 사용자와 대화하기 (0) | 2026.02.21 |
| 03. 연산자 총정리 - 계산하고 비교하고 판단하기 (0) | 2026.02.21 |
| 02. 변수와 자료형 - 데이터를 담는 그릇 (0) | 2026.02.21 |
| 01. 파이썬, 왜 배우기로 했을까 (0) | 2026.02.21 |
댓글