在Python中将基数6转换为十进制,反之亦然?

时间:2014-04-04 07:03:32

标签: python decimal base

我试图将数字从十进制转换为基数6,反之亦然,但它无法正常工作。似乎我没有弄清楚算法让它发挥作用。有人可以向我解释如何在Python中实现它吗?

这是一个链接(Click here),它解释了如何做到这一点,但是当我尝试使用while循环在Python中创建它时,但是它没有工作并且转向是一个无限循环。最后,我不明白如何将所有剩余部分附加在一起以形成最终价值。

由于

2 个答案:

答案 0 :(得分:1)

我希望这会对你有所帮助

def dec2hex(num):
    if num == 0:
        return 0
    ans = ""
    while num > 0:
        ans = str(num%6) + ans
        num /= 6
    return int(ans)

def hex2dec(num):
    if num == 0:
        return 0
    num = str(num)
    ans = int(num[0])
    for i in num[1:]:
        ans *= 6
        ans += int(i)
    return ans

if __name__ == '__main__':
    a = dec2hex(78)
    b = hex2dec(a)
    print a, b

输出是:

210 78

答案 1 :(得分:0)

一个方向很明确:

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

另一种方式 - 将数字转换为基数6表示 - 比较棘手。似乎没有办法使用内置函数和没有循环来实现它。

所以可以做一些像

这样的事情
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'

这给出了例如:

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

直到现在,它只适用于基数< = 10;对于其他人,您需要定义字母表字符串:

import string
alphabet = string.digits + string.ascii_lowercase

并在

这样的函数中使用它
res = alphabet[val % base] + res

它(可能)仍然不适用于负数。如果你需要这些,你必须再添加一些努力。