擅长:python、mysql、java
<p>您需要将函数中的各个现金流求和并返回。此时,您正在返回第一个现金流的pv值,因为在for循环中有一个返回语句。在</p>
<p>另外,我认为你对照<code>i</code>检查while循环的方式将意味着你将错过最后一个付款值。通常您不需要自己实例化计数器变量(请参阅下面的示例):</p>
<pre><code>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))
</code></pre>
<p>净现值是所有未来现金流现值之和,这就是你需要计算的。E、 g.:</p>
^{pr2}$
<p>请记住,for循环中的<code>return</code>语句将在第一次遇到<code>return</code>时脱离循环。在</p>
<p>另一种方法是从光伏发电机产生单个PV,并将结果相加:</p>
<pre><code>def pv_gen(cfList, r):
for i, pmt in enumerate(cfList, start=1):
yield pmt / ((1 + r) ** i)
print(sum(pv_gen(cfList, r)))
</code></pre>