鱼C论坛

 找回密码
 立即注册
查看: 1584|回复: 13

[已解决]递归问题

[复制链接]
发表于 2023-7-13 11:30:01 | 显示全部楼层 |阅读模式

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

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

x
# 0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。
list =[]
def bin(x):
    if x == 1:
        list.append(1)
        print(str(list.reverse()))
        return 1
    elif x % 2 == 0:
        list.append(0)
        return bin(x / 2)
    elif x % 2 == 1:
        list.append(1)
        return bin(x // 2)
   
bin(152)
不知道为什么会输出None
求指点
最佳答案
2023-7-13 11:30:38
在你的代码中,出现了一些问题导致输出为None。以下是你提供的代码中存在的问题和如何修复它们:

1. list 是Python中的保留关键字,不能作为变量名使用。请避免使用list作为变量名,以免引起命名冲突。将其改为其他名称,比如result

2. 当调用list.reverse()时,它会原地反转列表,并返回None。所以,str(list.reverse()) 实际上返回None。你可以先反转列表,然后再将其转换为字符串。

修复后的代码如下:
def decimal_to_binary(x):    result = []    if x == 0:        return '0'    elif x == 1:        result.append(1)    elif x % 2 == 0:        result.append(0)        result.extend(decimal_to_binary(x // 2))    else:        result.append(1)        result.extend(decimal_to_binary(x // 2))    return ''.join(map(str, result[::-1]))print(decimal_to_binary(152))  # 输出: '10011000'
在修复后的代码中,我将函数名从bin改为了decimal_to_binary,并创建了一个空的result列表来保存二进制数的每一位。递归地调用函数来转换除以2后的整数部分,并将余数添加到result列表中。最后,将result反转并将其连接为一个字符串,并返回结果。

希望这可以解决你的问题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-13 11:30:38 | 显示全部楼层    本楼为最佳答案   
在你的代码中,出现了一些问题导致输出为None。以下是你提供的代码中存在的问题和如何修复它们:

1. list 是Python中的保留关键字,不能作为变量名使用。请避免使用list作为变量名,以免引起命名冲突。将其改为其他名称,比如result

2. 当调用list.reverse()时,它会原地反转列表,并返回None。所以,str(list.reverse()) 实际上返回None。你可以先反转列表,然后再将其转换为字符串。

修复后的代码如下:
def decimal_to_binary(x):    result = []    if x == 0:        return '0'    elif x == 1:        result.append(1)    elif x % 2 == 0:        result.append(0)        result.extend(decimal_to_binary(x // 2))    else:        result.append(1)        result.extend(decimal_to_binary(x // 2))    return ''.join(map(str, result[::-1]))print(decimal_to_binary(152))  # 输出: '10011000'
在修复后的代码中,我将函数名从bin改为了decimal_to_binary,并创建了一个空的result列表来保存二进制数的每一位。递归地调用函数来转换除以2后的整数部分,并将余数添加到result列表中。最后,将result反转并将其连接为一个字符串,并返回结果。

希望这可以解决你的问题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 12:12:01 | 显示全部楼层
陶远航 发表于 2023-7-13 11:30
在你的代码中,出现了一些问题导致输出为None。以下是你提供的代码中存在的问题和如何修复它们:

1. list  ...

你不是被取消资格了吗@sfqxx @isdkz

点评

脚本OK?  发表于 2023-7-13 12:35
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 12:34:40 From FishC Mobile | 显示全部楼层
歌者文明清理员 发表于 2023-7-13 12:12
你不是被取消资格了吗@sfqxx @isdkz

6

点评

被取消资格了脚本开着没用啊,还对论坛服务器有伤害  发表于 2023-7-13 12:37
所以有没有被取消?!  发表于 2023-7-13 12:35
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 12:39:36 | 显示全部楼层
歌者文明清理员 发表于 2023-7-13 12:12
你不是被取消资格了吗@sfqxx @isdkz

是的,小甲鱼明确跟我说这个月取消了
但是最佳答案是最快的加积分的方式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 12:40:11 | 显示全部楼层
陶远航 发表于 2023-7-13 12:39
是的,小甲鱼明确跟我说这个月取消了
但是最佳答案是最快的加积分的方式

@sfqxx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 12:41:39 | 显示全部楼层
(人工回答)
Snipaste_2023-07-13_12-38-16.png

reverse() 只是反转列表,并不返回内容,你 print(print("text"))不也输出的None?(对于外面的print)
你可以自定义一个函数,不返回任何内容,在print一下不就是NOne?
你可以这样改:
list.reverse()
print(list)
或者:
list = list[::-1]
至于还有一种方法,因为你变量名用了list所以就用不了了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 12:48:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 12:49:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-13 13:41:03 | 显示全部楼层
陶远航 发表于 2023-7-13 12:39
是的,小甲鱼明确跟我说这个月取消了
但是最佳答案是最快的加积分的方式

我觉得还是技术贴,一个最佳5积分好像
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 14:00:46 | 显示全部楼层
sfqxx 发表于 2023-7-13 13:41
我觉得还是技术贴,一个最佳5积分好像

技术贴得有人评分啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 18:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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