所有,我有这段代码,对于我一生来说,我不知道如何解决此TypeError。
def dtobr(n):
if n == 0:
return 0
else:
return (n % 2) + 10 * dtobr(int(n / 2))
我需要它以字符串形式返回(类的项目要求)。数学是正确的,但是当我将最后一行更改为
return str((n % 2) + 10 * dtobr(int(n / 2)))
我明白了
“ TypeError:+不支持的操作数类型:'int'和'str'”。
我尝试将"return (n % 2) + 10 * dtobr(int(n / 2))"
设置为x
,将y
设置为int(x)
并返回y
,但我一无所知(而Google没有提供我可以尝试解决的任何解决方案)我还能做些什么。任何想法都会有所帮助!
答案 0 :(得分:1)
对返回值执行str()
意味着所有递归调用也将返回一个str
,因此您需要将这些返回值转换回一个int
,例如:
def dtobr(n):
if n == 0:
return '0'
else:
return str((n % 2) + 10 * int(dtobr(n // 2)))
In []:
dtobr(10)
Out[]:
'1010'
或者仅使用辅助函数进行转换:
def dtobr(n):
return str(dtobr_(n))
def dtobr_(n):
if n == 0:
return 0
else:
return (n % 2) + 10 * dtobr_(n // 2)
In []:
dtobr(10)
Out[]:
'1010'
但是我不明白为什么仅呼叫str(dtobr(10))
会带来同样的后果。
请注意://
是整数除法,因此您不需要int(n/2)
,n//2
会做到。
答案 1 :(得分:0)
您可以执行以下操作:
def dtobr(n):
n = int(n)
if n == 0:
return 0
else:
return str((n % 2) + 10 * int(dtobr(int(n / 2))))
答案 2 :(得分:0)
到目前为止,提供的两种解决方案都涉及到str
和int
的转换,然后再转换回来。我认为这不是必需的,我们可以不用int()
和乘法来解决这个问题:
def dtobr(n):
if n == 0:
return '0'
return dtobr(n // 2).lstrip('0') + str(n % 2)
诀窍是在当前数字之前进行递归,而不是相反。这样可以避免转换回int和乘以10。
示例
>>> dtobr(12)
'1100'
>>>