python的金融计算器_【长期不定时更新】用Python实现金融计算器的部分功能

课上第一次教金融计算器的使用,表示真的受不了。明明按照书上一步一步科学的按键,得出的答案永远是错的。虽然目前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

所以才会有了上面的差别。

今天就先到这里吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值