Roel Notebook

[Python] 진법 변환 - int(), bin(), oct(), hex()

by Roel Downey
728x90
반응형

n 진법으로 표기된 문자열을 10진법 숫자로 변환하는 방법을 알아보자.

 

예) 5진법으로 적힌 문자열 '3212'를 10진법으로 바꾸기

 

다른 언어에서는..(또는 이 기능을 모르시는 분은)

for 문을 이용해 숫자를 곱해가며 문제를 푼다.

num = '3212'
base = 5

answer = 0
for idx, number in enumerate(num[::-1]):
    answer += int(number) * (base ** idx)

 

파이썬에서는

파이썬의 int(x, base=10) 함수는 진법 변환을 지원한다.
이 기본적인 함수를 잘 쓰면 코드를 짧게 쓸 수 있고, 시간을 절약할 수 있다.

num = '3212'
base = 5
answer = int(num, base)

 

만약에 x가 숫자라면 TypeError: int() can't convert non-string with explicit base 

이런 오류를 만나게 된다. 그럼 x를 str(x)로 변환해서 실행하면 된다.!!!!

 

10진법 -> 2 , 8, 16 진수로 변환하는 방법을 알아보자.

print(bin(10))		# 0b1010
print(oct(10))		# 0o12
print(hex(10))		# 0xa

0b는 2진수, 0o는 8진수, 0x는 16진수를 의미한다. 앞의 진법 표시를 지울려면 [2:]를 하면 된다.

 

print(bin(10)[2:])
print(oct(10)[2:])
print(hex(10)[2:])

 

2,8,16 이외의 변환을 하려고 한다면 아래와 같이 작성한다.

import string

tmp = string.digits+string.ascii_lowercase
def convert(num, base) :
    q, r = divmod(num, base)
    if q == 0 :
        return tmp[r] 
    else :
        return convert(q, base) + tmp[r]

 

 

 

 

 

 

 

 

728x90
반응형

블로그의 정보

What doing?

Roel Downey

활동하기