如何编写Python FV函数创建含逐年变动值的账户金额列表
问题定位
现有代码的逻辑缺陷非常明确:
- 在进入循环前,就把投资期限满t年的固定终值
x*(1+r/100)**t赋值给了value变量,后续循环全程没有更新这个变量的值 - 循环从0到t一共执行t+1次,每次都是把固定的终值追加到列表里,最终得到的列表所有元素都是同一个终值,完全没有体现逐年的金额变化
- 循环内的
if years <= t是冗余判断,range(t+1)生成的序列范围天然覆盖0到t的整数,这个判断不会对执行结果产生任何影响
修正方案
按照逐年复利滚存的逻辑调整计算流程,让每一年的账户余额都基于上一年的余额计算,保证列表里按顺序存放第0年到第t年的全部账户金额,匹配函数文档的返回要求:
- 列表初始先存入第0年的金额,也就是初始投资x
- 循环t次,每次把当前账户余额乘以年化收益率(注意把百分比形式的r转成小数,也就是除以100),得到下一年的金额,追加进列表
- 全程不需要提前计算最终值,逐次滚动更新即可,计算效率更高
修正后完整代码
def FV(x, r, t): """ inputs: x = amount invested r = rate (in % p.a.) accrued on the account each year t = number of years returns a list "acc" with amount on the account at 0, 1, ... t """ acc = [] # 存入初始投资时(第0年)的账户金额 current_balance = x acc.append(current_balance) # 逐年计算滚存后的账户余额 for _ in range(t): current_balance = current_balance * (1 + r / 100) acc.append(current_balance) return acc # 测试调用 print(FV(100,5,7))
运行输出说明
执行上述代码会得到逐年动态变动的金额列表,不存在全为固定终值的问题:[100, 105.0, 110.25, 115.7625, 121.550625, 127.62815625, 134.0095640625, 140.710042265625]
对应初始100元、年化5%利率的条件下,从投入当天到第7年的各时间点账户余额。
内容的提问来源于stack exchange,提问作者Moritz Muckenfuss
相关产品推荐
相关产品推荐

