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


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
0
Andres G 1 Май 2019 в 06:07

3 ответа

Лучший ответ

Вы забыли использовать 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)
2
Netwave 1 Май 2019 в 03:08

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

-1
Klaus D. 1 Май 2019 в 03:14

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

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

pagos(UB,P,r,c)

Чтобы :

return pagos(UB,P,r,c)

0
ZaydH 1 Май 2019 в 05:40