Python 投资计算器
Python Investment Calculator
我需要帮助来解决这个问题。我不知道我要去哪里。
作业是:
“编写一个函数 investment(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.
几个观察结果:
由于付款是在年底支付的,利息是每年 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)
这适用于您提供的示例输入。
我需要帮助来解决这个问题。我不知道我要去哪里。 作业是: “编写一个函数 investment(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.
几个观察结果:
由于付款是在年底支付的,利息是每年 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)
这适用于您提供的示例输入。