可能重複:
convert integer to a string in a given numeric base in python如何在Python中使用基數5的數字?
我想和基地工作5個號碼,或與此有關的任何其他非標準基地。
我發現了int('123', 5)
的作品,但我需要走相反的路。
我應該寫我自己的數字類來完成這個嗎?
也許我只是在想錯了方向......
可能重複:
convert integer to a string in a given numeric base in python如何在Python中使用基數5的數字?
我想和基地工作5個號碼,或與此有關的任何其他非標準基地。
我發現了int('123', 5)
的作品,但我需要走相反的路。
我應該寫我自己的數字類來完成這個嗎?
也許我只是在想錯了方向......
def to_base_5(n):
s = ""
while n:
s = str(n % 5) + s
n /= 5
return s
我與此有樂趣,而對於前一個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'
涼爽。適用於基數<= 10.如果將%d替換爲%x,則適用於基數<= 16。 –
杜佩:http://stackoverflow.com/questions/2267362/convert-integer-to-a-string-in-a-given-numeric-base-in-python – kennytm