01 函数的封装

首先大家知道复利的公式对吧, 复利即利滚利,单利呢就是每次利息拿本金记. 他们公式如下:

复利公式:F=P×(1+i)^n

单利公式:F=P+P*i*n

若把单利公式定义成一个函数,代码是这样↓, 又因为钱的单位是元, 所以返回的数额保留两位小数.

# 单利计算器,按期计算def danli_income(m,n,t):    """    m 本金    n 收益率如5%收益率,则输入5    t 投资年限 如1年则输入1    """    m = float(m)    n = float(n) / 100    t = int(t)    return round(m +m*n*t, 2)

相同思路,复利公式函数代码如下:

# 复利计算收益 按期计算def fuli_income(m,n,t):    """    m 本金    n 收益率如5%收益率,则输入5    t 投资年限 如3年则输入3    """    m=float(m)    n=float(n)/100    t=int(t)    return round(m*(1+n)**t,2)

因为定投也是一种常用的理财手段, 因此还想再封装一个定投的函数.

定投最后期末的利本合计公式是: M=a(1+x)[-1+(1+x)^n]/x

其中: M代表预期收益, a代表每期定投金额, x代表收益率, n代表定投期数。

封装函数如下:

# 定投计算公式,如果用需要输入参数def dingtou(a,x,n):    """定投收益的计算公式为:M=a(1+x)[-1+(1+x)^n]/x;    其中    M代表预期收益,    a代表每期定投金额,    x代表收益率,    n代表定投期数。    假设用户每月定投金额为300元,一年也就是3600元,年收益率为15%,    定投期限为35年,则可以计算出收益为:    3600(1+15%)[-1+(1+15%)^35]/15%=3648044元    """    a=float(a)    x = float(x) / 100    n = int(n)    M = a*(1 + x)*(-1 + (1 + x) ** n) / x    return  round(M,2)

ok, 到这步就算写好主要的东西了下面来运行它们.



02 计算走起来

先说思路:

  • 单利复利是一个对比, 看看不同的收益率及投资年限下, 到底能差异出多少去,所以想做一个表格,这个表格格包括: 年限 复利收益 单利收益 差额 这四列(收益列指的是利本和);
  • 定投包括: 期数, 定投金额, 收益率, 本期末成本合计, 本期末收益合计, 总倍数几列, 其中总倍数指的是最终的本金+收益是本金的多少倍;
  • 我不想像大部分计算器那样,只给一个最终结果,比如输入10年, 只给一个10年后的结果, 我想看到他们过程的变化,因此需要记录过程变化数据;
  • 如果能做出图像,那就更棒了;

★先封装单利VS复利对比的计算及展示函数, 过程中用pandas封装了一个DataFrame表格.这个表格会在最后打印出来.

# 单利复利启动def danli_VS_fuli():    pd_col = pd.DataFrame(columns=('年限','复利收益','单利收益','差额'))    m = input("请输入本金(单位元):")    n = input('请输入收益率(收益率如5%收益率,则输入5):')    t = input('请输入周期:')    print(f'\n本金:{m}, 收益率:{n}%, 投资周期{t}\n')    for i in range(1,int(t)+1):        fuli = fuli_income(m, n, i)        danli = danli_income(m, n, i)        chae = round(fuli - danli, 2)        # 加入数据        b = pd.Series({'年限':i,'复利收益':fuli,'单利收益':danli,'差额':chae})        pd_col = pd_col.append(b,ignore_index=True)        # 修改索引列        fin=pd_col.set_index('年限')    # 画图    plt.figure(figsize=(15, 8))    x = pd_col['年限']    y1 = pd_col['复利收益']    y2 = pd_col['单利收益']    plt.ylabel('金额')    plt.xlabel('期数')    plt.plot(x, y1,color='red', linewidth=1.0, linestyle='--')    plt.plot(x, y2,color='green', linewidth=1.0, linestyle='-.')    plt.legend(('复利收益曲线', '单利收益曲线'))    plt.show()    print(fin)

输出效果 ( 假设本金10万,收益率6%,利滚利存20年) :

这个案例我想的是假如有一个父亲给自己的孩子出生时候专门划拨一笔钱,存起来,到他成年给他。经计算时30W+

用Python写个理财计算器,过把瘾

每年度数据变化

用Python写个理财计算器,过把瘾

增长曲线

现在借助这个计算器这里看一下高利贷的恐怖,经百度一资料如下:

用Python写个理财计算器,过把瘾

假设一位同学借了3000买东西, 30%周息, 借一个月4周和2个月8周会怎么样?

经过计算, 结果是: 3000元一个月后复利变为8568元,单利变为6600元 ; 若借了两个月后复利24471元, 单利10200元 ! 再往后不敢算了... ... 因为若是周复利情况下一年期52周后感觉都赶上一个小国的GDP了。。。。


★再封装定投的计算及展示, 过程中同样的用pandas封装了一个DataFrame表格.这个表格会在最后打印出来.

# 定投启动def show_DT():    a = input('输入定投金额(元):')    x = input('输入收益率(如10%则输入10):')    n = input('输入投资期数')        print(f'定投金额:{a},每期收益率:{x},定投期数:{n}')    pd_col = pd.DataFrame(columns=('期数', '定投金额', '收益率','本期末成本合计', '本期末收益合计','总倍数'))    for i in range(1,int(n)+1):        # 定投计算        DT_M = dingtou(a, x, i)        # 本金计算        benjin=round(float(a)*i,2)        beishu=round((DT_M/benjin),2)        # 加入数据        b = pd.Series({'期数': i, '定投金额': a, '收益率': str(x)+'%', '本期末成本合计':benjin,'本期末收益合计': DT_M,'总倍数':beishu})        pd_col = pd_col.append(b, ignore_index=True)    fin=pd_col.set_index('期数')    # 画图    plt.figure(figsize=(15, 8))    x = pd_col['期数']    y1 = pd_col['本期末成本合计']    y2 = pd_col['本期末收益合计']    plt.legend(["本期末成本合计", "本期末收益合计"])    plt.ylabel('金额')    plt.xlabel('期数')    plt.plot(x, y1, color='blue', linewidth=1.0, linestyle='--')    plt.plot(x, y2, color='red', linewidth=1.0, linestyle='-.')    plt.xlim(1, int(n))    plt.legend(('本金曲线','期末收益合计曲线'))    plt.show()    print(fin)

运行输出效果

这个案例我是假设为养老存的, 每月1000,每年则存12000, 收益率为8% , 存30年, 经过计算,30年存了本金36万,但30年期末是本金收益合计146.8万。

用Python写个理财计算器,过把瘾

用Python写个理财计算器,过把瘾

定投曲线,蓝色是本金砸入

在这个假设情况下, 定投30年的话, 本息合计是投入本金的4倍!


这个计算器更多的可能还需要自己去算着玩.

全部代码获取路径: 添加SUMER, 回复: 理财计算器 获取.


用Python写个理财计算器,过把瘾

Bitget电脑版网页

Bitget官网注册下载地址

Bitget注册登录