Калькулятор доступности ипотечного кредита - PullRequest
0 голосов
/ 30 сентября 2018

Меня попросили создать функцию: Maximum_home_loan (PMT, i, n), которая вычисляет максимальный размер ипотечного кредита, который может предоставить мой клиент, если он:

  • Может позволить себе выплатить сумму,PMT в конце каждого ГОДА (с 1-м платежом, сделанным ровно через один год)
  • с процентной ставкой i% в год, составляемой ежегодно, и
  • выплачивают дом в течениесрок n года.

Вот как я это сделал, но, думаю, сумма не складывается.

def maximum_home_loan(PMT, i, n):
       For i in range(n):
           PMT = PMT*(1 + i)**n
           PV = PMT + i
           PV = PV + PMT
           PV = round(PV, 2)
           return float(PV)
print(maximum_home_loan(15000*12, 0.1045/100, 25))

Вывод: 369523.89

И результат должен быть на самом деле: 1578934.73

Что я делаю не так?

1 Ответ

0 голосов
/ 30 сентября 2018

Я не совсем уверен, что вы пытаетесь сделать в своем коде, поэтому вот другое решение.

Допустим, в конце первого года ваш долг будет следующим:

Долг 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
...