为什么输出无?

时间:2018-10-24 16:38:08

标签: python recursion output

帮助,我正在尝试创建一个使用模数来打印可被整数整除的数字的函数,在这种情况下,该整数是17的倍数:

def nextDivisible(n):
    if n % 17 == 0:
        print n
    else:
        nextDivisible(n+1)

但是输出例如:

n: 93 next divisible:  102
None
n: 59 next divisible:  68
None

为什么没有None ?!以及如何删除它,谢谢!

2 个答案:

答案 0 :(得分:0)

您不需要:

print(nextDivisible(n))

我认为您会打印None,因为您的函数未返回任何内容。打印函数的返回值也是多余的,因为您在循环内打印了数字。

您需要的是:

nextDivisible(n)

它将打印可分割的数字。

如果您在其他功能中使用nextDivisible(),则根据您使用它的方式的性质,可能不需要返回语句。

出于所有意图和目的,这应该可以正常工作。

和python 3.x:

x = [x for x in range(1000)]
def nextDivisible(x, mod=17):
    c = 0
    for n in x:
        if n % mod == 0:
            print(n)
            c += 1
        else: 
            #nextDivisible(n+1)
            pass
    print('{} numbers divisible by {} in {}'.format(c, mod, len(x)))
nextDivisible(x)

预期输出:

59 total numbers divisible by 17 in 1000

答案 1 :(得分:0)

我认为您的问题是您正在打印结果,而不是从函数返回结果。

如果您将代码更改为这样,则应该对其进行修复:

def nextDivisible(n):
    if n % 17 == 0:
        return n
    return nextDivisible(n + 1)

此方法与递归的工作方式是,将反复调用函数nextDivisible,直到函数达到n17整除的基本情况为止。发生这种情况时,它将一路返回n并将递归堆栈备份到完成对函数的首次首次调用的位置。

您也不需要else语句,因为return语句超出了功能代码的范围。但是有时候else有利于提高可读性。