【问题标题】:Credit card balance exercise in PythonPython中的信用卡余额练习
【发布时间】:2015-06-04 11:32:14
【问题描述】:

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

接受以下输入:

  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
>>>

与我之前写的正确输出相比,这略有不同。

抱歉写的乱七八糟,我不知道如何在这个论坛上编写代码。另外,请注意,我编写的问题和程序并没有完全按照我的方式编写,但或多或​​少是相同的。

可能是什么问题?谢谢。

【问题讨论】:

  • 不回答这个问题,但我不确定你能不能说monthly_rate = annual_rate / 12,因为复利。例如。如果年利率是 12%,我的债务是 100 美元,那么我预计今年的利息是 12 美元。但是如果您每月在余额中增加 1% (100 * 1.01^12),您最终将获得 12.68 美元的利息。
  • @TomDalton 实际上月费是我写的。问题集的作者提供了这些信息。
  • @user224530 我回滚到上一个版本。如果您希望删除此答案,请将其标记并告知版主。
  • @Mailerdaimon 你在说什么?
  • @mistermarko 看看这个问题的修订版。有一个编辑用废话代替了整个问题。我将问题回滚到以前的版本。

标签: python


【解决方案1】:

首先应该弄清楚一件事 - 如何从年费率中计算出月费率。一般复利公式为:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多