Python/Chapter06. 문자열

lullaby ·2025년 10월 1일

Python

목록 보기
7/13
post-thumbnail

1. 문자열 기본 개념

핵심 정의

  • 문자열(string)은 문자들의 순서 있는 집합
  • 문자들이 끈으로 묶여 있는 형태로 이해 가능
  • 파이썬에서 문자열은 따옴표(' 또는 ")로 둘러싸여 표현

중요성

  • 컴퓨터는 숫자 중심이지만, 인간은 문자열을 통해 정보 표현
  • 문자열 처리는 프로그래밍에서 매우 중요한 부분

2. 문자열 생성과 기본 표현

문자열 선언 방법

greeting = "Merry Christmas!"  # 큰따옴표 사용
greeting = 'Happy Holiday!'    # 작은따옴표 사용

여러 줄 문자열

greeting = '''지난 한해 저에게 보여주신 보살핌과 사랑에
깊은 감사를 드립니다.
새해에도 하시고자 하는 일
모두 성취하시기를 바랍니다.'''

따옴표 처리

# 큰따옴표 안에 작은따옴표 사용
message = "철수가 '안녕'이라고 말했습니다."

# 작은따옴표 안에 큰따옴표 사용
message = '철수가 "안녕"이라고 말했습니다.'

# 이스케이프 문자 사용
message = "\"Yes,\" he said."  # 큰따옴표 출력
message = 'doesn\'t'           # 작은따옴표 출력

3. 문자열 연산

문자열 연결 (+)

"Py" + "thon"    # 'Python'
'Harry ' + 'Potter'  # 'Harry Potter'

# 변수 사용
first_name = "길동"
last_name = "홍"
name = last_name + first_name  # '홍길동'

문자열과 숫자 연결

# 숫자를 문자열로 변환 후 연결
print("student" + str(26))  # 'student26'

# 문자열을 숫자로 변환
price = int("3000")  # 3000 (정수)
height = float("290.54")  # 290.54 (실수)

문자열 반복 (*)

line = "=" * 50  # 50개의 등호(=) 반복
message = "Congratulations! " * 3  # 'Congratulations! ' 3번 반복

4. 문자열 서식

형식 지정자 (%s)

price = 10000
print("상품의 가격은 %s원입니다." % price)  # 상품의 가격은 10000원입니다.

message = "현재 시간은 %s입니다."
time = "12:00pm"
print(message % time)  # 현재 시간은 12:00pm입니다.

5. 문자열 메소드

탐색 관련 메소드

s = "Love will find a way."
"Love" in s      # True
"love" in s      # False - 대소문자 구분
"Love" not in s  # False

문자 유형 확인 메소드

num = '111'
baeg = 'hundred'
hanguel = '한글'
space = ' '

num.isdigit()     # True - 숫자인지 확인
baeg.isalpha()    # True - 알파벳(문자)인지 확인
hanguel.isalpha() # True - 문자인지 확인
space.isspace()   # True - 공백인지 확인

분리와 결합 메소드

# split() - 문자열을 구분자로 분리하여 **리스트로** 반환
"Life is too short".split()  # ['Life', 'is', 'too', 'short']
"a:b:c:d".split(':')         # ['a', 'b', 'c', 'd']

공백 제거 메소드

s = ' Python '
s.lstrip()  # 'Python ' - 왼쪽 공백 제거
s.rstrip()  # ' Python' - 오른쪽 공백 제거
s.strip()   # 'Python' - 양쪽 공백 제거

대소문자 변환 메소드

'python'.upper()  # 'PYTHON' - 대문자로 변환
'PYTHON'.lower()  # 'python' - 소문자로 변환

문자 코드 변환

ord("A")  # 65 - 문자를 ASCII 코드 값으로 변환
chr(65)   # 'A' - ASCII 코드 값을 문자로 변환

문자열 치환

text = '123,456,789,999'
text.replace(",", "")    # '123456789999' - 모든 콤마 제거
text.replace(",", "", 1) # '123456,789,999' - 첫 번째 콤마만 제거

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

인덱싱

word = 'Python'
word[0]   # 'P' - 첫 번째 문자
word[5]   # 'n' - 여섯 번째 문자
word[-1]  # 'n' - 마지막 문자 (음수 인덱스)

슬라이싱

word = 'Python'
word[0:2]  # 'Py' - 0부터 1까지
word[2:5]  # 'tho' - 2부터 4까지

7. 실전 문제 풀이 예제

예제 1: 두문자어(acronym) 만들기

# 여러 단어로 된 문자열에서 각 단어의 첫 글자로 두문자어 만들기
phrase = input("문자열을 입력하시오: ")  # 예: "Programming Language Theory"
acronym = ""
for word in phrase.upper().split():
    acronym += word[0]
print("acronym :", acronym)  # "PLT"

예제 2: 모음 제거하기

s = input('문자열을 입력하시오: ')  # 예: "hello"
vowels = "aeiouAEIOU"
result = ""
for letter in s:
    if letter not in vowels:
        result += letter
print(result)  # "hll"

예제 3: 모음과 자음 개수 세기

original = input('문자열을 입력하시오: ')  # 예: "Python"
word = original.lower()
vowels = 0
consonants = 0

if len(original) > 0 and original.isalpha():
    for char in word:
        if char in 'aeiou':
            vowels += 1
        else:
            consonants += 1

print("모음의 개수", vowels)
print("자음의 개수", consonants)

예제 4: 문자 유형별 개수 세기

statement = input("문자열을 입력하시오: ")  # 예: "Hello 123"
alphas = 0
digits = 0
spaces = 0

for c in statement:
    if c.isalpha():
        alphas += 1
    if c.isdigit():
        digits += 1
    if c.isspace():
        spaces += 1

print("알파벳 개수=", alphas)
print("숫자 개수=", digits)
print("공백 개수=", spaces)

예제 5: 특수문자 제거 (계좌번호 처리)

account = input('계좌번호를 입력하시오: ')  # 예: "312-02-1234567"
processed = ""

for c in account:
    if c != "-":
        processed += c

print(processed)  # "312021234567"

예제 6: 회문(palindrome) 검사

def check_pal(s):
    low = 0
    high = len(s) - 1

    while True:
        if low > high:
            return True
        a = s[low]
        b = s[high]
        if a != b:
            return False
        low += 1
        high -= 1

s = input("문자열을 입력하시오: ")  # 예: "mom" 또는 "level"
s = s.replace(" ", "")  # 공백 제거
if check_pal(s):
    print("회문입니다.")
else:
    print("회문이 아닙니다.")

8. 중간고사 예상 문제 및 풀이

문제 1: 문자열 조작 기본

주어진 문자열의 모든 공백을 제거하고, 대문자로 변환한 후 출력하는 프로그램을 작성하시오.

# 답안
text = input("문자열을 입력하세요: ")  # 예: "Hello World Python"
result = text.replace(" ", "").upper()
print(result)  # "HELLOWORLDPYTHON"

문제 2: 이메일 주소 분석

사용자로부터 이메일 주소를 입력받아 사용자 이름과 도메인을 분리하여 출력하는 프로그램을 작성하시오.

# 답안
email = input("이메일 주소를 입력하세요: ")  # 예: "user@example.com"
username, domain = email.split('@')
print("사용자 이름:", username)
print("도메인:", domain)

문제 3: 비밀번호 유효성 검사

사용자로부터 비밀번호를 입력받아 다음 조건을 모두 만족하는지 검사하는 프로그램을 작성하시오.

  • 최소 8자 이상
  • 최소 하나의 숫자 포함
  • 최소 하나의 대문자 포함
# 답안
password = input("비밀번호를 입력하세요: ")

length_valid = len(password) >= 8
digit_valid = False
upper_valid = False

for char in password:
    if char.isdigit():
        digit_valid = True
    if char.isupper():
        upper_valid = True

if length_valid and digit_valid and upper_valid:
    print("유효한 비밀번호입니다.")
else:
    print("유효하지 않은 비밀번호입니다.")
    if not length_valid:
        print("- 비밀번호는 최소 8자 이상이어야 합니다.")
    if not digit_valid:
        print("- 최소 하나의 숫자를 포함해야 합니다.")
    if not upper_valid:
        print("- 최소 하나의 대문자를 포함해야 합니다.")

문제 4: 문자열 통계

사용자로부터 문장을 입력받아 단어 수, 문자 수(공백 제외), 평균 단어 길이를 계산하는 프로그램을 작성하시오.

# 답안
sentence = input("문장을 입력하세요: ")  # 예: "Python is a great programming language"

words = sentence.split()
word_count = len(words)
char_count = len(sentence.replace(" ", ""))
average_word_length = char_count / word_count if word_count > 0 else 0

print("단어 수:", word_count)
print("문자 수(공백 제외):", char_count)
print("평균 단어 길이:", round(average_word_length, 2))

문제 5: 문자열 암호화

사용자로부터 문자열을 입력받아 각 문자의 ASCII 코드값에 5를 더한 후, 해당 ASCII 코드값에 해당하는 문자로 변환하여 암호화하는 프로그램을 작성하시오.

# 답안
text = input("암호화할 문자열을 입력하세요: ")  # 예: "abc"
encrypted = ""

for char in text:
    encrypted += chr(ord(char) + 5)

print("암호화된 문자열:", encrypted)  # "fgh"

9. 실전 대비 팁

  1. 핵심 메소드 암기하기
    • upper(), lower(), strip(), split(), replace() 등의 메소드 사용법을 숙지
  2. 인덱싱과 슬라이싱 연습하기
    • 양수/음수 인덱스 모두 능숙하게 사용할 수 있어야 함
    • 다양한 슬라이싱 범위에 대한 결과 예측 연습
  3. 자주 나오는 문제 유형 연습
    • 회문 검사, 문자 개수 세기, 특정 문자 제거 등
  4. 문자열 포맷팅 방법 숙지
    • %s 형식 지정자 사용법 이해
  5. 문자열 처리 알고리즘 이해하기
    • 반복문과 조건문을 활용한 문자열 처리 패턴 연습

확인 문제를 통해 개념 이해도를 체크해보세요!

10. 확인 문제

  1. 다음 중 문자열에서 모든 공백을 제거하는 코드로 올바른 것은?

    • A. text.replace(" ")
    • B. text.strip()
    • C. text.replace(" ", "")
    • D. text.remove(" ")
  2. 파이썬에서 문자열의 첫 번째 문자를 가리키는 인덱스는?

    • A. 1
    • B. 0
    • C. -1
    • D. None
  3. 다음 코드의 실행 결과는?

    s = "Python Programming"
    print(s[7:])
    
    • A. "Python"
    • B. "Programming"
    • C. "Py"
    • D. "thon Programming"
  4. 다음 중 문자열이 숫자로만 이루어져 있는지 확인하는 메소드는?

    • A. isalpha()
    • B. isnumeric()
    • C. isdigit()
    • D. isnum()
  5. 문자열 "Hello"를 3번 반복하는 코드는?

    • A. "Hello".repeat(3)
    • B. "Hello" * 3
    • C. "Hello" + "Hello" + "Hello"
    • D. "Hello".multiply(3)

답안: 1-C, 2-B, 3-B, 4-C, 5-B

0개의 댓글