Python 从现金流列表计算净现值的函数

Python 从现金流列表计算净现值的函数,python,python-3.x,finance,Python,Python 3.x,Finance,试图编写一个函数来计算现金流列表的现值。我知道numpy可以很容易地做到这一点,但对于一个赋值,我必须为此编写自己的函数:/ 下面是列表中的三种现金流以及贴现率 cfList = [20, 50, 90] r = 0.05 这是我到目前为止写的函数。f=0,因为我想从第一个现金流开始(在本例中为20)。i=1,因为对于第一个流量,其上升到第一次方,第二个流量(50)将平方,依此类推 def npv(cfList, r):

试图编写一个函数来计算现金流列表的现值。我知道numpy可以很容易地做到这一点,但对于一个赋值,我必须为此编写自己的函数:/

下面是列表中的三种现金流以及贴现率

cfList = [20, 50, 90]           
r = 0.05                        
这是我到目前为止写的函数。f=0,因为我想从第一个现金流开始(在本例中为20)。i=1,因为对于第一个流量,其上升到第一次方,第二个流量(50)将平方,依此类推

def npv(cfList, r):
    f = 0
    i = 1

    pv = cfList[f] / ((1 + r) ** i)

    while i < len(cfList):
        f += 1
        i += 1
        return pv


print(npv(cfList, r))
def npv(cfList,r):
f=0
i=1
pv=cfList[f]/((1+r)**i)
而i

然而,这个输出只给出了第一个现金流的PV,而不是列表中所有三个的总和。如果你能帮我,我非常感激,谢谢

返回现金流列表的净现值如下所示:

def npv(cfList, r):
    return sum(f / ((1 + r) ** i) for i, f in enumerate(cfList, 1))

In []:
cfList = [20, 50, 90]
r = 0.05
npv(cfList, r)

Out[]:
142.14447683835436

返回现金流列表的净现值如下所示:

def npv(cfList, r):
    return sum(f / ((1 + r) ** i) for i, f in enumerate(cfList, 1))

In []:
cfList = [20, 50, 90]
r = 0.05
npv(cfList, r)

Out[]:
142.14447683835436

您需要对函数中的各个现金流求和并返回该值。此时,您正在返回第一个现金流的pv值,因为在for循环中有一个返回语句

此外,我认为,如果您根据
I
检查while循环,将意味着您将错过最后一次付款值。通常您不需要自己实例化计数器变量(参见下面的示例):


您需要对函数中的各个现金流求和并返回该值。此时,您正在返回第一个现金流的pv值,因为在for循环中有一个返回语句

此外,我认为,如果您根据
I
检查while循环,将意味着您将错过最后一次付款值。通常您不需要自己实例化计数器变量(参见下面的示例):


如果使用while循环遍历列表,那么在while循环中应该有一行执行操作的代码

在第二次迭代中,当i=2=len(cflist)时(不要忘了这一点),您的循环看起来会很早被切断,因为返回调用在while循环中

这应该起作用:

def npv(cfList, r):
    f = 0
    i = 1

    pv = 0

    while f <= len(cfList):
        pv += (cfList[f] / ((1 + r) ** i))
        f += 1
        i += 1
    return pv
def npv(cfList,r):
f=0
i=1
pv=0

while f如果使用while循环遍历列表,那么在while循环中应该有一行执行操作的代码

在第二次迭代中,当i=2=len(cflist)时(不要忘了这一点),您的循环看起来会很早被切断,因为返回调用在while循环中

这应该起作用:

def npv(cfList, r):
    f = 0
    i = 1

    pv = 0

    while f <= len(cfList):
        pv += (cfList[f] / ((1 + r) ** i))
        f += 1
        i += 1
    return pv
def npv(cfList,r):
f=0
i=1
pv=0

那么你想把现金流的净现值加起来?你所给例子的预期结果是什么。
循环中的
返回
,而
循环意味着它将立即退出,这不太可能是您想要的,您没有计算您可能要添加到
pv
的后续项,然后
返回pv
while
循环之外。那么,您想汇总现金流的净现值吗?你所给例子的预期结果是什么。
循环中的
返回
,虽然
循环意味着它将立即退出,这不太可能是您想要的,但您没有计算您可能要添加到
pv
的后续项,然后在
while
循环之外返回pv
。谢谢您和@supershot,谢谢您的帮助和解释,现在清楚多了谢谢你们,@SuperShoot,谢谢你们的帮助和解释,现在清楚多了
def npv(cfList, r):
    f = 0
    i = 1

    pv = 0

    while f <= len(cfList):
        pv += (cfList[f] / ((1 + r) ** i))
        f += 1
        i += 1
    return pv