为什么没有工作回报?代码有效,但测试失败。 #Different介于print()和return之间

时间:2017-01-29 20:15:44

标签: python-3.x return

prim(n)是我编写的函数,它检查数字n是否为正数。 prim_2(n)会返回所有素数的列表,直到n。

prim_liste = []
def prim_2(n):
    if n == 1:
        prim_liste.reverse()
        print(prim_liste)  # return prim_liste doesn't work. 
    elif n > 1: 
        if prim(n) == "Is prim":
            prim_liste.append(n)
            prim_2(n-1)                
        elif prim(n) == "Is not prim":
            prim_2(n-1)

如果我将print(prim_liste)替换为return prim_liste,我的测试无论如何都会失败。

  

prim_2(5)== [2,3,5]

虽然我的代码有效,但确实返回False。

当我使用return prim_liste运行程序时,它什么也没发生。 使用print(prim_liste)它会"返回"正确的结果。

谢谢你的帮助! :)对不起,我的英文不好,这个令人困惑的帖子。

3 个答案:

答案 0 :(得分:0)

您还需要在递归中使用return prim_2(n-1),否则函数不会返回除1以外的任何内容。

在一种情况下,单个返回不会从整个递归返回,只能从该阶段返回,并且对该函数的所有其他调用也必须返回一个值。

答案 1 :(得分:0)

您应该会在代码中看到打印出的清单。如果没有,prim()肯定有问题。如果您需要prim_2()返回主要列表,则需要执行以下操作。

prim_liste = []

def prim_2(n):
    if n == 1:
        prim_liste.reverse()
        return prim_liste   
    elif n > 1: 
        if prim(n) == "Is prim":
            prim_liste.append(n)
        # test for "Is not prim" is not necessary.
        return prim_2(n-1)  # be sure to return what prim_2() returns              

答案 2 :(得分:0)

我的错误是我在递归中没有使用return。 所以它无法给我一个结果。 使用print()它向我展示了结果,但测试无法正常工作,因为如果不使用return,函数只返回None。 因为我的所有测试都失败了,尽管代码似乎是正确的。

prim_liste = []
def prim_2(n):
    if n == 1:
        prim_liste.reverse()
        return prim_liste     
    elif n > 1: 
        if prim(n) == "Is prim":
            prim_liste.append(n)
            return prim_2(n-1)                
    else:
        return prim_2(n-1)