03. 문자열
문자열 인덱싱·연산·메서드·포맷팅을 다룹니다.
목차
- 학습 목표
- 1. 문자열이란?
- 정의
- 예시
- 주의
- 2. 문자열 인덱싱과 슬라이싱
- 인덱싱 (Indexing)
- 슬라이싱 (Slicing)
- 인덱스 구조
- 실습 3-1. 인덱싱과 슬라이싱
- 3. 문자열 연산
- + — 문자열 연결 (Concatenation)
- * — 문자열 반복
- len() — 문자열 길이
- 실습 3-2. 문자열 연산
- 문자열 + 숫자 연결 시 오류
- 4. 문자열 메서드
- 주요 메서드
- 실습 3-3. 문자열 메서드 활용
- 5. 문자열 포맷팅
- 방법 1 : % 기호 (전통 방식)
- 실습 3-4. % 포맷팅
- 방법 2 : format() 메서드
- 실습 3-5. format() 메서드
- 방법 3 : f-string (권장)
- 실습 3-6. f-string (권장)
- 6. print() 출력 옵션
- 주요 키워드
- 실습 3-7. print() 옵션 활용
- 연습 문제
스포츠 데이터로 배우는 파이썬 기초
학습 목표
- 문자열의 생성과 기본 연산 (
+,*) - 인덱싱과 슬라이싱으로 원하는 글자 추출
- 주요 문자열 메서드 활용 (
.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! 3B)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를 반드시 붙여야 함