2015-01-14 58 views
1

我需要计算在12个月内偿还信用卡余额所需的最低固定月付款。正确的答案应该是310,但我得到340.我正在编辑代码几个小时,但没有找到任何合适的解决方案。这里有什么问题?它怎么可能修复它?信用计算器会产生错误的输出

balance = 3329 
annualInterestRate = 0.2 
payment = 10 

def year_balance(init_payment, init_balance): 
    """ Calculates total debt after 12 months """ 
    interest_sum = 0 
    for month in range(12): 
     # balance after monthly payment 
     unpaid = init_balance - init_payment 
     # monthly interest of remaining balance 
     interest = unpaid * (annualInterestRate/12.0) 
     interest_sum += interest 
    yearly = init_balance + interest_sum # total debt after 12 months 
    return yearly 

total = year_balance(payment, balance) # total debt after 12 months 

while total - payment * 12 > 0: 
# checks if payment is big enough to fully repay the credit after 12 months 
    payment += 10 

print "Lowest payment: ", payment 
+1

您提供的代码给出了一个错误 - 是否将'interest_total = 0'更改为'interest_sum = 0'? –

+1

看来您每次调整付款时都没有重新计算总额。由于您的代码按月收取利息,您应该在每次付款更改时重新计算总额。 – gankoji

+1

@DavidRobinson是的,我修改了代码 – Dovi

回答

0

我们需要针对每个新付款金额运行余额计数功能,因为对于更大的付款,利息金额会更小。所以

balance = 3329 
annualInterestRate = 0.2 
payment = 10 


def year_balance(init_payment, init_balance): 
    """ Calculates total debt after 12 months """ 
    interest_sum = 0 
    unpaid = init_balance 
    for month in range(12): 
     # balance after monthly payment 
     unpaid -= init_payment 
     # monthly interest of remaining balance 
     unpaid += unpaid * (annualInterestRate/12.0) 
    return unpaid 

while year_balance(payment, balance) > 0: 
    payment += 10 

print("Lowest payment: ", payment) 

注意:这是为了您在信用期开始前付款。如果你在一个月后完成了这项工作,你应该首先增加每月的利率。

+0

因此,我的功能没有运行每个新的支付金额,因为没有变量来设置平衡初始值? – Dovi

+0

你只需要支付一次初始付款即可,那就是它 –

2

您并不需要迭代计算每月还款额。相反,您可以使用封闭式解决方案:

loan_amount = 3329 
annual_interest_rate = 0.2 
monthly_repayment = ((loan_amount * annual_interest_rate/12.)/
        (1 - (1 + annual_interest_rate/12.) ** -12)) 
print monthly_repayment 

这假定每月还款和每月复利。有关通用公式,请参阅,例如,here

+1

嘿,男人,使用数学是不公平的! –