Я не совсем уверен, что вы пытаетесь сделать в своем коде, поэтому вот другое решение.
Допустим, в конце первого года ваш долг будет следующим:
Долг 1 = Кредит * (1 + i) - ГУП
В конце второго года это будет:
D 2 = D 1 * (1 + i) - PMT = Кредит * (1 + i) 2 - PMT * (1 + (1 + i))
Для N-го года мы получаем:
D n = Кредит * (1 + i) n - PMT * сумма j = 0 n-1 (1 + i) j
Поскольку D n должно быть нулем, у вас есть формула для Loan
(Я почти уверен, что вы можете значительно упростить сумму, , но я не могу вспомнить, как см. Ниже):
def calculate(PMT, i, n):
return PMT * sum((1+i)**j for j in range(n)) / (1+i)**n
Вам не нужно вычислять сумму сsum(...)
так как есть формула для таких сумм:
сумма j = 0 n-1 r j = (r n - 1) / (r - 1)
Итак, вот эта формула в действии:
def calculate(PMT, i, n: int) -> float:
return PMT * ((1+i)**n - 1) / i / (1+i)**n
calculate(15_000 * 12, .1045, 25) # 1578934.728701355