返回值问题
from pythonds.basic import Stackub = Stack()
def jinzhizhuanhua(num, fundamention):
dic = "0123456789ABCDEF"
if num < fundamention:
ub.push(dic)
return ub
else:
ub.push(dic)
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类型的吗 在函数 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)
return ub
else:
ub.push(dic)
jinzhizhuanhua(int(num//fundamention),fundamention)
return ub
ub = jinzhizhuanhua(10, 2)
for i in range(ub.size()):
print(ub.pop(), end="")
问题分析:
在函数jinzhizhuanhua中,当num小于fundamention时,执行ub.push(dic)和return ub语句。但是在该情况下,函数没有显式地返回一个值,因此默认返回None。所以在调用jinzhizhuanhua函数后,ub的值为None,而不是期望的Stack类型。
解决方案:
在函数结束前,添加一个返回语句,返回最终的ub值。
修改后的代码如下:
from pythonds.basic import Stack
def jinzhizhuanhua(num, fundamention):
dic = "0123456789ABCDEF"
ub = Stack()# 创建一个新的 Stack 对象
if num < fundamention:
ub.push(dic)
return ub
else:
ub.push(dic)
return jinzhizhuanhua(int(num // fundamention), fundamention)
ub = jinzhizhuanhua(10, 2)
for i in range(ub.size()):
print(ub.peek(), end="")
请注意:在递归调用 jinzhizhuanhua 函数时,需要将结果返回给调用者,即使用 return jinzhizhuanhua(...) 而不是仅仅调用 jinzhizhuanhua(...)。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]