我是python的新手,正在尝试一些小的代码练习,在某些其他块执行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
答案 0 :(得分:3)
这有效:
from functools import reduce
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:
return persis(int(new_result))
else:
print "FINAL RESULT IS: "+str(new_indi_num[0])
return new_indi_num[0]
pas=persis(162)
print pas
此打印
FINAL RESULT IS: 2
2
答案 1 :(得分:0)
您需要将persis(int(new_result))
更改为return persis(int(new_result))
(并且需要取消对原始return
语句的注释)。
这是一个递归函数。发生的情况是,至少有两个对该函数的调用:一个“父”调用,它输入if
语句并再次调用persis
(子调用),而子调用是由父级调用并进入else块。取消注释return语句后,子调用将正确返回所需的值;但是,它会将此值返回给父级,而父级不会对其执行任何操作。通过将persis(int(new_result))
更改为return persis(int(new_result))
,可以确保父级调用返回与子级相同的结果。