web-dev-qa-db-fra.com

Calcul des intérêts hypothécaires en Python

J'apprends actuellement python par le biais d'un didacticiel vidéo sur youtube, et je me suis heurté à une formule que je n'arrive pas à comprendre, car rien ne me convient. Le concept de base de l’exercice consiste à créer une calculatrice hypothécaire qui demande à l’utilisateur de saisir 3 informations, montant du prêt, taux d’intérêt et durée du prêt (années).

ensuite, il calcule les paiements mensuels à l'utilisateur. voici mon code: 

__author__ = 'Rick'
# This program calculates monthly repayments on an interest rate loan/mortgage.

loanAmount = input("How much do you want to borrow? \n")
interestRate = input("What is the interest rate on your loan? \n")
repaymentLength = input("How many years to repay your loan? \n")

#converting the string input variables to float
loanAmount = float(loanAmount)
interestRate = float(interestRate)
repaymentLength = float(repaymentLength)

#working out the interest rate to a decimal number
interestCalculation = interestRate / 100

print(interestRate)
print(interestCalculation)

#working out the number of payments over the course of the loan period.
numberOfPayments = repaymentLength*12

#Formula
#M = L[i(1+i)n] / [(1+i)n-1]

#   * M = Monthly Payment (what were trying to find out)
#   * L = Loan Amount (loanAmount)
#   * I = Interest Rate (for an interest rate of 5%, i = 0.05 (interestCalculation)
#   * N = Number of Payments (repaymentLength)

monthlyRepaymentCost = loanAmount * interestCalculation * (1+interestCalculation) * numberOfPayments / ((1+interestCalculation) * numberOfPayments - 1)
#THIS IS FROM ANOTHER BIT OF CODE THAT IS SUPPOSE TO BE RIGHT BUT ISNT---
# repaymentCost = loanAmount * interestRate * (1+ interestRate) * numberOfPayments  / ((1 + interestRate) * numberOfPayments -1)

#working out the total cost of the repayment over the full term of the loan
totalCharge = (monthlyRepaymentCost * numberOfPayments) - loanAmount


print("You want to borrow £" + str(loanAmount) + " over " + str(repaymentLength) + " years, with an interest rate of " + str(interestRate) + "%!")

print("Your monthly repayment will be £" + str(monthlyRepaymentCost))

print("Your monthly repayment will be £%.2f " % monthlyRepaymentCost)

print("The total charge on this loan will be £%.2f !" % totalCharge)

Tout fonctionne, mais la valeur qu’elle rejette à la fin est complètement fausse… un prêt de 100 £ assorti d’un taux d’intérêt de 10% sur un an ne devrait pas me faire payer 0,83 £ par mois. Toute aide pour comprendre cette équation et m'aider à comprendre serait grandement appréciée. 

7
BeerHuntor

À l'aide d'exemples, voici ce que j'ai fait.

# Formula for mortgage calculator
# M = L(I(1 + I)**N) / ((1 + I)**N - 1)
# M = Monthly Payment, L = Loan, I = Interest, N = Number of payments, ** = exponent

# Declares and asks for user to input loan amount. Then converts to float
loanAmount = input('Enter loan amount \n')
loanAmount = float(loanAmount)

# Declares and asks user to input number of payments in years. Then converts to float. Years * 12 to get
#  total number of months
years = input('How many years will you have the loan? \n')
years = float(years) * 12

# Declares and asks user to input interest rate. Then converts to float and input interest rate is /100/12
interestRate = input('Enter Interest Rate \n')
interestRate = float(interestRate) / 100 / 12

# Formula to calculate monthly payments
mortgagePayment = loanAmount * (interestRate * (1 + interestRate)
                                ** years) / ((1 + interestRate) ** years - 1)

# Prints monthly payment on next line and reformat the string to a float using 2 decimal places
print("The monthly mortgage payment is\n (%.2f) " % mortgagePayment)
1
C. Ramsey

J'ai aussi regardé cette vidéo sur youtube et j'ai eu le même problème. Je suis un débutant en python, alors supportez-moi. Les instructeurs de la vidéo utilisaient python3 et j'utilise python2 donc je ne suis pas sûr si toute la syntaxe est la même. Mais en utilisant certaines informations trouvées dans ce fil et des informations provenant de ce lien: ( http://www.wikihow.com/Calculate-Mortgage-Payments ), j’ai pu obtenir la réponse. (Mes calculs correspondaient à une calculatrice hypothécaire en ligne)

#!/usr/bin/env python
# The formula I used:
M = L * ((I * ((1+I) ** n)) / ((1+I) ** n - 1))

# My code (probably not very eloquent but it worked)

# monthly payment
M = None
# loan_amount
L = None
# interest rate
I = None
# number of payments
n = None

L = raw_input("Enter loan amount: ")
L = float(L)
print(L)

I = raw_input("Enter interest rate: ")
I = float(I)/100/12
print(I)

n = raw_input("Enter number of payments: ")
n = float(n)
print(n)

M = L * ((I * ((1+I) ** n)) / ((1+I) ** n - 1))

M = str(M)
print("\n")
print("Monthly payment is " + M)
0
bddmass

Ce prêt hypothécaire forfait le fait bien:

>>> import mortgage
>>> m=mortgage.Mortgage(interest=0.0375, amount=350000, months=360)
>>> mortgage.print_summary(m)
                     Rate:      0.037500
             Month Growth:      1.003125
                      APY:      0.038151
             Payoff Years:            30
            Payoff Months:           360
                   Amount:     350000.00
          Monthly Payment:       1620.91
           Annual Payment:      19450.92
             Total Payout:     583527.60
0
kravietz

Apparemment, vous avez mal copié la formule.

wrong:   * numberOfPayments 

correct: ** numberOfPayments 

note: il apparaît deux fois dans la formule note: en python, ** est un opérateur "à la puissance de".

0
Alfista71

Cela a plutôt bien fonctionné pour moi. Ce n’est pas exact, car les calculateurs de prêt passent généralement par les jours, et je suis paresseux, donc je passe par mois, mais voici un exemple simple que j’ai écrit et qui est suffisamment précis pour être pratique.

L = input("How much will you be borrowing? ")
L = float(L)
print(L)


N = input("How many years will you be paying this loan off? ")
N = float(N) *12
print(N)

I = input("What is the interest in percents that you will be paying? Ex, 10% = 10, 5% = 5, etc. ")
I = float(I)/100
print(I)

M = (L/N) + I*(L/N)

float(M) 
print("Your monthly payment will be: ")
print(M)
0
Justin B