python 3.6 put number是str

时间:2017-07-08 20:57:31

标签: python

def binary(n):  
    if n>0:   
        return binary(n//2)*10 + (n%2)
    else:    
        return 0

答案是10000000,但必须是“10000000”。我怎样才能把答题放在一边?

3 个答案:

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