에르노트

파이썬 문자 유니코드 변환 (ord 함수, chr 함수) 본문

Dev/Python

파이썬 문자 유니코드 변환 (ord 함수, chr 함수)

두콩 2021. 11. 14. 23:32

좌표를 계산해야 할 때 (1,1)이라고 주어지면 깔끔하다. 그냥 그대로 사용하면 된다. x축으로 한칸 이동했을 때 (2,1)이다.

 

하지만 (A,1)이라고 주어질 수도 있다. 그러면 x축으로 한칸 이동했을 때 (B,1)로 옮겨주어야 한다. [A,B,C...] 형태로 좌표 배열을 만들어두고 인덱스를 옮겨다닐 수도 있겠지만 비효율적이고 또 불편하다. 그래서 (A, 1)이라고 입력이 들어오더라도 (1,1)로 변환할 수 있다면 문제가 좀 더 쉬워진다.


파이썬 문자 유니코드 변환

다행히 파이썬에서는 내장 함수 ord()를 이용하여 간단하게 문자를 유니코드 정수로 변환할 수 있다.

 

ord('A') == 65

ord('B') == 66

ord('C') == 67

 

반대로 내장 함수 chr()를 이용하여 유니코드 정수를 받아서 문자를 반환할 수도 있다.

 

chr(65) == 'A'

chr(66) == 'B'

chr(67) == 'C'


응용 예시

먼저 a:1, b:2... 와 같이 매핑하고 싶을 때 직접 딕셔너리에 정의할 수 있다.

def char_to_num(char):
    x_map = {
        'a': 1,
        'b': 2,
        'c': 3,
        'd': 4,
        'e': 5,
        'f': 6,
        'g': 7,
        'h': 8,
    }

    return int(x_map[char])

데이터가 적을 때는 충분히 유용한 방식이지만 데이터가 많아지면 감당하기 힘들다. 게다가 하드코딩 스타일이라 지저분하고 번거롭다는 단점이 있다.

 

def char_to_num(char):
    return int(ord(char)) - int(ord('a')) + 1

그래서 어차피 'a'가 기준이라면 주어진 문자와 'a' 사이의 유니코드 값 차이를 이용해서 원하는 값을 얻어낼 수 있다. ord() 함수를 활용하면 문자와 유니코드 사이에 변환이 매우 간단하므로 전체적인 코드도 훨씬 짧아진다.

Comments