使用Python将10进制数转化为任意进制数

121 阅读1分钟
import string


'''输入任意10进制数n,以及要转换的进制x, 返回对应转换后的数result。'''
def converet(n, x):
    # 1、先调整输出的进制,用符号拼接。
    li1 = [i for i in range(10)]   # 拼接出0到9的列表
    li2 = list(string.ascii_letters)   # 拼接出所有小写字母和大写字母的列表
    li3 = ['~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '-', '+', '=', ',', '<', '.', '>', '/', '?', ';', ':', '"', '[', '{', ']', '}', '|']
    li = li1 + li2 + li3   


    # 2、判断是否超出范围,是则返回ERROR
    if x < 2 or x > len(li) or x > n:  # 进制超出范围或者进制x大于要转换的十进制数
        return 'ERROR'


    # # 3、进制转换(写法一:)
    # result = ''
    # while True:
    #     m = n // x  # 商
    #     r = n % x  # 余数
    #     # print(r)
    #     if n < x:
    #         result = str(li[n]) + result   # 跳出循环前,把最后的商,拼接在最前
    #         break
    #     result = str(li[r]) + result    # 把每次的余数拼接到前面
    #     n = m

    # return result


    # 3、进制转换(写法二:)
    result=''
    while bool(n):  # 10进制 转任意进制
        result += str(li[n % x])
        n //= x
    return result[::-1]





ten=238362   # 10进制数
ans_x = converet(ten,92)  # 将10进制转化为任意进制(这里是92进制)
print(ans_x)


注意,上面例子中用大小写来拼凑字符,如果生成的数据要插入到MySQL中且作为主键的话,要将该列数据的类型设定为【varbinary】而非【varchar】,才能让mysql可以区分大小写。