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에 발목 잡히니, 글자를 바꿔야 하면 리스트로 변환하는 습관을 들이세요.