강의실/컴퓨팅사고 with python

Ch06_자료의 종류와 자료형 변환(2)

jsBae 2025. 4. 6. 16:52

문자열 메서드(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  
자판기 시뮬레이션을 종료합니다.
728x90
반응형