Ch06_자료의 종류와 자료형 변환(2)
문자열 메서드(string method)
문자열 메서드 – .join()
.join() 메서드는 문자열 요소들을 하나의 문자열로 연결해주는 기능이다.
🔍 예제 1: 기호로 연결하기
a = "--"
b = ['A', 'B', 'C', 'D']
print(a.join(b))
▶️ 출력: 'A--B--C--D'
🔍 예제 2: 공백 또는 하이픈으로 연결하기
words = ['Hello', 'world', 'Python', 'programming']
print(' '.join(words))
# 출력: Hello world Python programming
numbers = ['1', '2', '3', '4', '5']
print('-'.join(numbers))
# 출력: 1-2-3-4-5
⚠️ 주의 사항
- 리스트 안의 요소는 모두 문자열이어야 한다.
- 숫자가 포함되어 있다면 먼저 str()로 변환해야 함
.split()
.split() 메서드는 하나의 문자열을 지정한 구분자(delimiter) 를 기준으로 나누어 리스트 형태로 반환하는 기능이다.
🔍 예제 1: 공백으로 나누기
a = "ard bug con dream elephant"
result = a.split(' ')
print(result)
▶️ 출력: ['ard', 'bug', 'con', 'dream', 'elephant']
🔍 예제 2: 하이픈(-)으로 나누기
a = "ard-bug-con-dream-elephant"
b = a.split('-')
print(b)
▶️ 출력: ['ard', 'bug', 'con', 'dream', 'elephant']
⚠️ 주의 사항
- 구분자는 반드시 문자열 내에 실제 존재하는 문자여야 함
- 결과는 항상 리스트(list) 형태로 반환된다
- .split()은 반대로 .join()과 함께 자주 사용됨
.replace()
.replace(기존문자열, 새문자열) 문자열에서 특정 문자를 다른 문자로 바꾸는 메서드이다.
🔍 예제 1: 문장 속 일부 문자 바꾸기
a = "사장님도 새해 복 많이 받으세요"
print(a.replace("님", "님♥"))
▶️ 출력: 사장님♥도 새해 복 많이 받으세요
🔍 예제 2: 특수 문자 제거 (데이터 정리 예)
phone_number = "123-456-7890"
cleaned = phone_number.replace("-", "")
print(cleaned)
▶️ 출력: 1234567890
- "-"를 빈 문자열로 바꾸면 하이픈이 제거됨
⚠️ 주의 사항
- 대소문자는 구분함:
- 원본은 그대로 유지됨 (문자열은 불변형):
txt = "hi"
txt.replace("h", "H")
print(txt) # 여전히 'hi'
문자열 대 소문자 바꾸기, .upper(), ,lower()
.upper(), .lower(), .capitalize()
✅ 1. .upper() – 모두 대문자로 바꾸기
a = "python"
print(a.upper()) # 출력: PYTHON
✅ 2. .lower() – 모두 소문자로 바꾸기
b = "PYTHON"
print(b.lower()) # 출력: python
✅ 3. .capitalize() – 맨 앞 글자만 대문자, 나머지는 소문자
a = "python"
print(a.capitalize()) # 출력: Python
⚠️ 주의 사항
- 문자열 메서드는 원본을 변경하지 않고 새 문자열을 반환한다.
- 영문 알파벳만 적용된다 (한글은 변화 없음).
- 주로 사용자 입력값 처리, 데이터 정제, UI 표기 정리 등에 활용됨
실습 예제 – .join()으로 문자열 만들기
💡 문제:
a = ["홍길동", "2001", "20학번"]
→ 이 리스트의 문자열을 하이픈(-) 으로 연결하여 하나의 문자열로 저장하세요.
a = ["홍길동", "2001", "20학번"]
result = "-".join(a)
print(result)
▶️ 출력 결과: 홍길동-2001-20학번
실습 예제 – .split() 메서드
- a = "AAA001 컴퓨터 상송 2020"
- .split()을 이용해 공백 기준으로 나누기
- wlist = a.split()
- 출력 결과: ['AAA001', '컴퓨터', '상송', '2020']
a = "AAA001 컴퓨터 상송 2020"
wlist = a.split()
print(wlist)
실습 예제 – 첫 글자 대문자로 출력하기
💡 문제
사용자에게 영어 문장을 입력받고, 그 문장을 첫 글자만 대문자로 출력하라.
# 사용자로부터 입력받기
sentence = input("영어 문장을 입력하세요: ")
# 첫 글자만 대문자로 변환
result = sentence.capitalize()
# 출력
print(result)
🔍 실행 예시
영어 문장을 입력하세요: hello, my name is tom.
Hello, my name is tom.
📌 설명
- capitalize() 메서드는:
- 문자열의 첫 글자만 대문자, 나머지는 소문자로 변환
- 'hello WORLD'.capitalize() → 'Hello world'
만약 모든 단어의 첫 글자를 대문자로 바꾸고 싶다면 title() 메서드를 사용합니다.
문자열 개수 세기 – .count()
.count(문자열) :
→ 해당 문자열이 몇 번 나오는지 개수를 반환한다.
a = '간장공장공장장'
print(a.count('장')) # 출력: 4
문자열 '장'이 총 4번 등장하므로 결과는 4
🔍 예제 2 – 문장 속 단어 세기
text = "Hello, how are you? How's your day?"
count_how = text.count("how")
print("문자열 'how'의 개수:", count_how)
count_o = text.count("o")
print("문자 'o'의 개수:", count_o)
▶️ 출력 결과:
문자열 'how'의 개수: 1
문자 'o'의 개수: 5
⚠️ 주의 사항
- 대소문자를 구분한다
"How".count("how") → 0 - 띄어쓰기, 문장부호가 포함되어 있으면 그 상태로 세어짐
문자열 위치 찾기 – .find(), .index()
✅ 1. .find() 메서드
문자열 안에서 지정한 문자의 첫 번째 위치(인덱스) 를 반환
못 찾으면 -1 반환
a = "Ladies and Gentleman, Welcome to Python world"
print(a.find('W')) # 출력: 21
print(a.find('Z')) # 출력: -1 (없을 경우)
✅ 2. .index() 메서드
.find()와 기능은 같지만,
못 찾을 경우 ValueError 오류가 발생함
a = "Ladies and Gentleman, Welcome to Python world"
print(a.index('W')) # 출력: 21
print(a.index('Z')) # ❌ 오류 발생 (ValueError)
💡 Tip: 언제 사용하면 좋을까?
- .find(): 검색 결과가 없을 수도 있을 때 안전하게 사용
- .index(): 무조건 값이 존재할 것이라 확신할 때 사용
문자열지우기 .strip()
.strip() 메서드는 문자열의 양쪽 끝에 있는 공백 또는 지정한 문자를 제거한다.
- 기본값은 공백 제거
- 중간의 공백은 제거하지 않음
🔍 예제 1: 공백 제거
text = " Hello, world! "
stripped_text = text.strip()
print(stripped_text) # 출력: 'Hello, world!'
문자열 양쪽의 공백이 제거된다.
🔍 예제 2: 특정 문자 제거
a = "야 정말 제가 할게요"
print(a.strip("야")) # 출력: ' 정말 제가 할게요'
- 문자열 양쪽 끝에 있는 '야'만 제거됨
- 중간에 있는 '야'는 그대로 남음
⚠️ 참고
| strip() | 양쪽 끝의 공백 또는 지정한 문자 제거 |
| lstrip() | 왼쪽(앞)만 제거 |
| rstrip() | 오른쪽(뒤)만 제거 |
문자열 정렬 메서드
파이썬에서는 문자열을 지정한 폭(width) 내에서 가운데, 왼쪽, 오른쪽으로 정렬할 수 있는 메서드를 제공한다.
✅ 1. .center(width, [fillchar])
문자열을 가운데 정렬
남는 공간은 fillchar 문자로 채움 (기본은 공백)
text = "Python"
print(text.center(10)) # ' Python '
print(text.center(10, '*')) # '**Python**'
✅ 2. .ljust(width, [fillchar])
문자열을 왼쪽 정렬
남는 공간을 fillchar로 채움
text = "Python"
print(text.ljust(10)) # 'Python '
print(text.ljust(10, '-')) # 'Python----'
✅ 3. .rjust(width, [fillchar])
문자열을 오른쪽 정렬
남는 공간을 fillchar로 채움
text = "Python"
print(text.rjust(10)) # ' Python'
print(text.rjust(10, '+')) # '++++Python'
연습 문제: 쉼표 개수 세기 + 가운데 정렬하기
✅ 문제 1
문자열 안에 쉼표(,)가 몇 개 있는지 세어보자.
a = "........................,........................."
comma_count = a.count(",")
print("쉼표의 개수:", comma_count)
✅ 문제 2
쉼표 하나만 담긴 문자열을 폭 30에 가운데 정렬하고,
나머지 빈 자리는 *로 채우자.
a = ','
a = a.center(30, '*')
print(a)
- .center(30, '*') → 폭 30 기준으로 가운데 정렬
- 좌우에 * 문자로 채워진다.
✅ 문제 3
: "정"이 뒤에서 몇 번째에 등장하는지 찾기
a = "홍길동,김철수,이영희,박정민,정현수"
pst = a.rfind("정") # 문자열에서 '정'이 마지막으로 등장하는 인덱스
pst_back = len(a) - pst # 전체 길이 - 위치 = 뒤에서 몇 번째인지 계산
print("정은 뒤에서", pst_back, "번째 입니다")
▶️ 출력:
정은 뒤에서 3 번째 입니다
.rfind('문자열')
→ 뒤에서부터 탐색하여 가장 마지막에 등장하는 인덱스를 반환
→ 없으면 -1 반환
✅ 문제 4
자판기 시뮬레이션
사용자가 투입한 금액과 물건 가격을 입력하면,
거스름돈과 함께 500원/100원 동전 개수를 출력하는 프로그램입니다.
# 사용자 입력
money = int(input("투입한 돈: "))
price = int(input("물건값: "))
# 거스름돈 계산
change = money - price
# 동전 계산
coin500 = change // 500
coin100 = (change % 500) // 100
# 결과 출력
print("============================")
print("투입한 돈:", money)
print("물건값:", price)
print("거스름돈 :", change)
print("500원 동전 개수 :", coin500)
print("100원 동전 개수 :", coin100)
실행 예시
투입한 돈: 5000
물건값: 2400
============================
투입한 돈: 5000
물건값: 2400
거스름돈 : 2600
500원 동전 개수 : 5
100원 동전 개수 : 1
📌 포인트
- // 는 몫 연산자 (정수 나눗셈)
- % 는 나머지 연산자
- 100원 단위 가격만 허용하는 구조
💡 자판기 프로그램 확장 버전
- 투입 금액 / 물건값 입력
- 거스름돈 계산 후 동전(500, 100, 50, 10원) 단위로 출력
- 숫자가 아닌 입력이 들어오면 오류 처리
- 계속 반복 실행 가능 (사용자가 'n' 입력 시 종료)
while True:
try:
# 사용자 입력 받기
money = int(input("투입한 돈을 입력하세요: "))
price = int(input("물건값을 입력하세요: "))
# 거스름돈 계산
change = money - price
if change < 0:
print("잔액이 부족합니다. 다시 시도하세요.\n")
continue
# 동전 단위 계산
coin500 = change // 500
coin100 = (change % 500) // 100
coin50 = (change % 100) // 50
coin10 = (change % 50) // 10
# 출력
print("==========================")
print("투입한 돈:", money)
print("물건값:", price)
print("거스름돈:", change)
print("500원 동전 개수:", coin500)
print("100원 동전 개수:", coin100)
print(" 50원 동전 개수:", coin50)
print(" 10원 동전 개수:", coin10)
print("==========================")
# 계속 여부 묻기
again = input("다시 계산하시겠습니까? (y/n): ")
if again.lower() != 'y':
print("자판기 시뮬레이션을 종료합니다.")
break
except ValueError:
print("숫자만 입력하세요!\n")
🧪 실행 예시
투입한 돈을 입력하세요: 5000
물건값을 입력하세요: 2730
==========================
투입한 돈: 5000
물건값: 2730
거스름돈: 2270
500원 동전 개수: 4
100원 동전 개수: 2
50원 동전 개수: 1
10원 동전 개수: 2
==========================
다시 계산하시겠습니까? (y/n): n
자판기 시뮬레이션을 종료합니다.