如何在Python中处理五进制数字?

5 投票
2 回答
16613 浏览
提问于 2025-04-15 19:26

可能是重复的问题:
在Python中将整数转换为给定数字基数的字符串

我想处理5进制的数字,或者说其他一些不常见的进制。

我发现 int('123', 5) 这个方法可以用,但我需要反过来做。

我是不是应该自己写一个数字类来实现这个功能呢?

也许我只是想错了方向……

2 个回答

3

我之前在一个关于Python开发的讨论中玩得很开心。原帖可以在这里找到: http://mail.python.org/pipermail/python-dev/2006-January/059925.html 这个特定的算法还可以处理浮点数的进制。

#!/usr/bin/env python
import math

def ibase(n, radix=2, maxlen=None):
    r = []
    while n:
        n,p = divmod(n, radix)
        r.append('%d' % p)
        if maxlen and len(r) > maxlen:
            break
    r.reverse()
    return ''.join(r)

def fbase(n, radix=2, maxlen=8):
    r = []
    f = math.modf(n)[0]
    while f:
        f, p = math.modf(f*radix)
        r.append('%.0f' % p)
        if maxlen and len(r) > maxlen:
            break
    return ''.join(r)

def base(n, radix, maxfloat=8):
    if isinstance(n, float):
        return ibase(n, radix)+'.'+fbase(n, radix, maxfloat)
    elif isinstance(n, (str, unicode)):
        n,f = n.split('.')
        n = int(n, radix)
        f = int(f, radix)/float(radix**len(f))
        return n + f
    else:
        return ibase(n, radix)

if __name__=='__main__':
    pi = 3.14
    print 'pi:', pi, 'base 10'

    piBase3 = base(pi, 3)
    print 'pi:', piBase3, 'base 3'

    piFromBase3 = base(piBase3, 3)
    print 'pi:', piFromBase3, 'base 10 from base 3'
6
def to_base_5(n):
    s = ""
    while n:
        s = str(n % 5) + s
        n /= 5
    return s

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答