返回语句未传递值

时间:2019-05-01 03:07:27

标签: python recursion return

这里的新手总数……下面的代码中的return语句未传递该函数计算的值。有人有什么想法吗?


def pagos(B,P,r,c):
    UB = (B-P)*(1+(r/12)) 

    if (c==12):
        print(UB) #This is to establish if UB is actually reaching return statement#
        return UB
    c +=1
    pagos(UB,P,r,c)

P=200
B=10000
r=0.2
c=0

R = pagos(B,P,r,c)

print("Answer :"+str(R))```

9472.628606761953                                                                                                                                                                  
Answer :None

3 个答案:

答案 0 :(得分:2)

您忘记在递归调用中使用return

def pagos(B,P,r,c):
    UB = (B-P)*(1+(r/12)) 

    if (c==12):
        print(UB)
        return UB
    c +=1
    return pagos(UB,P,r,c)

答案 1 :(得分:0)

您的问题涉及一个更复杂的想法。某些语言(例如Ruby)具有内置的返回值,在这些返回值中,最后的计算结果会从函数中自动返回-无论您是否告诉它。不管是好是坏(我会说是好的),Python都不那么友好。

如果Python到达函数末尾而没有遇到返回,则它将自动返回None。您可以将基于C语言的None想象为null。正如其他人所评论的那样,您需要在递归调用上显式返回。因此,请从以下位置更改pagos函数中的最后一行:

pagos(UB,P,r,c)

收件人:

return pagos(UB,P,r,c)

答案 2 :(得分:-1)

您应class Thing(models.Model): alpha = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name='alpha_thing') beta = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name='beta_thing') assigned_at = models.DateTimeField( _('assigned at'), null=True, help_text=_('Assigned at this date')) 进行递归过程。