def binary(n):
if n>0:
return binary(n//2)*10 + (n%2)
else:
return 0
答案是10000000,但必须是“10000000”。我怎样才能把答题放在一边?
答案 0 :(得分:1)
在python中,要更改任何类型的类型,您唯一需要做的就是将其包含在str()
,int()
,float()
...或您想要的任何类型中改为。
更多详情:http://usingpython.com/python-casting/
编辑:抱歉,没有意识到递归问题,但是,我不明白为什么你不能在函数返回后改变类型,这似乎是最简单的事情。
如果你坚持:
def binary(n):
if int(n)>0:
return str( int(binary(str(int(n)//2)))*10 + (int(n)%2))
else:
return str(0)
答案 1 :(得分:0)
我建议您使用如下所示的嵌套/内部函数来解决您的问题。这允许您使用整数计算结果,然后在返回之前将结果转换为字符串或任何其他类型。
def binary(n):
def inner(m):
if m>0:
return inner(m//2)*10 + (m%2)
else:
return 0
return str(inner(n))
或者,您可以在使用时将n强制转换为正确的类型。在我看来,这是解决问题的可怕方法,但它应该仍然可以解决问题。
def binary(n):
if int(n) > 0:
return str(int(binary(n//2))*10 + n%2)
else:
return "0"
答案 2 :(得分:0)
简单地将回复包含在投放到str()
的问题是,对binary()
的后续调用将受到影响,而不仅仅是顶级调用。在对二进制文件的最深递归调用完成后,它将返回其结果 - 这是一个字符串 - 到下一个对表达式的最深的递归调用:
binary(n // 2) * 10 + (n % 2)
但是由于返回值是一个字符串,因此在表达式中使用时会失败。
显而易见的解决方案是简单地将binary()
的返回值转换为来自调用它的任何地方的字符串。但是,如果由于某种原因你无法做到这一点,你可以在binary
下嵌套第二个函数,在binary()
的中调用此函数,并将其结果转换为字符串:
>>> def binary(n):
def _binary(n):
if n > 0:
return _binary(n // 2) * 10 + (n % 2)
else:
return 0
return str(_binary(n))
>>> binary(128)
'10000000'
>>> binary(64)
'1000000'
>>> binary(32)
'100000'
>>> binary(16)
'10000'
>>> binary(8)
'1000'
>>> binary(4)
'100'
>>> binary(2)
'10'
>>>
正如@StefanPochmann指出的那样,这种方法也可行:
def binary(n):
return binary(n // 2) + str(n % 2) if n > 1 else str(n)