먼저 아스키코드란 1963년 미국 ANSI에서 표준화한 정보교환용 7비트 부호체계이다.
https://namu.wiki/w/%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C
알고리즘을 풀다가 주어진 알파벳이 있을때 이를 아스키코드로 변환하는 문제가 나와 알아보게 되었다.
1. 아스키코드 -> 문자열
SQL이나 C, C++ 에서는 문자열을 뜻하는 값으로 char (character)
를 사용한다. python에서는 아스키코드를 문자열로 변환하는데 내장함수 chr()
을 사용한다.
asc_code = 65
answer = chr(asc_code)
print(answer)
print(type(answer))
------------------------------------
>>> 'A'
>>> <class 'str'>
chr()
을 통해 변환된 아스키코드는 string type의 문자열로 반환된다.
1-1) 문자로 변환할 수 없는 아스키코드
변환하고자 하는 값이 아스키코드가 아닌경우, 이를 chr()
함수 사용시 에러가 발생한다.
asc_code = 134583495739845
answer = chr(asc_code)
--------------------------------------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: chr() arg not in range(256)
에러를 확인해 보면 chr() 내장함수 안의 값은 범위 0부터 256미만 까지만 입력이 가능하다고 한다.
b_code = 1.5
b = chr(b_code)
--------------------------------------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: integer argument expected, got float
또한 python의 내장함수 chr()
에는 int 타입의 수만 들어가야 한다.
1-2) 문자로 변환 가능 최소값, 최대값
# 아스키코드 0의 문자열 변환
zero_code = 0
zero_answer = chr(zero_code)
print(zero_answer)
print("---" + zero_answer + "---")
print(type(zero_answer))
------------------------------------------
>>>
>>> ------
>>> <class 'str'>
# 아스키코드 255의 문자열 변환
max_code = 255
max_answer = chr(max_code)
print(max_answer)
print(type(max_answer))
>>> ÿ
>>> <class 'str'>
이때 0의 코드값은 없는값 (공백도 아님) 으로 변환되고, 255은 특수문자로 변환된다.
2. 문자 -> 아스키코드
문자열을 해당하는 아스키코드로 변환하는데에는 python의 내장함수 ord()
가 사용된다. ord는 ordinal position을 뜻하며, 문자의 순서 위치 값 을 의미한다.
a = "A"
a_code = ord(a)
print(a_code)
print(type(a_code))
------------------------------------------
>>> 65
>>> <class 'int'>
이때 변환된 아스키코드값은 'int' 형이다.
2-1) 아스키코드로 변환할 수 없는 문자 : 문자열
a = 'AAAAA'
a_code = ord(a)
------------------------------------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 5 found
에러를 확인해 보면 ord()
내장함수의 파라미터 값으로는 character 만 가능한데, 길이 5의 문자열이 사용되었다고 한다.
이를 통해 문자 와 문자열이 구분되야 하며, ord()
에는 문자열이 아닌 문자가 사용되어야 한다는걸 알 수 있다.
b = 'ㄱ'
b_code = ord(b)
------------------------------------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 3 found
한글은 보이는것과 달리 영어처럼 단일 문자 취급되지 않는다.
2-2) 아스키코드로 변환할 수 없는 문자 : 0
위의 1-2 에서 확인한 문자 변환 내장함수 chr()
의 범위를 통해 아스키코드 0과 255로 변환해보자
min_str = ''
min_code = ord(min_str)
------------------------------------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 0 found
ㅜㅜ... 아스키코드 0을 문자로 변환했을때 없는값이 출력되어 똑같이 빈 string을 아스키코드로 변환하려 했더니 오류가 발생했다.
아스키코드 0은 없는값, 즉 Null 값을 반환하기 때문에 이를 구현할 수 없는 것이다.
혹시나 해서 None을 변환해 보려 했지만 실패!
min_str = None
min_code = ord(min_str)
------------------------------------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ord() expected string of length 1, but NoneType found
'풀이로그' 카테고리의 다른 글
[알고리즘] Softeer | GBC 풀이 (python) (1) | 2024.02.02 |
---|---|
[자료구조] 이항계수 + DFS & python의 itertools 라이브러리 (0) | 2024.01.29 |
[자료구조] 큐 (Queue)와 데크 (Deque) (1) | 2024.01.29 |
[후위표기식] 스택 알고리즘 문제 예시로 알아보기 (1) | 2024.01.27 |
[Python] 알고리즘 프로그램 입력방법 : input (1) | 2024.01.21 |