Python中的信用卡余额练习

时间:2015-03-31 07:35:16

标签: python

我应该编写一个简单的程序来执行以下操作:

采取以下投入:

  1. 信用卡上的未结余额
  2. 年利率小数
  3. 我应该打印固定的每月付款和偿还债务所需的月数(最多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
    >>>
    

    与前面我上面写的正确输出相比,它略有不同。

    很抱歉这篇杂乱的文章,我不知道如何在这个论坛上编写代码。此外,请注意,我没有完全按照我的方式编写问题和程序,但大致相同。

    问题是什么?感谢。

1 个答案:

答案 0 :(得分:0)

首先应该清理一件事 - 如何根据年率计算每月费率。一般复合利息公式为:

At = A0(1 + r)^t

其中At是时间t的总量,A0是时间0的量,r是速率。重新安排r:

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

请注意,At / A0实际上是年率加1,在这种情况下我们希望t为12.因此获得月率的方法是将APR表示为小数,添加一个,替换为将上述比率提高到一个二分之一然后减去一个。

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,则利息将超过最低付款额,程序将进入无限循环。