扫雷僧 发表于 2020-11-25 16:44:16

python 024课后作业(10进制转2进制)疑问



def ddd(n):
    odd=" "
    while n:                        
      zjl=str(ddd(n//2))
      odd=zjl+str(n%2)
      return odd

输出结果前有个“None”,为什么出现这个情况

jackz007 发表于 2020-11-25 16:48:15

本帖最后由 jackz007 于 2020-11-25 16:55 编辑

      函数在无返回值时返回的就是 None,一个函数不可以有些时候有返回值,而另一些时候却没有,必须始终如一,有就始终有,没有就始终没有。
      你的递归函数写的很有问题,已经帮你改正
def ddd(n):
    if n:                        
      return ddd(n // 2) + str(n % 2)
    else:
      return ""

扫雷僧 发表于 2020-11-25 17:20:04

jackz007 发表于 2020-11-25 16:48
函数在无返回值时返回的就是 None,一个函数不可以有些时候有返回值,而另一些时候却没有,必须始 ...

感谢
n=1时,n//2=0,这时ddd(n//2)无返回值,会返回None
是这样的吧

jackz007 发表于 2020-11-25 17:53:55

扫雷僧 发表于 2020-11-25 17:20
感谢
n=1时,n//2=0,这时ddd(n//2)无返回值,会返回None
是这样的吧

      你的代码是 while 的死循环,如果你要写 while n 的话,那就必须在循环体内修改 n,并确保 n 一定有等于 0 的时候,否则,就一定是死循环。
      你的代码还有一个问题,就是把 return 语句写进了 while 循环内部,在 Python 中,代码块是严格按缩进进行分级的,所以,一定要把握好代码的缩进层次。
页: [1]
查看完整版本: python 024课后作业(10进制转2进制)疑问