鱼C论坛

 找回密码
 立即注册
查看: 1361|回复: 2

返回值问题

[复制链接]
发表于 2023-10-6 00:52:05 | 显示全部楼层 |阅读模式

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

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

x
from pythonds.basic import Stack
ub = Stack()
def jinzhizhuanhua(num, fundamention):
    dic = "0123456789ABCDEF"
    if num < fundamention:
        ub.push(dic[num])
        return ub
    else:
        ub.push(dic[num % fundamention])
        jinzhizhuanhua(int(num//fundamention),fundamention)


ub = jinzhizhuanhua(10, 2)
for i in range(ub.size()):
    print(ub.peek(), end="")

问一下为什么会有Nonetype 的错误:'NoneType' object has no attribute 'size',返回值不应该是Stack类型的吗

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-6 00:52:21 | 显示全部楼层
在函数 jinzhizhuanhua(num, fundamention) 中,当 num < fundamention 时,虽然将 num 转换成相应进制的结果压入了栈 ub 中,但没有显示地返回 ub。因此,当 num < fundamention 时,函数没有返回值,即返回 None。因此,当调用 jinzhizhuanhua(10, 2) 时,ub 并没有被赋值为 Stack 类型的对象,而是 None。因此,在调用 ub.size() 时,会出现 'NoneType' object has no attribute 'size' 的错误。

为了解决这个问题,可以在 num < fundamention 的情况下,显示地返回 ub,即 return ub。这样,当 num < fundamention 时,函数也会返回一个 Stack 类型的对象。修改后的代码如下所示:
from pythonds.basic import Stack
ub = Stack()
def jinzhizhuanhua(num, fundamention):
    dic = "0123456789ABCDEF"
    if num < fundamention:
        ub.push(dic[num])
        return ub
    else:
        ub.push(dic[num % fundamention])
        jinzhizhuanhua(int(num//fundamention),fundamention)
        return ub

ub = jinzhizhuanhua(10, 2)
for i in range(ub.size()):
    print(ub.pop(), end="")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-6 00:52:48 | 显示全部楼层
问题分析:
在函数jinzhizhuanhua中,当num小于fundamention时,执行ub.push(dic[num])return ub语句。但是在该情况下,函数没有显式地返回一个值,因此默认返回None。所以在调用jinzhizhuanhua函数后,ub的值为None,而不是期望的Stack类型。

解决方案:
在函数结束前,添加一个返回语句,返回最终的ub值。

修改后的代码如下:
from pythonds.basic import Stackdef jinzhizhuanhua(num, fundamention):    dic = "0123456789ABCDEF"    ub = Stack()  # 创建一个新的 Stack 对象    if num < fundamention:        ub.push(dic[num])        return ub    else:        ub.push(dic[num % fundamention])        return jinzhizhuanhua(int(num // fundamention), fundamention)ub = jinzhizhuanhua(10, 2)for i in range(ub.size()):    print(ub.peek(), end="")
请注意:在递归调用 jinzhizhuanhua 函数时,需要将结果返回给调用者,即使用 return jinzhizhuanhua(...) 而不是仅仅调用 jinzhizhuanhua(...)

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-28 23:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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