Python/기초문법

[기초문법] Python 진법 변환

gangee 2023. 7. 7. 03:38

목차

    728x90
    반응형

    Python 여러가지 진법 변환

    1. 10진수 -> 2, 8, 16진수

    1-1. 10진수 -> 2진수

    # a 에 10진수
    bin(a)  # 기본 형식
    format(a, 'b')  # 기본 형식 
    
    print(bin(10))
    print(bin(10)[2:])
    
    print(format(10, 'b')
    print(format(10, '#b')
    
    ------------------------
    
    > ob1010
    > 1010
    > 1010
    > ob1010
    • bin 함수를 실행하면 앞에 ob가 붙음, [2:]로 리스트 잘라 숫자만 출력
    • format 함수에서 'b' 앞에 #을 붙이면 ob 붙어서 출력

    1-2. 10진수 -> 6진수

    # a 에 10진수
    oct(a)  # 기본 형식
    
    print(oct(10))
    print(oct(10)[2:])
    
    ------------------------
    
    > Oo12
    > 12
    • oct 함수를 실행하면 앞에 Oo가 붙음, [2:]로 리스트 잘라 숫자만 출력

    1-3. 10진수 -> 18진수

    # a 에 10진수
    hex(a)  # 기본 형식
    
    print(hex(10))
    print(hex(10)[2:])
    
    ------------------------
    
    > Oxa
    > a
    • hex 함수를 실행하면 앞에 Ox가 붙음, [2:]로 리스트 잘라 숫자만 출력

    2. 10진수 -> n진수

    • 10진수에서 n진수로 변환하는 함수는 없음
    # n은 10진수, q는 n진수의 n
    def solution(n, q)
        cvt = ''
    
        while n > 0:
            n, mod = divmod(n, q)
            cvt += str(mod)
        return cvt[::-1]  # 진수가 역순이어서 다시 뒤집어서 출력
    
    print(solution(45, 3))
    print(solution(10, 4))
    
    -------------------------------
    
    > 1200
    > 22
    • cvt 가 역순으로 출력되는 이유 : 진수 변환을 위해 나머지를 계속 추가하는 과정에서, 가장 낮은 자리의 나머지부터 추가되기 때문

    -divmod(a, b) 함수 원리
    -출력 : (a//b, a%b)
    -(a와 b를 나눴을 때 몫, a와 b를 나눴을 때 나머지)

    divmod(8, 2)
    divmod(6, 2)
    divmod(4, 3)
    
    ------------------------
    
    > (4, 0)
    > (3, 0)
    > (1, 1)

    3. n진수 -> 10진수

    # a에 변환할 문자열, b에 n진수에서 n 
    int(a, b)  # 기본 형식
    
    print(int('111', 2))
    print(int('222', 3))
    print(int('333', 4))
    print(int('444', 5))
    
    ---------------------------------------
    
    > 7
    > 26
    > 63
    > 124
    728x90
    반응형