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)