债券息票贴现的循环

关于如何编写一个for循环给我所有优惠券的现值(即折扣值)的快速问题。我的代码如下所示:


我想要一个 for-loop 来执行该操作


c[0]*np.exp(-r*1)

c[1]*np.exp(-r*2)

c[2]*np.exp(-r*3) 

,依此类推(数乘以 -r 始终是索引 +1)。我想要所有值的总和,例如使用x +=for循环迭代


c=[7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5]

r=0.071

PVx=0 


for i in c:

    print(i)

    year = c.index(i)+1

    print(year)

    PV=c[i]*np.exp(-r*year)

    PVx += PV 

    print(PVx)

不知何故,我收到了我的PV变量的错误代码“TypeError:列表索引必须是整数或切片,而不是浮点数”。从本质上讲,我希望将列表中的每个值乘以np.exp(-r*索引位置+1),然后得到总和:S


编辑:


我的新代码


import numpy as np

c=[7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5]

r=0.071

PVx=0 


for i in c:

    year = c.index(i)+1

    print(year)

    PV=i*np.exp(-r*year)

    PVx += PV

    print(PVx)

继续将年份打印为1(意味着c.index(i)产生0 + 1 = 1),而我希望它从1到7。我想我现在的问题。


BIG阳
浏览 70回答 2
2回答

潇湘沐

我的新代码[...]继续将年份打印为1(意味着c.index(i)产生0 + 1 = 1),而我希望它从1到7。list.index(i)返回出现的第一个索引,如果不在列表中,则返回 -1。iiNumPy 解决方案:import numpy as npr = 0.071arr_1 = np.full(shape=7, fill_value=7.5)print(arr_1)arr_2 = np.exp(-r * np.arange(1, arr_1.shape[0] + 1))print(arr_2)arr_3 = arr_1 * arr_2print(arr_3)print(arr_3.sum())输出:[7.5 7.5 7.5 7.5 7.5 7.5 7.5][0.93146189 0.86762126 0.80815614 0.75276664 0.70117344 0.65311634 0.60835298][6.98596419 6.50715942 6.06117103 5.64574984 5.25880082 4.89837257 4.56264738]39.919865247574606循环解决方案:import mathfrom pprint import pprintr = 0.071vals = [7.5 * math.exp(-r * i) for i in range(1, 8)]pprint(vals)pprint(sum(vals))输出:[6.985964190956941, 6.507159423644355, 6.0611710291236625, 5.645749835296472, 5.258800824064293, 4.898372565905067, 4.562647378583822]39.919865247574606我不完全确定我是否理解你想做什么,所以如果我错过了什么,请告诉我。

繁花不似锦

错误解释了这个问题:“”浮点是一个带有小数的数字,即不是整数。对于 exampe 7.5.那是你的问题。TypeError: list indices must be integers or slices, not float
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go