鱼C论坛

 找回密码
 立即注册
查看: 2329|回复: 6

[已解决]递归法把十进制转换成二进制

[复制链接]
发表于 2020-2-24 17:08:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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是这样一个列表
[0, 1, 0, 1, None, None, None]
这里那么多None是哪里冒出来的啊,求大佬解答一下
最佳答案
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
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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)的时候是这样的:
[0, 1, 0, 1, [...], [...]]
改成这样
b = []
def erjinzhi (x):
    if x // 2 == 0:
        return b.append (x)
    else :
        b.append (x%2)
        erjinzhi (x//2)
        return b
就正常了
这两段代码不应该是一个意思吗,是说append 这个内置函数后面不能接自己编的函数吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 18:03:02 | 显示全部楼层
你得考虑到你在用递归,b是一个数列,你若再return b.append(原函数),将会导致内部的无限迭代。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 19:28:49 | 显示全部楼层
jackz007 发表于 2020-2-24 18:09
列表属于可修改对象,在 Python 语言中,对可修改对象的修改通过方法就完全可以做到,所以,它们的 ...

哦哦好的,理解了,多谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 10:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表