我是python新手,正在尝试一个小的代码练习,在某个else块上执行return
有点麻烦。下面的代码取一个数字并将每个数字相乘,直到结果为一位数
我做错什么了
def persis(n):
convert_str = str(n)
indi_num = [int(i) for i in convert_str ]
result = reduce(lambda x,y: x*y, indi_num)
#######
final = None
new_result = str(result)
new_indi_num = [int(i) for i in new_result]
if len(new_indi_num) > 1:
persis(int(new_result))
else:
print "FINAL RESULT IS: "+str(new_indi_num)
## return str(new_indi_num) # This Returns None From here##
pas=persis(162)
print pas
这是我的指纹
FINAL RESULT IS: [2]
None
这样做有效:
这个指纹
您需要将
persis(int(new_result))
更改为return persis(int(new_result))
(并且需要取消对原始return
语句的注释)这是一个递归函数。所发生的事情是,至少有两个对这个函数的调用:一个进入
if
语句并对persis
进行另一个调用(子调用)的“父”调用,以及一个由父调用并进入else块的子调用。取消对return语句的注释后,子调用将正确返回所需的值;但是,它将这个值返回给父级,而父级对它没有任何作用。通过将persis(int(new_result))
更改为return persis(int(new_result))
,可以确保父调用返回与子调用相同的内容相关问题 更多 >
编程相关推荐