2010-02-18 5 views
3

Possible en double:
convert integer to a string in a given numeric base in pythonComment puis-je travailler avec des nombres de base 5 en Python?

Je veux travailler avec la base 5 chiffres ou toute autre base non standard pour cette matière. J'ai découvert int('123', 5) fonctionne, mais je dois aller dans l'autre sens.

Est-ce que je devrais écrire ma propre classe de nombre pour accomplir ceci?

Peut-être que je suis en train de penser dans la mauvaise direction ...

+1

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

Répondre

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

Je me suis amusé avec cela il y a un certain temps pour un thread python-dev. Le message original peut être trouvé à http://mail.python.org/pipermail/python-dev/2006-January/059925.html Cet algorithme particulier peut également effectuer des bases de virgule flottante.

#!/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

cool. Fonctionne pour radix <= 10. si vous remplacez% d avec% x, fonctionne pour radix <= 16. –

Questions connexes