2015-06-23 3 views
0

Я бег этой программы:Python - найти ежемесячный ЧПС кредитной карты

balance = 320000 
annualInterestRate = 0.2 

monthlyPayment = 0.0 
monthlyInterestRate = annualInterestRate/12 
low = balance/12.0 
high = ((balance * ((1.0 + monthlyInterestRate)**12.0))/12.0) 
monthlyPayment = (high+low)/2 
while balance != 0: 
    newBalance = balance 
    for x in range(1, 13): 
     lastMonthBalance = newBalance - monthlyPayment 
     newBalance = lastMonthBalance + ((monthlyInterestRate) * lastMonthBalance) 
     if -0.002 <= newBalance <= 0.002: 
      balance = 0 

    if newBalance < 0.0: 
     low = 0 
     high = monthlyPayment 
    elif newBalance > 0.0: 
     low = monthlyPayment 

    monthlyPayment = (low + high)/2 

print "Lowest Payment: %.2f" % monthlyPayment 

Первоначально я пытался найти ежемесячный платеж, который сделал бы мой NewBalance равен 0, однако из-за ограничения по времени обработки, Я выбрал менее точный подход.

Однако, когда я изменяю границы от -0,2/0,2 до -0,002/0,002, мой ответ меняется с 14578,55 до 29157,09, и я не понимаю, почему?

Любая помощь приветствуется.

+0

С быстрым взглядом, если проценты рассчитаны и начисляются ежемесячно, тогда 'ежемесячныйInterestRate = yearInterestRate/12' будет неправильным способом расчета месячной ставки. – shuttle87

+0

Да, действительно. Однако эта программа не предназначена для правильной финансовой работы, а для того, чтобы научить меня программированию. :-) –

ответ

0

Итак, я не совсем уверен, почему, но, удалив линию, где low = 0, заставляет код работать.

Рабочий код:

#Write a program that calculates the minimum fixed monthly payment needed in order pay off a credit card balance within 12 months. By a fixed monthly payment, we mean a single number which does not change each month, but instead is a constant amount that will be paid each month. 

balance = 999999 
annualInterestRate = 0.18 

monthlyPayment = 0.0 
monthlyInterestRate = annualInterestRate/12 
low = balance/12.0 
high = ((balance * ((1.0 + monthlyInterestRate)**12.0))/12.0) 
monthlyPayment = (high+low)/2 
while balance != 0: 
    newBalance = balance 
    for x in range(1, 13): 
     lastMonthBalance = newBalance - monthlyPayment 
     newBalance = lastMonthBalance + ((monthlyInterestRate) * lastMonthBalance) 
     if -0.05 <= newBalance <= 0.05: 
      balance = 0 

    if newBalance < 0.0: 
     high = monthlyPayment 
    elif newBalance > 0.0: 
     low = monthlyPayment 

    monthlyPayment = (low + high)/2 

print "Lowest Payment: %.2f" % monthlyPayment 

Если кто-нибудь может мне объяснить, почему это происходит, я был бы очень благодарен.

Смежные вопросы