2010-02-18 21 views
3

可能重複:
convert integer to a string in a given numeric base in python如何在Python中使用基數5的數字?

我想和基地工作5個號碼,或與此有關的任何其他非標準基地。

我發現了int('123', 5)的作品,但我需要走相反的路。

我應該寫我自己的數字類來完成這個嗎?

也許我只是在想錯了方向......

+1

杜佩:http://stackoverflow.com/questions/2267362/convert-integer-to-a-string-in-a-given-numeric-base-in-python – kennytm

回答

3
def to_base_5(n): 
    s = "" 
    while n: 
     s = str(n % 5) + s 
     n /= 5 
    return s 
2

我與此有樂趣,而對於前一個python-dev的線程。原文可以在 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' 
+0

涼爽。適用於基數<= 10.如果將%d替換爲%x,則適用於基數<= 16。 –

相關問題