Python convert base 10 to base 6

One direction is clear:

>>> int('42', 6)
26

The other way - convert a number to a base 6 representation - is trickier. There seems to be no way to do it with built-in functions and without a loop.

So one could do something like

def str_base(val, base):
    res = ''
    while val > 0:
        res = str(val % base) + res
        # val /= base # only valid for Py2
        val //= base # for getting integer division
    if res: return res
    return '0'

This gives e.g.:

>>> str_base(7,6)
'11'

Till now, it only works with bases <= 10; for the others you'd need to define an alphabet string:

import string
alphabet = string.digits + string.ascii_lowercase

and use it in the function like

res = alphabet[val % base] + res

It (probably) still doesn't work with negative numbers. If you need these, you have to add another bit of effort.

This post deals with the methods to inter-convert decimal to any base system number into any base depending on the user input in Python.

Prerequisites: Basics of python looping constructs

Decimal to Any Base – The Method

The basic algorithm for this conversion is to repeatedly divide (integer division) the given decimal number by the target base value until the decimal number becomes 0. The remainder in each case forms the digits of the number in the new base system, however, in the reverse order.

An Upper Limit

The algorithm, in general, will work for any base, but we need digits/characters to represent that many numbers of a base system. For simplicity, we limit ourselves to base 36 i.e 10 numbers + 26 alphabets. (We can differentiate lower and upper case, but we intend to focus on the algorithm here!). It will be clear after the implementation that the method has to work for any base.

Decimal to Any Base – Python Implementation

Consider the following program,

def dec_to_base(num,base):  #Maximum base - 36
    base_num = ""
    while num>0:
        dig = int(num%base)
        if dig<10:
            base_num += str(dig)
        else:
            base_num += chr(ord('A')+dig-10)  #Using uppercase letters
        num //= base

    base_num = base_num[::-1]  #To reverse the string
    return base_num

Notice the if condition used to check if digits 0-9 are enough to accommodate all digits in the base. Otherwise, we are assigning a suitable alphabet for the digit.

ord() – Built-in function that returns the ASCII value of character

chr() – Built-in function that returns the character with ASCII value –

The last line is used as a string reversal operation. It basically produces a slice of string from beginning to end ( signified by first two empty arguments) by traversing from the end to start (signified by -1).

This a sample output, converting to base 28

Python convert base 10 to base 6

Hence we are able to convert a decimal number into any base required.

Some Built-In Base Conversion Methods

Python provides some built-in base conversion methods for binary, octal and hexadecimal numbers.

The usage is very simple:

bin() – Returns a string, which is binary representation of decimal number

oct() – Returns a string, which is octal representation of decimal number

hex() – Returns a string, which is hecadecimal representation of decimal number

Any Base to Decimal

Python also provides easy conversion from any base to decimal. This done by simply passing a string that has the other base representation of a decimal number and the base value as the second argument. It returns the decimal number!

print int("1123",5)   #Prints string given in base-5 in decimal

The output is: 163

Algorithm and Implementation for Any Base to Decimal

The logic is very simple. We just have to multiply each digit at a position with the base value raised to the place value(starting from 0 from right-side). That is how a base system is defined, in fact.

For instance, if 1011 is a binary number, the decimal equivalent is

(1 x 2^0) + (1 x 2^1) + (0 x 2^2) + (1 x 2^3) = 11

The following program illustrates the same,

def base_to_dec(num_str,base):
    num_str = num_str[::-1]
    num = 0
    for k in range(len(num_str)):
        dig = num_str[k]
        if dig.isdigit():
            dig = int(dig)
        else:    #Assuming its either number or alphabet only
            dig = ord(dig.upper())-ord('A')+10
        num += dig*(base**k)
    return num

Below is a sample output for the same value converted in the previous output

Python convert base 10 to base 6

Feel free to leave behind any sort of feedback, suggestion, doubts below.

How do you convert a base in Python?

In Python, you can simply use the bin() function to convert from a decimal value to its corresponding binary value. And similarly, the int() function to convert a binary to its decimal value. The int() function takes as second argument the base of the number to be converted, which is 2 in case of binary numbers.

How do you convert a no to base 6?

For example, to convert 83.125 to base 6 , we multiply the fractional part by 6 repeatedly until we find an integer..
0.125 × 6 = 0 .75..
0.75 × 6 = 4 .5..
0.5 × 6 = 3..

How do you convert a number from base 10 to base K?

For a number n in base 10 , if we wish to convert n to base k then we do the following..
digits = [] while n > 0: digit = n%k digits. append(digit) n /= k n_k = reversed(digits) ... .
n = sum of i from 0 to infinity of c_i*(k^i) where 0 <= c_i < k . ... .
11 = 1*3^2 + 0*3^1 + 2*3^0. ... .
11 % 3 = (1*3^2 + (0*3)^1 + 2*3^0) % 3 = 0 + 0 + 2..