포스트

[Python 100일 챌린지] Day 6 - 문자열 다루기 (str)

[Python 100일 챌린지] Day 6 - 문자열 다루기 (str)

실무에서 가장 많이 다루는 게 문자열이에요! 사용자 입력 처리, API 데이터 파싱, 로그 분석, CSV 파일 정제… 현업에서 매일 마주치는 작업들이에요. 😊 upper(), lower(), split(), replace(), f-string… 이런 거 잘 쓰면 코드가 정말 간결해집니다. 오늘 내용 잘 봐두세요!

(15분 완독 ⭐⭐)

🎯 오늘의 학습 목표

📚 사전 지식


🎯 학습 목표 1: 문자열(str) 만들기

한 줄 설명

문자열 = 글자들의 모음 (텍스트)

Python에서 문자열은 따옴표로 감싼 텍스트입니다.

문자열 만들기

1
2
3
4
5
6
7
8
9
# 큰따옴표
name = "홍길동"

# 작은따옴표
city = '서울'

# 둘 다 똑같습니다!
message1 = "안녕하세요"
message2 = '안녕하세요'

💡 큰따옴표와 작은따옴표는 같은 기능입니다!

여러 줄 문자열

긴 텍스트는 세 개의 따옴표로

1
2
3
4
5
6
7
8
9
10
11
# 세 개의 큰따옴표
message = """안녕하세요.
여러 줄의
텍스트를 쓸 수 있습니다."""

# 세 개의 작은따옴표
message2 = '''첫 번째 줄
두 번째 줄
세 번째 줄'''

print(message)

출력:

1
2
3
안녕하세요.
여러 줄의
텍스트를 쓸 수 있습니다.

🎯 학습 목표 2: 문자열 연결하기

덧셈 (+)으로 연결

1
2
3
4
5
6
7
8
9
first = ""
last = "길동"

name = first + last
print(name)  # 홍길동

# 띄어쓰기 추가
name = first + " " + last
print(name)  # 홍 길동

반복 (*)하기

1
2
3
4
star = ""
line = star * 5

print(line)  # ★★★★★

여러 개 한 번에

1
2
3
4
5
6
7
8
9
first = ""
last = "길동"
city = "서울"

# 쉼표로 연결 (자동으로 띄어쓰기 추가)
print(first, last, city)  # 홍 길동 서울

# +로 연결 (띄어쓰기 없음)
print(first + last + city)  # 홍길동서울

🎯 학습 목표 3: 문자열 메서드 사용하기

대소문자 변환

1
2
3
4
5
6
7
8
9
10
11
12
13
text = "Hello Python"

# 모두 대문자로
upper = text.upper()
print(upper)  # HELLO PYTHON

# 모두 소문자로
lower = text.lower()
print(lower)  # hello python

# 첫 글자만 대문자로
title = text.title()
print(title)  # Hello Python

공백 제거

1
2
3
4
5
6
7
8
9
10
11
12
13
text = "   안녕하세요   "

# 양쪽 공백 제거
clean = text.strip()
print(clean)  # "안녕하세요"

# 왼쪽 공백만 제거
left = text.lstrip()
print(left)  # "안녕하세요   "

# 오른쪽 공백만 제거
right = text.rstrip()
print(right)  # "   안녕하세요"

문자열 나누기

1
2
3
4
5
6
7
8
9
# 공백으로 나누기
text = "사과 바나나 포도"
fruits = text.split()
print(fruits)  # ['사과', '바나나', '포도']

# 쉼표로 나누기
text2 = "서울,부산,대구"
cities = text2.split(",")
print(cities)  # ['서울', '부산', '대구']

문자열 찾기

1
2
3
4
5
6
7
8
9
10
11
12
13
text = "Python은 재미있어요"

# 있는지 확인
print("Python" in text)     # True
print("Java" in text)       # False

# 위치 찾기
pos = text.find("재미")
print(pos)  # 7 (7번째 위치에 있음)

# 없으면 -1
pos2 = text.find("어려")
print(pos2)  # -1

문자열 바꾸기

1
2
3
4
5
text = "Python은 어려워요"

# 바꾸기
new_text = text.replace("어려워요", "재미있어요")
print(new_text)  # Python은 재미있어요

🎯 학습 목표 4: 문자열 포맷팅 배우기

f-string (추천!)

1
2
3
4
5
6
7
8
9
name = "홍길동"
age = 25

# f-string 사용
message = f"이름: {name}, 나이: {age}"
print(message)  # 이름: 홍길동, 나이: 25

# 계산도 가능
print(f"내년 나이: {age + 1}")  # 내년 나이: 26

.format() 메서드

1
2
3
4
5
name = "홍길동"
age = 25

message = "이름: {}, 나이: {}".format(name, age)
print(message)  # 이름: 홍길동, 나이: 25

% 포맷팅 (옛날 방식)

1
2
3
4
5
name = "홍길동"
age = 25

message = "이름: %s, 나이: %d" % (name, age)
print(message)  # 이름: 홍길동, 나이: 25

💡 f-string을 추천합니다!

  • 가장 최신 방식
  • 읽기 쉽고 간결
  • 빠른 속도

🎯 학습 목표 5: 문자열 다루기 심화

줄바꿈하기

문자열 안에서 줄을 바꾸는 방법:

1
2
3
4
5
6
7
8
9
10
11
# 방법 1: \n 사용 (권장)
print("첫 줄\n두 번째 줄")

# 방법 2: 여러 번 print
print("첫 줄")
print("두 번째 줄")

# 방법 3: 세 개 따옴표
text = """첫 줄
두 번째 줄"""
print(text)

출력:

1
2
첫 줄
두 번째 줄

문자열 길이 구하기

len() 함수로 문자열의 길이(글자 수)를 알 수 있습니다:

1
2
3
4
5
6
7
text = "안녕하세요"
length = len(text)
print(f"길이: {length}")  # 길이: 5

# 영어도 동일
name = "Python"
print(len(name))  # 6

특정 문자 개수 세기

.count() 메서드로 특정 문자가 몇 개 있는지 셀 수 있습니다:

1
2
3
4
5
6
7
text = "banana"
count = text.count("a")
print(f"'a'의 개수: {count}")  # 'a'의 개수: 3

# 단어도 셀 수 있음
sentence = "Python is fun. Python is easy."
print(sentence.count("Python"))  # 2

문자열 슬라이싱 (미리보기)

문자열의 일부분을 잘라내는 방법입니다. Day 7에서 자세히 배웁니다!

1
2
3
4
5
6
7
8
9
10
11
text = "Python"

# [시작:끝] - 시작 위치부터 끝 위치 전까지
print(text[0:3])  # Pyt (0, 1, 2번째)
print(text[2:5])  # tho (2, 3, 4번째)

# [시작:] - 시작 위치부터 끝까지
print(text[3:])   # hon (3번째부터 끝까지)

# [:끝] - 처음부터 끝 위치 전까지
print(text[:3])   # Pyt (처음부터 2번째까지)

실용 예제:

1
2
3
4
5
6
7
8
phone = "01012345678"

# 전화번호를 구분해서 자르기
area = phone[0:3]     # 010
front = phone[3:7]    # 1234
back = phone[7:]      # 5678

print(f"{area}-{front}-{back}")  # 010-1234-5678

⚠️ 주의: 인덱스는 0부터 시작합니다!

  • text[0] = 첫 번째 글자
  • text[1] = 두 번째 글자

💻 실습 예제

예제 1: 자기소개 만들기

1
2
3
4
5
6
7
8
9
10
11
12
name = "홍길동"
age = "25"
job = "학생"

# 방법 1: 쉼표로 연결
print("이름:", name)
print("나이:", age)
print("직업:", job)

# 방법 2: +로 연결
intro = "이름: " + name + ", 나이: " + age + ", 직업: " + job
print(intro)

출력:

1
2
3
4
이름: 홍길동
나이: 25
직업: 학생
이름: 홍길동, 나이: 25, 직업: 학생

예제 2: 이메일 만들기

1
2
3
4
5
username = "hong"
domain = "example.com"

email = username + "@" + domain
print(email)  # hong@example.com

예제 3: 구분선 만들기

1
2
3
4
5
6
7
8
# 화려한 구분선
line1 = "=" * 30
line2 = "-" * 30
line3 = "*" * 30

print(line1)
print("중요한 메시지")
print(line1)

출력:

1
2
3
==============================
중요한 메시지
==============================

💡 실전 팁 & 주의사항

💡 Tip 1: 따옴표 안에 따옴표

1
2
3
4
5
6
7
8
9
10
# ❌ 에러 발생!
message = "He said "Hello""

# ✅ 해결 방법 1: 다른 따옴표 사용
message = "He said 'Hello'"

# ✅ 해결 방법 2: 역슬래시(\) 사용
message = "He said \"Hello\""

print(message)  # He said "Hello"

💡 Tip 2: 문자열과 숫자 합치기

1
2
3
4
5
6
7
8
9
10
11
12
13
name = "홍길동"
age = 25

# ❌ 에러 발생!
message = name + "의 나이는 " + age

# ✅ 해결 방법 1: str()로 변환
message = name + "의 나이는 " + str(age)

# ✅ 해결 방법 2: f-string 사용 (추천)
message = f"{name}의 나이는 {age}"

print(message)  # 홍길동의 나이는 25

💡 Tip 3: 문자열은 변경 불가

1
2
3
4
5
6
7
8
text = "Python"

# ❌ 에러 발생! (문자열은 수정 불가)
text[0] = "J"

# ✅ 새로운 문자열 만들기
new_text = "J" + text[1:]
print(new_text)  # Jython

🧪 연습 문제

문제 1: 전화번호 포맷

전화번호를 보기 좋게 만드세요.

  • 입력: “01012345678”
  • 출력: “010-1234-5678”
💡 힌트

위에서 배운 문자열 슬라이싱을 사용하세요!

  • phone[0:3] - 010
  • phone[3:7] - 1234
  • phone[7:] - 5678
  • -로 연결
✅ 정답
1
2
3
4
5
6
7
8
9
phone = "01012345678"

# 방법 1: 슬라이싱
formatted = phone[0:3] + "-" + phone[3:7] + "-" + phone[7:]
print(formatted)  # 010-1234-5678

# 방법 2: f-string
formatted2 = f"{phone[0:3]}-{phone[3:7]}-{phone[7:]}"
print(formatted2)  # 010-1234-5678

문제 2: 이름 꾸미기

자신의 이름을 별(★)과 선(=)으로 예쁘게 꾸며서 출력하세요.

요구사항:

  • 별 5개를 첫 줄과 마지막 줄에 출력
  • 긴 선(=을 20개)으로 구분선 만들기
  • 가운데에 “OOO님 환영합니다!” 메시지 출력
💡 힌트
  • *를 사용해서 별을 반복: "★" * 5
  • =를 반복해서 선 만들기: "=" * 20
  • f-string으로 이름 넣기: f"{name}님 환영합니다!"
✅ 정답
1
2
3
4
5
6
7
8
9
10
11
name = "홍길동"

# 별로 꾸미기
star = "" * 5
line = "=" * 20

print(star)
print(line)
print(f"   {name}님 환영합니다!")
print(line)
print(star)

출력:

1
2
3
4
5
★★★★★
====================
   홍길동님 환영합니다!
====================
★★★★★

문제 3: 대소문자 바꾸기

다음 영어 문장 "Hello Python World"을 여러 가지 방법으로 변환해서 출력하세요.

출력해야 할 것:

  1. 원본 문장
  2. 모두 대문자로 변환
  3. 모두 소문자로 변환
  4. 각 단어의 첫 글자만 대문자로 변환
💡 힌트

문자열 메서드를 사용하세요:

  • .upper() - 모두 대문자로
  • .lower() - 모두 소문자로
  • .title() - 각 단어의 첫 글자만 대문자로
✅ 정답
1
2
3
4
5
6
text = "Hello Python World"

print("원본:", text)
print("대문자:", text.upper())
print("소문자:", text.lower())
print("단어 첫 글자만 대문자:", text.title())

출력:

1
2
3
4
원본: Hello Python World
대문자: HELLO PYTHON WORLD
소문자: hello python world
단어 첫 글자만 대문자: Hello Python World

📝 오늘 배운 내용 정리

  1. 문자열 만들기: " 또는 '로 감싸기
  2. 연결하기: + (연결), * (반복)
  3. 메서드: upper(), lower(), strip(), split(), replace()
  4. 포맷팅: f-string이 가장 편함!
  5. len(): 문자열 길이 구하기

🔗 관련 자료


📚 이전 학습

Day 5: 숫자 다루기

어제는 int와 float으로 숫자를 다루는 방법을 배웠습니다!

📚 다음 학습

Day 7: 리스트 다루기 (list) ⭐⭐

내일은 여러 개의 데이터를 한 번에 담는 리스트를 배웁니다!


“늦었다고 생각할 때가 가장 빠른 시기입니다!” 🚀

Day 6/100 Phase 1: Python 시작하기 #100DaysOfPython
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.