04 — LECTURE ·PY-03 ·2026.02.03

03. 문자열

문자열 인덱싱·연산·메서드·포맷팅을 다룹니다.

목차
  1. 학습 목표
  2. 1. 문자열이란?
  3. 정의
  4. 예시
  5. 주의
  6. 2. 문자열 인덱싱과 슬라이싱
  7. 인덱싱 (Indexing)
  8. 슬라이싱 (Slicing)
  9. 인덱스 구조
  10. 실습 3-1. 인덱싱과 슬라이싱
  11. 3. 문자열 연산
  12. + — 문자열 연결 (Concatenation)
  13. * — 문자열 반복
  14. len() — 문자열 길이
  15. 실습 3-2. 문자열 연산
  16. 문자열 + 숫자 연결 시 오류
  17. 4. 문자열 메서드
  18. 주요 메서드
  19. 실습 3-3. 문자열 메서드 활용
  20. 5. 문자열 포맷팅
  21. 방법 1 : % 기호 (전통 방식)
  22. 실습 3-4. % 포맷팅
  23. 방법 2 : format() 메서드
  24. 실습 3-5. format() 메서드
  25. 방법 3 : f-string (권장)
  26. 실습 3-6. f-string (권장)
  27. 6. print() 출력 옵션
  28. 주요 키워드
  29. 실습 3-7. print() 옵션 활용
  30. 연습 문제

스포츠 데이터로 배우는 파이썬 기초

학습 목표

  • 문자열의 생성과 기본 연산 (+, *)
  • 인덱싱과 슬라이싱으로 원하는 글자 추출
  • 주요 문자열 메서드 활용 (.upper(), .split(), .replace())
  • 문자열 포맷팅 3가지 방식 비교 (%, format(), f-string)

1. 문자열이란?

정의

  • 하나 또는 여러 개의 문자로 구성된 데이터
  • 작은따옴표(') 또는 큰따옴표(")로 감쌈

예시

'a'  'abc'  'I am happy!'  "안녕하세요"  '010-1234-5678'  '30'

주의

  • 30 (숫자)과 '30' (문자열)은 완전히 다름
  • 키보드로 입력받은 데이터는 항상 문자열

2. 문자열 인덱싱과 슬라이싱

인덱싱 (Indexing)

  • 문자열의 각 글자는 고유한 번호(인덱스)를 가짐
  • 0번부터 시작
  • 음수 인덱스 : 뒤에서부터 카운트 (-1 = 마지막)

슬라이싱 (Slicing)

  • 변수명[start:end] → start부터 end-1까지 추출
  • start 생략 → 처음부터
  • end 생략 → 끝까지

인덱스 구조

 S  o  n     H  e  u  n  g  -  m  i  n
 0  1  2  3  4  5  6  7  8  9 10 11 12
-13-12-11-10 -9 -8 -7 -6 -5 -4 -3 -2 -1

실습 3-1. 인덱싱과 슬라이싱

name = 'Son Heung-min'

# 인덱싱 (한 글자)
print(name[0])      # S (첫 글자)
print(name[-1])     # n (마지막 글자)

# 슬라이싱 (범위 추출)
print(name[0:3])    # Son (0~2번)
print(name[4:9])    # Heung (4~8번)
print(name[4:])     # Heung-min (4번부터 끝까지)

# split() — 공백 기준으로 분리 → 리스트 반환
first, last = name.split()
print('성:', first, '/ 이름:', last)
S
n
Son
Heung
Heung-min
성: Son / 이름: Heung-min

3. 문자열 연산

+ — 문자열 연결 (Concatenation)

  • 두 문자열을 이어붙임

* — 문자열 반복

  • 같은 문자열을 n번 반복

len() — 문자열 길이

  • 공백, 특수문자 포함 전체 글자 수

실습 3-2. 문자열 연산

# 문자열 연결 (+)
name = '홍지수'
greet = name + '님 안녕하세요!'
print(greet)

# 문자열 반복 (*)
hello = '안녕 ' * 5
print(hello)

# 문자열 길이 (len)
a = '쥐구멍에 볕들 날 있다.'
print('길이:', len(a))
홍지수님 안녕하세요!
안녕 안녕 안녕 안녕 안녕 
길이: 13

문자열 + 숫자 연결 시 오류

  • 문자열과 숫자는 직접 + 불가 → TypeError
  • 해결 : str() 로 숫자를 문자열로 변환
# 오류 발생 케이스
# eng = 80
# result = '영어점수: ' + eng + '점'   # TypeError!

# 해결: str()로 변환
eng = 80
result = '영어점수: ' + str(eng) + '점'
print(result)
영어점수: 80점

4. 문자열 메서드

주요 메서드

메서드기능예시
.upper()대문자 변환'abc'.upper()'ABC'
.lower()소문자 변환'ABC'.lower()'abc'
.split()공백 기준 분리'a b c'.split()['a','b','c']
.replace(a, b)a를 b로 교체'cat'.replace('c','b')'bat'
.count(x)x 등장 횟수'aabba'.count('a')3

실습 3-3. 문자열 메서드 활용

player = 'Son Heung-min'
team = 'Tottenham Hotspur'

# 대문자 변환
print(team.upper())

# 리스트로 분리
print(player.split())

# 문자 교체
print(team.replace('Hotspur', 'FC'))

# 응원 문구 만들기
cheer = 'Go! ' * 3 + team
print(cheer)
TOTTENHAM HOTSPUR
['Son', 'Heung-min']
Tottenham FC
Go! Go! Go! Tottenham Hotspur

5. 문자열 포맷팅

방법 1 : % 기호 (전통 방식)

  • %s → 문자열, %d → 정수, %f → 실수
  • %.2f → 소수점 둘째 자리까지
  • 여러 값 : % (값1, 값2) 괄호 사용

실습 3-4. % 포맷팅

name = 'Son'
goals = 23
avg = 0.657142

print('선수명: %s' % name)
print('이번 시즌 득점: %d골' % goals)
print('경기당 평균 득점: %.2f' % avg)
print('%s 선수는 %d골, 평균 %.2f를 기록' % (name, goals, avg))
선수명: Son
이번 시즌 득점: 23골
경기당 평균 득점: 0.66
Son 선수는 23골, 평균 0.66를 기록

방법 2 : format() 메서드

  • "{}".format(값) — 중괄호 자리에 값 삽입
  • 서식 지정 : "{:.2f}".format(값)

실습 3-5. format() 메서드

name = 'Son'
goals = 23
matches = 35

msg = "선수: {}, 득점: {}".format(name, goals)
print(msg)

print("평균: {:.2f}".format(goals / matches))
선수: Son, 득점: 23
평균: 0.66

방법 3 : f-string (권장)

  • f"텍스트 {변수}" — 가장 직관적이고 빠름
  • 중괄호 안에서 연산·서식 모두 가능
  • Python 3.6 이상
비교format()f-string
구문"{}".format(v)f"{v}"
가독성보통매우 좋음
코드 길이짧음

실습 3-6. f-string (권장)

name = 'Son'
goals = 23
matches = 35

# 기본
print(f"선수: {name}, 득점: {goals}")

# 중괄호 안에서 연산 + 서식
print(f"평균: {goals / matches:.2f}")

# 복합 활용
assists = 8
attack_points = goals + assists
print(f"공격포인트: {attack_points} (득점 {goals} + 도움 {assists})")
선수: Son, 득점: 23
평균: 0.66
공격포인트: 31 (득점 23 + 도움 8)

6. print() 출력 옵션

주요 키워드

키워드기능기본값
sep항목 사이 구분자공백 ' '
end출력 끝 문자줄바꿈 '\n'

실습 3-7. print() 옵션 활용

# sep — 구분자 지정
year, month, day = 2020, 3, 5
print(year, month, day, sep='/')

# end — 줄바꿈 대신 빈 문자열
a = '안녕하세요.'
b = '반갑습니다.'
print(a, end='')
print(b)
2020/3/5
안녕하세요.반갑습니다.

연습 문제

Q1. name = 'Son Heung-min' 일 때 name[4:9] 의 결과는?

  • A) 'Heung' B) 'Son' C) 'min'

Q2. 다음 코드의 출력 결과는?

print('Go! ' * 3)
  • A) Go! 3 B) Go! Go! Go! C) 오류

Q3. f-string으로 name='Son', goals=23 을 출력하는 올바른 코드는?

  • A) print("선수: {name}") B) print(f"선수: {name}")
# 연습 문제 정답
print("Q1 정답: A — 인덱스 4~8 = 'Heung'")
print("Q2 정답: B — 문자열 * 3 = 3번 반복")
print("Q3 정답: B — f-string은 f를 반드시 붙여야 함")
Q1 정답: A — 인덱스 4~8 = 'Heung'
Q2 정답: B — 문자열 * 3 = 3번 반복
Q3 정답: B — f-string은 f를 반드시 붙여야 함