我试图在python函数中创建一个十进制数字三元组。我的想法是继续划分,直到商和余数相等,但我似乎无法让它发挥作用。这是我的代码:
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
答案 0 :(得分:9)
是的,类似的东西。基本上,你想要继续除以3,并收集余数。然后剩余部分构成最终数字。在Python中,您可以使用我的想法是继续划分,直到商和余数相等,但我似乎无法让它发挥作用。
divmod
来划分和收集余数。
def ternary (n):
if n == 0:
return '0'
nums = []
while n:
n, r = divmod(n, 3)
nums.append(str(r))
return ''.join(reversed(nums))
示例:
>>> ternary(0)
'0'
>>> ternary(1)
'1'
>>> ternary(2)
'2'
>>> ternary(3)
'10'
>>> ternary(12)
'110'
>>> ternary(22)
'211'
答案 1 :(得分:6)
这也可以通过递归完成。
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)
更一般地说,您可以使用以下递归函数转换为任何基数b
(其中2<=b<=10
)。
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)
答案 2 :(得分:2)
import numpy as np
number=100 # decimal
ternary=np.base_repr(number,base=3)
print(ternary)
#10201