У меня проблемы с созданием класса для моделирования кредитов с процентами и платежами - PullRequest
0 голосов
/ 29 мая 2019

Я получаю ошибки с математикой в ​​калькуляторе погашения кредита. Я пытаюсь создать класс, в котором я могу создать кредит, повторять его по месяцам или годам, а также применять платежи к кредиту. Я не совсем уверен, где моя проблема заключается в этом коде.

Я попытался изменить способ оплаты и застрял с корнем проблемы с математикой. Я думаю, что есть основополагающая проблема с тем, как у меня начисляются проценты, и с принципиальным балансом

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

Я бы ожидал, что, скажем, ссуда на 10000 долларов с 5% -ной процентной ставкой будет 10500, а затем 11025 и начисленные проценты будут 1025, вместо этого я получаю 11000 и 1000 соответственно.

1 Ответ

0 голосов
/ 29 мая 2019

Я бы рекомендовал для начала взять это из класса и просто делать это процедурно , пока вы не разберетесь с математикой.Кажется, вы немного боретесь с синтаксисом 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...