Python 投资计算器

Python Investment Calculator

我需要帮助来解决这个问题。我不知道我要去哪里。 作业是: “编写一个函数 investment(PMT, n, 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.

几个观察结果:

由于付款是在年底支付的,利息是每年 i%,所以第一年年底应该没有利息。

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

您的等式正在覆盖每个循环中的 PMT。 PMT 不随利息增加,仅每两年翻一番。如果 PMT 在第 0 年是 100 美元,那么它在第 2 年应该只有 200 美元,而不是被你的循环复合三倍。

您使用的公式与您用来计算 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)

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