문자열의 특정 문자 또는 특정 문자열을 치환할 때에는 보통 str.replace 함수를 사용한다. 하지만 여러 문자를 각각 치환하는데 사용하기엔 좋지 않다.
이 경우에는 str.translate 함수를 사용하는 것이 조금 더 적절하다.
사용법
1. 치환 규칙 정의
- dictionary 사용
dictionary를 사용하는 경우 ASCII 코드를 사용하여 정의해야 한다.
아래 예시는 각 대문자를 세 자리 뒤의 문자로 치환하는 규칙을 정의한 것이다.
rule = {}
for i in range(ord('A'), ord('Z') + 1):
rule[i] = (i - ord('A') + 3) % 26 + ord('A')
print(rule)
- str.maketrans() 사용
매개변수로 문자열을 받는다. 첫번째 매개변수의 문자열(from)을 두번째 매개변수의 문자열(to)로 치환한다. 문자열 내의 문자 각각을 동일한 위치의 문자로 치환하기 때문에 매개변수로 받은 두 개의 문자열은 길이가 같아야 한다.
세번째 문자열은 삭제할 문자열이다.
inp = sys.stdin.readline()[:-1]
from = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
to = 'DEFGHIJKLMNOPQRSTUVWXYZABC'
remove = '\n'
rule = inp.maketrans(from, to, remove)
print(rule)
maketrans 함수의 결과를 출력하면 ASCII 코드를 키와 값으로 하는 dictionary를 확인할 수 있다.
2. 문자열 치환
str.translate 함수를 이용해 정의한 규칙대로 문자를 치환한다.
inp = sys.stdin.readline()[:-1]
# dictionary
rule = {}
for i in range(ord('A'), ord('Z') + 1):
rule[i] = (i - ord('A') + 3) % 26 + ord('A')
print(inp.translate(rule))
# maketrans
o = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
n = 'DEFGHIJKLMNOPQRSTUVWXYZABC'
rule = inp.maketrans(o, n)
print(inp.translate(rule))