在python中将十进制转换为三元组(base3)

时间:2016-01-01 20:16:10

标签: python

我试图在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

3 个答案:

答案 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