оператор возврата не передает значение - PullRequest
0 голосов
/ 01 мая 2019

Всего новичков здесь ...... Оператор возврата в следующем коде не передает значение, вычисленное функцией. У кого-нибудь есть идеи?


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 ]

2 голосов
/ 01 мая 2019

Вы забыли использовать 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)
0 голосов
/ 01 мая 2019

Ваш вопрос доходит до более сложной идеи. Некоторые языки (например, Ruby) имеют встроенные функции возврата, при которых последний вычисленный результат автоматически возвращается из функции - независимо от того, говорите вы это или нет. Хорошо это или плохо (я бы сказал, хорошо), что Python не такой дружелюбный.

Если Python достигает конца функции без возврата, он автоматически возвращает None. Вы можете думать о None как null на языке Си. Как прокомментировали другие, вам нужен явный возврат рекурсивного вызова. Поэтому измените свою последнюю строку в функции pagos с:

pagos(UB,P,r,c)

до:

return pagos(UB,P,r,c)

0 голосов
/ 01 мая 2019

Вы должны return pagos(UB,P,r,c) для рекурсивной процедуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...