Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python投资计算器_Python_While Loop_Calculator - Fatal编程技术网

Python投资计算器

Python投资计算器,python,while-loop,calculator,Python,While Loop,Calculator,求你了,我需要帮助来解决这个问题。我不知道我要去哪里。 任务是: “编写一份功能投资(PMT,n,i),计算客户在未来某个时间点的储蓄,如果: 每年年底投资一笔金额,从金额开始 在今年年底的PMT中 年利率为1%,每年复利 投资额每两年(累计)翻一番。” 这是我的代码: def investment(PMT, n, i): x = 0 while x < n: if x % 2 == 1: PMT = 2*(PMT*(1 + i

求你了,我需要帮助来解决这个问题。我不知道我要去哪里。 任务是: “编写一份功能投资(PMT,n,i),计算客户在未来某个时间点的储蓄,如果:

  • 每年年底投资一笔金额,从金额开始 在今年年底的PMT中

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

  • 投资额每两年(累计)翻一番。”

这是我的代码:

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)
def投资(PMT、n、i):
x=0
而x

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

一些观察结果:

由于付款是在年底支付的,利息为每年1%,因此在第一年年底应该没有利息

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


您的方程式覆盖了每个循环上的PMT。PMT不随利息增加,只是每两年增加一倍。如果PMT在第0年是100美元,那么在第2年它应该只有200美元,而不是通过循环进行三次复利。

您使用的公式看起来像是您用来计算复利的货币价值的公式。这是正确的,但你不想在循环中进行计算。您的结果将太大

试试这个

  • 将初始投资余额设置为0
  • 开始循环x年
  • 如果年份是奇数(因为我们从0开始计算),则加倍付款
  • 将利息应用于余额
  • 将付款添加到余额中
最后一步很重要,因为我们只是在每年年底增加付款。这意味着不应在第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)
def投资(PMT、n、i):
x=0
投资余额=0
而x

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

从一个小而简单的测试用例开始。手工找出正确答案,然后比较代码的结果。不要一开始就输入你认为你知道答案的巨大值,然后在不匹配时盯着屏幕。此外,这缺乏关于PMT和n的信息。你能澄清一下
PMT
应该代表什么吗?这就是问题所在。PMT是每年年底的投资额。@Hackares你能写出每个案例的正确公式吗。我最好创建逻辑并在上面的代码中找到bug。