Convertir decimal a ternario (base3) en python

Estoy tratando de hacer un número decimal ternario en una función de python. Mi idea era seguir dividiendo hasta que el cociente y el rest fueran iguales, pero parece que no puedo hacer que eso funcione. Aquí está mi código:

l = 1 #problem code def ternary(n): e = n/3 q = n%3 e= n/3 q= e%3 print q r = input("What number should I convert?: ") k = bin(r) v = hex(r) i = oct(r) print k+"(Binary)" print v+"(Hex)" print i+"(Octals)" ternary(r) l+=1 # Variables: #l,r,k,v,i #n,q,e 

Mi idea era seguir dividiendo hasta que el cociente y el rest fueran iguales, pero parece que no puedo hacer que eso funcione.

Si algo como eso. Esencialmente, usted quiere seguir dividiendo por 3, y recoger los residuos. Los rests forman el número final. En Python, puedes usar divmod para dividir y recolectar el rest.

 def ternary (n): if n == 0: return '0' nums = [] while n: n, r = divmod(n, 3) nums.append(str(r)) return ''.join(reversed(nums)) 

Ejemplos:

 >>> ternary(0) '0' >>> ternary(1) '1' >>> ternary(2) '2' >>> ternary(3) '10' >>> ternary(12) '110' >>> ternary(22) '211' 

Esto también puede hacerse con recursión.

 def ternary(n): e = n//3 q = n%3 if n == 0: return '0' elif e == 0: return str(q) else: return ternary(e) + str(q) 

Más generalmente, puedes convertir a cualquier base b (donde 2<=b<=10 ) con la siguiente función recursiva.

 def baseb(n, b): e = n//b q = n%b if n == 0: return '0' elif e == 0: return str(q) else: return baseb(e, b) + str(q)