雨谷 发表于 2020-2-24 17:08:24

递归法把十进制转换成二进制

b = []
def erjinzhi (x):
    global b
    if x // 2 == 0:
      return b.append (x%2)
    else :
      b.append (x%2)
      return b.append (erjinzhi (x//2))
我是这样写的
运行 erjinzhi(10)后得到的b是这样一个列表

这里那么多None是哪里冒出来的啊,求大佬解答一下

ouyunfu 发表于 2020-2-24 17:21:27

因为b.append()返回的是None,正确代码如下b = []
def erjinzhi (x):
    global b
    if x // 2 == 0:
      return b.append (x%2)
    else :
      b.append (x%2)
      
      return erjinzhi (x//2)

雨谷 发表于 2020-2-24 17:38:41

ouyunfu 发表于 2020-2-24 17:21
因为b.append()返回的是None,正确代码如下

b = []
def erjinzhi (x):
    if x // 2 == 0:
      return x
    else :
      b.append (x%2)
      b.append (erjinzhi (x//2))
      return b
那为什么我把代码变成了这样,但是,运行erjinzhi(10)的时候是这样的:
, [...]]
改成这样
b = []
def erjinzhi (x):
    if x // 2 == 0:
      return b.append (x)
    else :
      b.append (x%2)
      erjinzhi (x//2)
      return b
就正常了
这两段代码不应该是一个意思吗,是说append 这个内置函数后面不能接自己编的函数吗

ouyunfu 发表于 2020-2-24 18:03:02

你得考虑到你在用递归,b是一个数列,你若再return b.append(原函数),将会导致内部的无限迭代。

python/print 发表于 2020-2-24 18:09:31

a = 0b00000110
b = int(a)
print(b)
# 2-10

c = oct(a)
print(c)
# 2-8

d = hex(a)
print(d)
#2-16
e = 6
# 10进制

f = bin(e)
print(f)
#10-2

jackz007 发表于 2020-2-24 18:09:53

本帖最后由 jackz007 于 2020-2-24 18:14 编辑

      列表属于可修改对象,在 Python 语言中,对可修改对象的修改通过方法就完全可以做到,所以,它们的方法往往都没有返回值,无返回值的函数返回的都是 None。
      在本例中,为列表 b 添加新元素用下面的语句就可以:
    b . append(x % 2)
      函数最后返回列表 b 要这样写
    return b
      所以,为列表 b 添加新元素并返回列表 b 写成下面这样是错误的
    return b . append(x % 2)
      必须把它们分开写成两句:
    b . append(x % 2)
    return b
      

雨谷 发表于 2020-2-24 19:28:49

jackz007 发表于 2020-2-24 18:09
列表属于可修改对象,在 Python 语言中,对可修改对象的修改通过方法就完全可以做到,所以,它们的 ...

哦哦好的,理解了,多谢
页: [1]
查看完整版本: 递归法把十进制转换成二进制