Python 贷款支付计算

Python 贷款支付计算,python,python-3.x,finance,Python,Python 3.x,Finance,我正在学习Python,我被困住了。我正在努力寻找贷款支付金额。我目前有: def myMonthlyPayment(Principal, annual_r, n): years = n r = ( annual_r / 100 ) / 12 MonthlyPayment = (Principal * (r * ( 1 + r ) ** years / (( 1 + r ) ** (years - 1)))) return MonthlyPayment n=(i

我正在学习Python,我被困住了。我正在努力寻找贷款支付金额。我目前有:

def myMonthlyPayment(Principal, annual_r, n):
    years = n
    r = ( annual_r / 100 ) / 12
    MonthlyPayment = (Principal * (r * ( 1 + r ) ** years / (( 1 + r ) ** (years - 1))))
    return MonthlyPayment

n=(input('Please enter number of years of loan'))
annual_r=(input('Please enter the interest rate'))
Principal=(input('Please enter the amount of loan'))

然而,当我跑的时候,我只跑了一小部分。如果有人能指出我的错误,那就太好了。我使用的是Python 3.4。

我想在您计算的最后一部分

/ (( 1 + r ) ** (years - 1))
你的括号错了;应该是

/ ((( 1 + r ) ** years) - 1)

就付款计算而言,您似乎没有正确翻译。除此之外,由于内置的
input()
函数返回字符串,因此在将值传递给期望值为数值的函数之前,需要将其返回的内容转换为正确的类型

def myMonthlyPayment(Principal, annual_r, years):
    n = years * 12  # number of monthly payments
    r = (annual_r / 100) / 12  # decimal monthly interest rate from APR
    MonthlyPayment = (r * Principal * ((1+r) ** n)) / (((1+r) ** n) - 1)
    return MonthlyPayment

years = int(input('Please enter number of years of loan: '))
annual_r = float(input('Please enter the annual interest rate: '))
Principal = int(input('Please enter the amount of loan: '))

print('Monthly payment: {}'.format(myMonthlyPayment(Principal, annual_r, years)))

我认为正确的公式是

MonthlyPayment = (Principal * r) / (1 - (1 + r) ** (12 * years))
我清理了你的一些变量

def get_monthly_payment(principal, annual_rate, years):
    monthly_rate = annual_rate / 100 / 12
    monthly_payment = principal * (monthly_rate + monthly_rate / ((1 + monthly_rate) ** (12 * years) - 1))
    return monthly_payment

years = float((input('Please enter number of years of loan')))
annual_rate = float((input('Please enter the interest rate')))
principal = float((input('Please enter the amount of loan')))
print ("Monthly Payment: " + str(get_monthly_payment(principal, annual_rate, years)))

在输入周围添加一个try-except块也是谨慎的做法。

不幸的是,这会使计算更加复杂。还有别的想法吗?它的值约为2。我几乎感觉到有某种舍入误差。@S-Mason:你能给出一个样本:p,r,n和预期产出吗?30年,20%的利息,10000本金收益率:169.44444应该是167.101868625P.S。代码的语法高亮显示看起来很奇怪,因为它没有遵循。如果
r>0
,那么
(1+r)**(12*年)>1
,那么
(1-(1+r)**(12*年)
会给出一个负面结果。负支付意味着你的公式是错误的。你是对的,休。谢谢你接电话。我从WikiHow上复制了这个公式,我敢肯定我的编码和他们的一模一样,但这是错误的。我根据我希望是正确的公式更正了上面的回答。我仍然不喜欢用r来表示月利率,或者用n来表示月数,因为只有写这封信的人才能理解它,甚至他在3个月后也不会记得自己的变量定义。