我无法创建一个类来模拟利息和付款的贷款

时间:2019-05-29 01:16:56

标签: python finance computational-finance

我的还款计算器中的数学运算出现错误。我正在尝试创建一个类,在该类中可以创建贷款,按月或按年进行迭代,还可以对贷款进行付款。我不确定我的问题在此代码中的什么地方。

我尝试过更改付款方式,并且陷入了数学的根本问题。我认为我的应计利息和本金平衡方式存在潜在的问题

class loan():

    p_i = 0 #initial principle
    p_new = 0 #total balance
    rate = 0 #interest rate (in %)
    acc = 0 #total accrued interest

    def __init__(self,p,rate):

        self.p_i = p
        self.p_new = p
        self.rate = rate

    def month(self):

        if self.p_i == self.p_new:
            self.acc += self.p_i * (1 + (self.rate/100)/12)
            self.p_new = self.p_i + self.acc
        else:
            self.acc += self.p_i * (1 + (self.rate/100)/12)
            self.p_new = self.p_i + self.acc

    def year(self):

        if self.p_i == self.p_new:
            self.acc += self.p_i * (1 + (self.rate/100)) - self.p_i
            self.p_new = self.p_i + self.acc 
        else:
            temp = 0
            temp = self.p_i * (1 + (self.rate/100)) - self.p_i
            self.p_new += temp
            self.acc += temp

    def payment(self,amount):

        temp = 0
        if amount < self.acc:
            self.acc -= amount
        else:
            self.p_i -= amount - self.acc
            self.acc = 0
            self.p_new -= amount

我希望以5%利率计算的10000美元贷款的输出为10500,然后为11025,应计利息为1025,而不是分别得到11000和1000。

1 个答案:

答案 0 :(得分:0)

我一开始建议您将其从一堂课中取出,并按照程序进行 ,直到您完成数学运算为止。看来您在与class语法作斗争。

因此,只需尝试设置变量和某些函数,然后遍历某些选项即可。

从这样的东西开始:

principal = 10000
rate = 0.05

def monthly_interest():
    global principal, rate
    principal += rate/12*principal

def make_payment(payment):
    global principal
    principal -= payment


for month in range(1,13):
    monthly_interest()
    # print totals
    print('month {:2d}, principal ${:0.2f}'.format(month, principal))

意识到这有点像全局变量和所有变量,但是如果您在使数学无法正常工作时遇到困难,请从这里开始,然后在解决问题后再构建一个类。

输出:

month  1, principal $10041.67
month  2, principal $10083.51
month  3, principal $10125.52
month  4, principal $10167.71
month  5, principal $10210.08
month  6, principal $10252.62
month  7, principal $10295.34
month  8, principal $10338.24
month  9, principal $10381.31
month 10, principal $10424.57
month 11, principal $10468.00
month 12, principal $10511.62