파이썬에서는 2진수, 8진수, 10진수, 16진수로 쉽게 변환할 수 있도록 내장함수가 포함되어 있습니다. 하지만 3진수나 4진수와 같이 다른 진수로 변환하고자 하면 직접 구현을 해야 합니다. (조사를 했지만 파이썬에서는 따로 제공하지 않는 것으로 확인)

이러한 요구사항 때문에 아래에 2진수부터 16진수까지 변환하는 코드를 작성했습니다.

NOTATION = '0123456789ABCDEF'


def numeral_system(number, base):
    q, r = divmod(number, base)
    n = NOTATION[r]
    return numeral_system(q, base) + n if q else n


# 2진수
result = numeral_system(18, 2)
# 4진수
result1 = numeral_system(18, 2)
# 11진수
result2 = numeral_system(18, 11)

print(result)
print(result1)
print(result2)


# 10010
# 102
# 17


만약 16진수보다 더 큰 범위를 표현하고자 하면 아래와 같이 알파벳을 늘려주면 됩니다. (다만 16진수 이후 알파벳 표현식이 맞는지는 확실치 않음) 숫자 0~9까지 10개와 알파벳 26개를 더해 총 36진수까지 표현할 수 있습니다.

import string NOTATION = string.digits + string.ascii_uppercase def numeral_system(number, base): q, r = divmod(number, base) n = NOTATION[r] return numeral_system(q, base) + n if q else n result = numeral_system(18, 16) result1 = numeral_system(17, 18) result2 = numeral_system(36, 36) print(result) print(result1) print(result2) # 12 # H # 10


+ Random Posts