课上第一次教金融计算器的使用,表示真的受不了。明明按照书上一步一步科学的按键,得出的答案永远是错的。虽然目前Python学的还是半吊子,不过还是决定写一点简单的代码来模拟金融计算器的功能。突然想到随着学习的深入,没准真的就能自己开发出来一款功能齐全的金融计算器了呢。不过今天还是老老实实地写最基础的代码,也当做是复习了。
Python版本为2.7
#coding = utf-8
PreVal = raw_input("Please Enter the Present Value:")
IntRate = raw_input("Please Enter the Interest Rate:")
Years = raw_input("Please Enter the Time Due(Years):")
FutVal = float(PreVal) * (1 + float(IntRate)) ** float(Years)
print FutVal
最基础的计算终值的简单的程序。
但是转念一想,谁现在TM会用我的程序啊,弄个raw_input一点意义都没有啊。而且简单终值这种东西的计算,普通计算器也能完成啊。
所以有了下面的普通年金终值计算程序……
def FutVal2(PMT,Years,IntRate):
iterYear = range(Years)
print iterYear
ValList = []
for i in iterYear:
ValList.append(float(PMT * (1 + float(IntRate)) ** i))
print ValList
FutVal = sum(ValList)
return FutVal
a = FutVal2(1000,5,0.07)
print a
嗯,最后得出了每期现金流为1000,持续5年,利率为7%的普通年金(Ordinary Annuity)的终值,最终输出为:
[0, 1, 2, 3, 4]
[1000.0, 1070.0, 1144.9, 1225.0430000000003, 1310.7960100000003]
5750.73901
这次跟书上答案(5750.74)基本一致了。然后突然又想起来Python有列表解析这么一个东西。这个代码还是可以精简的吖!
def NewFutVal2(PMT,Years,IntRate):
iterYear = range(Years)
print iterYear
ValList = [float(PMT * (1 + float(IntRate)) ** i) for i in iterYear]
print ValList
FutVal = sum(ValList)
return FutVal
print "----------------Using List Comprehensions---------------------------"
b = NewFutVal2(1000,5,0.07)
print b
最后输出的值和上面是一致的。
不过既然都写到这里了,不如就干脆再做一个计算普通年金现值(Present Value)的程序。虽然整体思路上和计算终值的代码基本相似,但是有细微差别。
因为涉及除法,为保险起见,先导入division:
from __future__ import division
定义Cal_PV函数
def Cal_PV(PMT,Years,IntRate):
iterYear = range(Years)
print iterYear
ValList = [float(PMT / (1 + float(IntRate)) ** (i+1)) for i in iterYear]
print ValList
PV = sum(ValList)
return PV
c = Cal_PV(700,5,0.08)
print c
每期现金流为700,持续5年,利率8%,输出结果为:
[0, 1, 2, 3, 4]
[648.1481481481482, 600.1371742112482, 555.6825687141187, 514.5208969575173, 476.40823792362704]
2794.89702595
与书上答案(2794.90)基本一致。
除了导入模块的不同外,ValList中每个元素的计算方式也有一点点变动:
ValList = [float(PMT / (1 + float(IntRate)) ** (i+1)) for i in iterYear]
因为是普通年金,即现金流支付均是在期末进行:
在计算终值的时候,( 1 + r )的指数分别是0,1,2,3,4
而在计算现值的时候,( 1 + r )的指数分别是 -1,-2,-3,-4,-5
所以才会有了上面的差别。
今天就先到这里吧。