到目前为止,这是我的代码:
import string
def convert(num,base):
if num==0:
return
else:
remainder = num%base
num = num//base
b=(str(remainder))
print(b[::-1],end="")
return convert(num,base)
而不是打印这个:
>>> convert(29,3)
2001
我需要像这样向后打印它(它需要用字符串来完成):
>>> convert(29,3)
1002
似乎字符串不适用于递归:
>>> convert(29,3)
('2', ('0', ('0', ('1', None))))
答案 0 :(得分:3)
只需更改打印和递归的顺序:
import string
def convert(num,base):
if num==0:
return
remainder = num % base
num = num // base
convert(num, base)
print(remainder, end="")
>>> convert(29,3)
1002
不知道convertBase()
是什么。
答案 1 :(得分:1)
投入0.02美元。我会选择返回整个字符串,而不是在你去的时候打印它。
def convert(num, base):
if num == 0:
return ''
num, remainder = divmod(num, base)
return convert(num, base) + str(remainder)
EDIT 也可以使用内置的divmod来计算num和余数。
答案 2 :(得分:0)
你的递归函数在它有一个exit子句(if num == 0:
)的意义上是正确的,但是由于递归函数的性质,执行顺序将与你想要打印出来的顺序相反。这里需要做的是继续将余数添加到列表中,最后当你点击退出子句时,反转该列表并打印它。
import string
def convert(num, base, rem_list=None):
if not rem_list:
rem_list = []
if num == 0:
rem_list.reverse()
print "".join(rem_list)
else:
remainder = num % base
num = num // base
rem_list.append(str(remainder))
return convert(num, base, rem_list)
>>> convert(29, 3)
1002
>>> convert(29, 3)
1002