鱼C论坛

 找回密码
 立即注册
查看: 2614|回复: 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 添加新元素用下面的语句就可以:
  1.     b . append(x % 2)
复制代码

        函数最后返回列表 b 要这样写
  1.     return b
复制代码

        所以,为列表 b 添加新元素并返回列表 b 写成下面这样是错误的
  1.     return b . append(x % 2)
复制代码

        必须把它们分开写成两句:
  1.     b . append(x % 2)
  2.     return b
复制代码

        
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-24 17:21:27 | 显示全部楼层
因为b.append()返回的是None,正确代码如下
  1. b = []
  2. def erjinzhi (x):
  3.     global b
  4.     if x // 2 == 0:
  5.         return b.append (x%2)
  6.     else :
  7.         b.append (x%2)
  8.         
  9.         return erjinzhi (x//2)
复制代码
小甲鱼最新课程 -> https://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 这个内置函数后面不能接自己编的函数吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 18:03:02 | 显示全部楼层
你得考虑到你在用递归,b是一个数列,你若再return b.append(原函数),将会导致内部的无限迭代。
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 18:09:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-2-24 18:14 编辑

        列表属于可修改对象,在 Python 语言中,对可修改对象的修改通过方法就完全可以做到,所以,它们的方法往往都没有返回值,无返回值的函数返回的都是 None。
        在本例中,为列表 b 添加新元素用下面的语句就可以:
  1.     b . append(x % 2)
复制代码

        函数最后返回列表 b 要这样写
  1.     return b
复制代码

        所以,为列表 b 添加新元素并返回列表 b 写成下面这样是错误的
  1.     return b . append(x % 2)
复制代码

        必须把它们分开写成两句:
  1.     b . append(x % 2)
  2.     return b
复制代码

        
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦哦好的,理解了,多谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 20:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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