2015-01-14 33 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

嘿,男人,使用數學是不公平的! –