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

2024-04-28 04:03:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

下面是三个现金流的列表以及折现率。在

cfList = [20, 50, 90]           
r = 0.05                        

这是我目前为止编写的函数。f=0,因为我想从第一个现金流开始(这里是20)。i=1,因为对于第一个流,它被提升到1次方,第二次流(50)将是平方的,依此类推。在

^{pr2}$

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


Tags: 函数numpy列表作业总和现金流量现金流pr2
3条回答

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

另外,在第二次迭代中i=2=len(cflist)时(不要忘了python uses 0 based indexing),并且因为返回调用在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

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

另外,我认为你对照i检查while循环的方式将意味着你将错过最后一个付款值。通常您不需要自己实例化计数器变量(请参阅下面的示例):

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

    pv = cfList[f] / ((1 + r) ** i)  # <  this needs to be in the loop

    while i < len(cfList): # <  i will break loop before last payment is calculated.
        f += 1
        i += 1
        return pv  # <  this return here is the issue


print(npv(cfList, r))

净现值是所有未来现金流现值之和,这就是你需要计算的。E、 g.:

^{pr2}$

请记住,for循环中的return语句将在第一次遇到return时脱离循环。在

另一种方法是从光伏发电机产生单个PV,并将结果相加:

def pv_gen(cfList, r):

    for i, pmt in enumerate(cfList, start=1):

        yield pmt / ((1 + r) ** i)

print(sum(pv_gen(cfList, r)))

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

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

相关问题 更多 >