Использование Bisection Searching для ускорения программы оплаты кредитной картой за один год - PullRequest
0 голосов
/ 10 февраля 2019

Мне интересно, что не так с моим кодом.Я разделил верхнюю и нижнюю границу.Я схожу с цента каждый раз.

Я разделяю верхнюю границу.

def get_credit_exact_pay(balance, annualInterestRate):
    monthly_interest_rate = round(annualInterestRate/12, 2)
    upper_x = balance
    lower_x = balance
    lower_payment = round(balance/12,2)
    upper_payment = round((balance * (1 + monthly_interest_rate) ** 12) / 12, 2)

Мне кажется, я упустил еще одну вещь, касающуюся математики при расчете платежа или прироста платежа.

    count = 0
    while True:
        upper_x -= upper_payment
        interest = (annualInterestRate/12.0) * upper_x
        upper_x += interest

        lower_x -= lower_payment
        interest = (annualInterestRate/12.0) * lower_x
        lower_x += interest

        if count == 11:
            if lower_x < lower_payment and lower_x > 0:
                print('l')
                print ("%.2f" % lower_payment)
                break
            if upper_x < upper_payment and upper_x > 0:
                print ("%.2f" % upper_payment)
                break
            count = 0
            upper_x = balance
            lower_x = balance
            upper_payment -= .01
            lower_payment += .01
            continue
        else:
            if lower_x < 0:
                lower_x = balance/2
            if upper_x < 0:
                upper_x = balance/2
            count += 1
            continue
...