6. 문자열 — 더 나아가기

문자열은 코테에서 정말 자주 나오는데, 기본 메서드만으로는 살짝 부족할 때가 있어요. 실전에서 자주 쓰는 심화 기능들을 정리해 봅니다.

f-string으로 예쁘게 포맷하기

문자열 안에 값을 끼워 넣을 때 f"..." 앞에 f를 붙이고 {} 안에 변수를 쓰면 됩니다.

name = "철수"
age = 20

print(f"{name}{age}살")   # 출력: 철수은 20살
print(f"{3:03d}")            # 출력: 003    (3자리로, 앞을 0으로 채움)
print(f"{3.14159:.2f}")      # 출력: 3.14   (소수점 아래 2자리까지)

{값:03d}는 정수를 3자리로 맞추고 빈 자리를 0으로 채우고, {값:.2f}는 소수점 자리수를 정해줍니다.

자리수 맞추고 채우기

숫자나 글자를 일정한 너비로 정렬할 때 씁니다.

print("5".zfill(3))       # 출력: 005    (0으로 채워 3자리)
print("hi".rjust(5))      # 출력: '   hi'  (오른쪽 정렬, 앞을 공백으로)
print("hi".ljust(5))      # 출력: 'hi   '  (왼쪽 정렬, 뒤를 공백으로)
print("hi".center(7))     # 출력: '  hi   ' (가운데 정렬)

문자열이 어떤 종류인지 판별하기

조건에 맞는 글자만 걸러내야 할 때 유용합니다. 결과는 True/False예요.

print("123".isdigit())    # 출력: True   (숫자로만 이루어졌나?)
print("abc".isalpha())    # 출력: True   (알파벳으로만?)
print("a1".isalnum())     # 출력: True   (알파벳+숫자로만?)
print("ABC".isupper())    # 출력: True   (전부 대문자인가?)

공백과 특정 문자 제거하기

입력값 양옆의 공백을 없앨 때 strip()을 정말 많이 씁니다.

print("  hi  ".strip())   # 출력: 'hi'    (양쪽 공백 제거)
print("  hi  ".lstrip())  # 출력: 'hi  '  (왼쪽만)
print("  hi  ".rstrip())  # 출력: '  hi'  (오른쪽만)
print("xxhixx".strip("x"))# 출력: hi      (양쪽 x 제거)

원하는 글자 찾기

print("hello".find("l"))       # 출력: 2   (l이 처음 나오는 위치)
print("hello".find("z"))       # 출력: -1  (없으면 -1)
print("hello".startswith("he"))# 출력: True  (he로 시작하나?)
print("hello".endswith("lo"))  # 출력: True  (lo로 끝나나?)

find는 없을 때 에러 대신 -1을 돌려주니, "찾았는지" 여부를 확인하기 좋습니다.

문자열은 불변(immutable)입니다 — 코테 함정 주의

리스트와 달리 문자열은 인덱스로 한 글자만 바꿀 수 없어요. s[2] = "X" 같은 코드는 에러가 납니다. 대신 슬라이싱으로 새 문자열을 만들거나, 리스트로 바꿔서 수정한 뒤 다시 합칩니다.

s = "abcde"
s = s[:2] + "X" + s[3:]   # 슬라이싱으로 새로 조립
print(s)                  # 출력: abXde

lst = list("abcde")       # 리스트로 변환
lst[2] = "X"              # 자유롭게 수정
print("".join(lst))       # 출력: abXde  (다시 문자열로)

💡 f-string 포맷과 strip()은 실전에서 손에 붙을 만큼 자주 씁니다. 그리고 "문자열은 못 바꾼다"는 사실을 잊으면 TypeError에 발목 잡히니, 글자를 바꿔야 하면 리스트로 변환하는 습관을 들이세요.