退货不在正确的位置

时间:2019-03-03 17:15:30

标签: python python-2.7

我是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

2 个答案:

答案 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)),可以确保父级调用返回与子级相同的结果。