返回未放置在右侧b

2024-10-04 07:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 代码innoneconvertnewforreturn数字
2条回答

这样做有效:

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

您需要将persis(int(new_result))更改为return persis(int(new_result))(并且需要取消对原始return语句的注释)

这是一个递归函数。所发生的事情是,至少有两个对这个函数的调用:一个进入if语句并对persis进行另一个调用(子调用)的“父”调用,以及一个由父调用并进入else块的子调用。取消对return语句的注释后,子调用将正确返回所需的值;但是,它将这个值返回给父级,而父级对它没有任何作用。通过将persis(int(new_result))更改为return persis(int(new_result)),可以确保父调用返回与子调用相同的内容

相关问题 更多 >