2015-03-31 77 views
2

我應該寫一個簡單的程序來執行以下操作:信用卡平衡運動在Python

採取以下輸入:

  1. 信用卡
  2. 年利率對未結算餘額作爲小數點

我應該打印固定的月付款和支付債務所需的月數(最多12個,也可能更少)。我也應該在最後打印餘額(可能是負數)。

我們應該假設根據月初(在該月付款前)餘額每月複利。每月付款必須是10美元的倍數,並且在所有月份中必須相同。由於此方案,餘額可能變爲負值。

所以,月利率= 年利率/ 12.0
更新,每月結餘= 舊的平衡*(1 +月利率) - 每月最低支付

現在,誰賦予這個問題的人提供了一個測試用例什麼是正確的程序:

>>> 
Enter the outstanding balance: 1200 
Enter annual interest rate: 0.18 
RESULT 
Monthly payment to pay off debt in 1 year: 120 
Number of months needed: 11 
Balance: -10.05 
>>> 

這是我寫的程序(我固定的輸入與上面相同,以查看是否程序工作,因爲它應該:

## ob = float (raw_input ("Enter the outstanding balance:")) 
##accir = float(raw_input("Enter annual interest rate:")) 

ob = float (1200) 
mp = float (0) 
n = float (0) 

while rb >= 0: 
      rb = ob 
      mp += 10 
      n += 1 
      rb = (rb*(1 + (accir/12.0)**n) -   n*mp) 

print "Result:" 
print "Monthly payment to pay off debt in one year:" , mp 
print "Number of months needed:" , n 
print "Balance:" , rb 

似乎確定,但是當我運行它,我得到這個:

>>> 
Result: 
Monthly payment to pay off debt in one year: 110.0 
Number of months needed: 11.0 
Balance: - 10.0 
>>> 

這比起正確的輸出,我寫上面更早時略有不同。

對不起,寫亂了,我不知道如何編寫代碼在這個論壇。另外,請注意,我沒有完全按照我的要求編寫問題和程序,但大致相同。

問題是什麼?謝謝。

+0

沒有回答這個問題,但我不確定你可以說'monthly_rate = annual_rate/12',因爲複利。例如。如果年利率是12%,我的債務是100美元,那麼我預計今年的利息是12美元。但如果每月增加1%的餘額(100 * 1.01^12)',則最終收益爲12.68美元。 – 2015-03-31 09:12:08

+0

@TomDalton實際上,每月的收費就像我寫的一樣。問題集的作者提供了這些信息。 – user224530 2015-03-31 12:43:47

+0

@ user224530我回滾到最後一個修訂版。如果您希望刪除此答案,請將其標記並告訴版主。 – Mailerdaimon 2015-04-02 06:13:09

回答

0

有一件事應該清理起來 - 如何計算每年的費率。一般複利公式爲:

At = A0(1 + r)^t 

其中Δt是在時間t的總量,A0是在0時的量,r是比率。重新整理爲R:

r = (At/A0)^1/t - 1 

注意,在/ A0生效年率加1,並在這種情況下,我們想噸至爲12。因此,要獲得每月率的辦法是陳述年利率爲十進制,加一個,用上面的比例代替它,將它提高到一個二分之一,然後減去一個。

https://math.stackexchange.com/questions/902687/bactracking-to-find-compound-interest/902693#902693

總之,這裏的答案:

def main(rb): 
    count = 0 
    while rb > 0: 
     rb = round(rb*(0.18/12 + 1) - 120, 2) 
     count += 1 
     #print(count, rb) 
    return count, rb 

print(main(input('Balance: '))) #Balance: 1200 

我用每月率的定義,你給,因爲你必須使用它,即使它應該讀RB *(1.18 * *(1.0/12))。 1.0在python2中執行真正的劃分。如果任一版本在python3中運行,則必須將int函數應用於輸入; python2假設這一點。

注意:如果原始餘額大於7999,利息將超過最低付款金額,程序將進入無限循環。