Python投资计算器

时间:2018-09-26 12:11:41

标签: python while-loop calculator

请帮我解决这个问题。我不知道我要去哪里。 作业是: “写一个函数投资(PMT,n,i),该函数可以在将来某个时候计算客户的储蓄,

  • 在每年的年底开始投资一定数量的资金 截止到今年年底的PMT,

  • ,年利率为i%,每年复利,

  • 投资金额每两年(累计)增加一倍。”

还有我的代码:

def investment(PMT, n, i):
    x = 0

    while x < n:
        if x % 2 == 1:
            PMT = 2*(PMT*(1 + i)**n)
        else:
            PMT = PMT*(1 + i)**n

        x = x + 1

    investment_balance = PMT

    return round(investment_balance, 2)

答案应该是:investment(15000, 30, 0.1045) == 1954935238.47,但我得到的是:3.4728768295747016e + 47。

2 个答案:

答案 0 :(得分:0)

一些观察:

由于付款是在年末进行,且利息为每年i%,因此在第一年末应没有利息。

如果投资每两年增加一倍,则可以计算2年内的实际利率,然后每两年(每两年)进行一次复利。在运行中,这是一个正常的复利方程,其中PMT在每次复利时都会加倍。应该使逻辑容易一些。对于奇数n,您必须使用原始速率进行最后一次复利。

您的方程式正在每个循环上覆盖PMT。 PMT不会随着利息的增加而增加,仅每两年增加一倍。如果PMT在第0年为100美元,那么在第2年应该仅为200美元,而不是循环计算三遍。

答案 1 :(得分:0)

您正在使用的公式类似于您用来计算future value的复利货币的公式。这是正确的轨道,但是您不想循环执行该计算。您的结果将太大。

试试看。

  • 将初始投资余额设置为0。
  • 开始循环播放x年。
  • 如果年份是奇数(因为我们从0开始计数),请加倍付款。
  • 将利息应用于余额。
  • 将付款添加到余额中。

最后一步 last 很重要,因为我们只在每年的 end 添加付款。这意味着不应在第0年应用利息。(更准确地说,它将应用于0余额。)

如果执行所有这些操作,则会得到一个类似于以下内容的函数:

def investment(PMT, n, i):
    x = 0
    investment_balance = 0

    while x < n:
        if x % 2 == 1:
            PMT = 2* PMT
        investment_balance *= (1 + i)
        investment_balance += PMT
        x = x + 1

    return round(investment_balance, 2)

这适用于您输入的示例输入。