-
[python] 파이썬의 진수 변환(2진수, 8진수, 10진수, 16진수)코딩 연습/코딩배우기 2020. 9. 18. 19:29
■ 파이썬에서 10진수를 다른 진수의 문자열로 변환할 경우, 파이썬의 내장 함수 bin(), oct(), hex()를 사용하며, 역으로, 다른 진수의 문자열을 10진수 숫자형으로 변환할 때는 int()를 사용한다.
print(bin(10)) # 0b1010 print(oct(10)) # 0o12 print(hex(10)) # 0xa print(int('0b1010', 2)) # 10 print(int('0o12', 8)) # 10 print(int('0xa', 16)) # 10
■ format() 내장 함수를 이용하는 방법(접두어 포함 여부를 선택할 수 있음)
# 진수(2/8/10/16) 관련 함수 사용 for i in range(16): print('(10진수:{0:2d}) (2진수:{1:>6s}) (8진수:{2:>4s}) (16진수:{3:>4s})'\ .format(i, bin(i), oct(i), hex(i))) [실행 결과] (10진수: 0) (2진수: 0b0) (8진수: 0o0) (16진수: 0x0) (10진수: 1) (2진수: 0b1) (8진수: 0o1) (16진수: 0x1) (10진수: 2) (2진수: 0b10) (8진수: 0o2) (16진수: 0x2) (10진수: 3) (2진수: 0b11) (8진수: 0o3) (16진수: 0x3) (10진수: 4) (2진수: 0b100) (8진수: 0o4) (16진수: 0x4) (10진수: 5) (2진수: 0b101) (8진수: 0o5) (16진수: 0x5) (10진수: 6) (2진수: 0b110) (8진수: 0o6) (16진수: 0x6) (10진수: 7) (2진수: 0b111) (8진수: 0o7) (16진수: 0x7) (10진수: 8) (2진수:0b1000) (8진수:0o10) (16진수: 0x8) (10진수: 9) (2진수:0b1001) (8진수:0o11) (16진수: 0x9) (10진수:10) (2진수:0b1010) (8진수:0o12) (16진수: 0xa) (10진수:11) (2진수:0b1011) (8진수:0o13) (16진수: 0xb) (10진수:12) (2진수:0b1100) (8진수:0o14) (16진수: 0xc) (10진수:13) (2진수:0b1101) (8진수:0o15) (16진수: 0xd) (10진수:14) (2진수:0b1110) (8진수:0o16) (16진수: 0xe) (10진수:15) (2진수:0b1111) (8진수:0o17) (16진수: 0xf) # 0b, 0o, 0x 포함 for i in range(16): print('{0:>#6b}, {1:>#4o}, {2:>#2d}, {3:>#4x}'.format(i, i ,i, i)) [실행 결과] 0b0, 0o0, 0, 0x0 0b1, 0o1, 1, 0x1 0b10, 0o2, 2, 0x2 0b11, 0o3, 3, 0x3 0b100, 0o4, 4, 0x4 0b101, 0o5, 5, 0x5 0b110, 0o6, 6, 0x6 0b111, 0o7, 7, 0x7 0b1000, 0o10, 8, 0x8 0b1001, 0o11, 9, 0x9 0b1010, 0o12, 10, 0xa 0b1011, 0o13, 11, 0xb 0b1100, 0o14, 12, 0xc 0b1101, 0o15, 13, 0xd 0b1110, 0o16, 14, 0xe 0b1111, 0o17, 15, 0xf # '#' 제외 시, 0b/ 0o/ 0x 제외됨 for i in range(16): print('{0:>6b}, {1:>4o}, {2:>2d}, {3:>4x}'.format(i, i ,i, i)) [실행 결과] 0, 0, 0, 0 1, 1, 1, 1 10, 2, 2, 2 11, 3, 3, 3 100, 4, 4, 4 101, 5, 5, 5 110, 6, 6, 6 111, 7, 7, 7 1000, 10, 8, 8 1001, 11, 9, 9 1010, 12, 10, a 1011, 13, 11, b 1100, 14, 12, c 1101, 15, 13, d 1110, 16, 14, e 1111, 17, 15, f
■ 2/8/10/16진수 중 하나의 값을 입력하면, 입력값의 2/8/10/16진수 전체를 알려주는 함수 작성
def notation(): while True: sel_n = input('구하고자 하는 진수 숫자(2/8/10/16) 입력은? (종료는 0)>> ') if sel_n == '0': print('프로그램 종료!!') break elif sel_n == '2' or sel_n == '8' or sel_n == '10' or sel_n == '16' : val = input('선택한 진수의 값 입력>> ') sl = val[:2] try: if sl == '0b' or sl == '0o' or sl == '0x': if sl == '0b': int_num = int(val, 2) elif sl == '0o': int_num = int(val, 8) elif sl == '0x': int_num = int(val, 16) else: if sel_n == '2': int_num = int('0b' + val, 2) elif sel_n == '8': int_num = int('0o' + val, 8) elif sel_n == '10': int_num = int(val) elif sel_n == '16': int_num = int('0x' + val, 16) except Exception as e: print(e) print('잘못 된 값을 입력하셨습니다.') continue print(' 2진수 : {0} [{1:b}]'.format(bin(int_num), int_num)) # 0b111 #b print(' 8진수 : {0} [{1:o}]'.format(oct(int_num), int_num)) # 0o7 #o print('10진수 : {0}'.format(int_num)) print('16진수 : {0} [{1:x}]'.format(hex(int_num), int_num)) # 0x7 #x else: print('선택 오류!! (다시 입력하세요.)') notation() [실행 결과] 구하고자 하는 진수 숫자(2/8/10/16) 입력은? (종료는 0)>> 16 선택한 진수의 값 입력>> FFA1 2진수 : 0b1111111110100001 [1111111110100001] 8진수 : 0o177641 [177641] 10진수 : 65441 16진수 : 0xffa1 [ffa1] 구하고자 하는 진수 숫자(2/8/10/16) 입력은? (종료는 0)>> 10 선택한 진수의 값 입력>> 128 2진수 : 0b10000000 [10000000] 8진수 : 0o200 [200] 10진수 : 128 16진수 : 0x80 [80] 구하고자 하는 진수 숫자(2/8/10/16) 입력은? (종료는 0)>> 8 선택한 진수의 값 입력>> 123 2진수 : 0b1010011 [1010011] 8진수 : 0o123 [123] 10진수 : 83 16진수 : 0x53 [53] 구하고자 하는 진수 숫자(2/8/10/16) 입력은? (종료는 0)>> 2 선택한 진수의 값 입력>> 11011101 2진수 : 0b11011101 [11011101] 8진수 : 0o335 [335] 10진수 : 221 16진수 : 0xdd [dd] 구하고자 하는 진수 숫자(2/8/10/16) 입력은? (종료는 0)>> 0 프로그램 종료!!
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 파이썬 함수의 위치 인자, 키워드 인자 언패킹 (0) 2020.09.19 [python] 파이썬의 변수, 객체, 그리고 참조 주소 (0) 2020.09.19 [python] 파이썬 스태틱(static) 메서드와 클래스(class) 메서드 (0) 2020.09.17 [python] 파이썬 데코레이터 (Decorator) (0) 2020.09.16 [python] 파이썬 중첩함수(Nested Function)와 클로저(Closure) (0) 2020.09.15