|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 hyftee 于 2017-6-11 22:52 编辑
def bin1(x):
if x:
return(bin1(x//2) + str(x%2))
这个函数在我第一次完成测试的时候 输入数字是正常显示转换出的二进制字符串
关掉后shell后再调用却出现这个报错
bin1(4)
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
bin1(4)
File "C:\Users\19579\AppData\Local\Programs\Python\Python36\递归bin()函数.py", line 3, in bin1
return(bin1(x//2) + str(x%2))
File "C:\Users\19579\AppData\Local\Programs\Python\Python36\递归bin()函数.py", line 3, in bin1
return(bin1(x//2) + str(x%2))
File "C:\Users\19579\AppData\Local\Programs\Python\Python36\递归bin()函数.py", line 3, in bin1
return(bin1(x//2) + str(x%2))
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
显示有个Nonetype
然后我将函数改为
def bin1(x):
if x:
return(str(bin1(x//2)) + str(x%2))
>>> bin1(19)
'None10011'
None被转为一个字符串输出了
一个问题是.这个None是不是在x等于0的时候产生的,如果是的话怎么更改好
还有一个问题是我确认第一次调用确认是执行成功的 为什么关掉shell后重新调用就报错了
-------------------------------------------------------------------------
感谢大家解答 我取巧将函数改成这样了 输出和bin()一样了
def bin1(x):
if x:
return(bin1(x//2) + str(x%2))
else:
return('0b')
测试
>>> bin(9)
'0b1001'
>>> bin1(9)
'0b1001'
>>> bin(56789)
'0b1101110111010101'
>>> bin1(56789)
'0b1101110111010101'
>>>
------------------------------------------------------------------------
在做第二题的时候想到一个终极方案
在x为0时直接返回一个''完美解决
def bin1(x):
if x:
return(bin1(x//2) + str(x%2))
else:
return''
>>> bin1(789456)
'11000000101111010000'
>>> bin(789456)
'0b11000000101111010000'
>>>
你的程序如果递归到x=0,则会返回None,所以会报错。
除了小甲鱼的答案外,按照你的程序做个修改如下:
- def bin1(x):
- if x == 0:
- return '0'
- elif x == 1:
- return '1'
- else:
- return bin1(x//2) + str(x%2)
复制代码
|
|