原标题:Python之区块链简单记账本实现

欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习、问答、求职,一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

在上一篇《Python之区块链入门》中讲述了区块链的基础知识,并用Python实现了区块和区块链的结构。在本篇中,将基于上面的内容实现一个简单的记账本功能。

记账本的功能如下:

实现基本的收支记录;

计算当前余额;

对收支情况做简单统计分析。

账单记录的格式如下: 日期|描述|金额

下面开始一步步实现上述功能。 一、定义收支记录

在上一篇中区块的内容是简单的文本,这里实现将基于Block实现一个支持收支记录格式的类,代码如下:

In [36]:

from

datetime

import

datetime

class

AccountBill

(

Block

):

def

__init__

(

self

,

content

,

amount

):

t

=

datetime

.

now

()

.

strftime

(

'%Y-%m-

%d

%H:%M:%S'

)

data

=

"

{}

|

{}

|

{}

"

.

format

(

t

,

content

,

amount

)

return

super

(

AccountBill

,

self

)

.

__init__

(

data

)

'''

获取金额数量

'''

def

get_amount

(

self

):

amount

=

0

if

self

.

data

:

amount

=

int

(

self

.

data

.

split

(

'|'

)[

2

])

return

amount

def

get_content

(

self

):

content

=

''

if

self

.

data

:

content

=

self

.

data

.

split

(

'|'

)[

1

]

return

content

def

__repr__

(

self

):

return

'Bill:

{}

>'

.

format

(

self

.

data

)

In [37]:

# 创建记录

AccountBill

(

'测试'

,

100

)

Out[37]: Bill: 2017-07-3010:46:23|测试|100> 二、计算当前余额

上面已经定义了收支记录,接下来在BlockChain基础上定义一个方法用来计算当前余额。代码如下:

In [91]:

from

collections

import

OrderedDict

class

AccountBook

(

BlockChain

):

def

__init__

(

self

):

self

.

head

=

None

# 指向最新的一个区块

self

.

blocks

=

OrderedDict

()

# 包含所有区块的一个字典

'''

添加记录

'''

def

add_block

(

self

,

new_bill

):

new_bill

.

mine

()

super

(

AccountBook

,

self

)

.

add_block

(

new_bill

)

'''

计算当前余额

'''

def

balance

(

self

):

balance

=

0

if

self

.

blocks

:

for

k

,

v

in

self

.

blocks

.

items

():

balance

+=

v

[

'block'

]

.

get_amount

()

return

balance

def

__repr__

(

self

):

num_existing_blocks

=

len

(

self

.

blocks

)

return

'AccountBook<

{}

Bills, Head:

{}

>'

.

format

(

num_existing_blocks

,

self

.

head

.

identifier

if

self

.

head

else

None

)

In [92]:

# 创建几笔记录

book

=

AccountBook

()

b1

=

AccountBill

(

'工资'

,

10000

)

book

.

add_block

(

b1

)

b2

=

AccountBill

(

'房租'

,

-

2500

)

book

.

add_block

(

b2

)

b3

=

AccountBill

(

'衣服'

,

-

1500

)

book

.

add_block

(

b3

)

b4

=

AccountBill

(

'吃饭'

,

-

1000

)

book

.

add_block

(

b4

)

b5

=

AccountBill

(

'股票收入'

,

200

)

book

.

add_block

(

b5

)

b6

=

AccountBill

(

'看电影'

,

-

200

)

book

.

add_block

(

b6

)

b7

=

AccountBill

(

'购物'

,

-

1000

)

book

.

add_block

(

b7

)

b8

=

AccountBill

(

'水电费等'

,

-

100

)

book

.

add_block

(

b8

)

In [93]:

# 计算当前余额

book

.

balance

()

Out[93]: 3900 三、简单分析收支记录

In [76]:

# 打印收支记录

for

k

,

v

in

book

.

blocks

.

items

():

print

(

v

[

'block'

]

.

data

)

2017-

07-

30

19:

57:

57|工资|

10000

2017-

07-

30

19:

57:

57|房租|-

2500

2017-

07-

30

19:

57:

57|衣服|-

1500

2017-

07-

30

19:

57:

58|吃饭|-

1000

2017-

07-

30

19:

57:

58|股票收入|

200

2017-

07-

30

19:

57:

58|看电影|-

200

2017-

07-

30

19:

57:

59|购物|-

1000

2017-

07-

30

19:

57:

59|水电费等|-

100

In [50]:

# 使用柱状图展示收支记录

%

matplotlib inline

import

matplotlib

import

numpy

as

np

import

matplotlib.pyplot

as

plt

plt

.

rcParams

[

'font.sans-serif'

]

=

[

'SimHei'

]

#用来正常显示中文标签

# 初始化数据

x_data

=

[]

# 金额

y_data

=

[]

# 描述

colors

=

[]

# 颜色

for

k

,

v

in

book

.

blocks

.

items

():

bill

=

v

[

'block'

]

y_data

.

append

(

bill

.

get_content

())

amount

=

bill

.

get_amount

()

if

amount

>

0

:

x_data

.

append

(

amount

)

colors

.

append

(

'blue'

)

else

:

x_data

.

append

(

-

amount

)

colors

.

append

(

'red'

)

y_pos

=

np

.

arange

(

len

(

y_data

))

plt

.

bar

(

y_pos

,

x_data

,

align

=

'center'

,

alpha

=

0.5

,

color

=

colors

)

plt

.

xticks

(

y_pos

,

y_data

)

plt

.

ylabel

(

'金额'

)

plt

.

title

(

'收支记录'

)

plt

.

show

()

In [55]:

# 简单分析支出组成

labels

=

[]

amounts

=

[]

colors

=

[

'gold'

,

'yellowgreen'

,

'lightcoral'

,

'lightskyblue'

]

# 用不同颜色显示

for

k

,

v

in

book

.

blocks

.

items

():

bill

=

v

[

'block'

]

amount

=

bill

.

get_amount

()

# 只展示支出

if

amount

<

0

:

labels

.

append

(

bill

.

get_content

())

amounts

.

append

(

-

amount

)

plt

.

pie

(

amounts

,

labels

=

labels

,

colors

=

colors

,

shadow

=

True

,

autopct

=

'

%1.1f%%

'

)

plt

.

axis

(

'equal'

)

plt

.

show

()

天善学院svip包含Excel BI、Python爬虫案例、Python机器学习、Python数据科学家、大数据、数据分析报告、数据分析师体系、深度学习、R语言案例10套课程火爆报名中,欢迎大家关注 www.hellobi.com/svip

转载请保留以下内容:

本文来源自天善社区101python老师的博客(公众号)。

原文链接:https://ask.hellobi.com/blog/101python/9072返回搜狐,查看更多

责任编辑:

python记账app开发_Python之区块链简单记账本实现相关推荐

  1. python简单读写记账代码_Python之区块链简单记账本实现

    个人博客:http://101python.cn/ 在上一篇<>中讲述了区块链的基础知识,并用Python实现了区块和区块链的结构.在本篇中,将基于上面的内容实现一个简单的记账本功能. 记 ...

  2. Python之区块链简单记账本实现

    在上一篇<Python之区块链入门>中讲述了区块链的基础知识,并用Python实现了区块和区块链的结构.在本篇中,将基于上面的内容实现一个简单的记账本功能. 记账本的功能如下: 实现基本的 ...

  3. 区块链技术开发公司谈区块链APP落地的趋势

    当今这个数字化经济时代,大多数人都质疑过区块链行业是否会产生杀手级的应用.因为区块链的风口全都集中在虚拟货币的交易上,大家都在想如何通过投资获利.虽然区块链技术天然地适用于发币,但是并不意味着区块链就 ...

  4. 5分钟学会区块链 - 开发一条区块链 Develop BlockChain with Tendermint

    本文攻略:解惑区块链开发,学习 Tendermint,给自己造一条区块链 建议玩家等级:技术小白,学生党,初级码农 阅读此文先解锁技能: 一点点命令行基础 一点点 GO 基础:三天包学会 一点点区块链 ...

  5. 区块链开发指南_区块链开发权威指南

    区块链开发指南 by Haseeb Qureshi 由Haseeb Qureshi 区块链开发权威指南 (The authoritative guide to blockchain developme ...

  6. 2018年5月下旬值得一读的10本技术书籍(Python、程序员英语、区块链、算法等书籍)!福利见文末!

    5月下旬, 小编 为大家带来10本技术书籍(Python.程序员英语.区块链.算法等书籍).以下为书籍详情,文末还有福利哦! 书籍名称:<程序员的英语> 本书旨在最大限度提高对开发人员最重 ...

  7. python与以太坊交互将区块链信息存入SQLite数据库

    关于区块链介绍性的研讨会通常以易于理解的点对点网络和银行分类账这类故事开头,然后直接跳到编写智能合约,这显得非常突兀.因此,想象自己走进丛林,想象以太坊区块链是一个你即将研究的奇怪生物.今天我们将观察 ...

  8. 区块链开发语言python_区块链开发中使用的最流行的编程语言

    我们目前正处于一个新兴的区块链开发行业中.区块链技术处于初期阶段,然而这种颠覆性技术已经成功地风靡全球,并且最近经历了一场与众不同的繁荣.由于许多资金充足的项目现在急于建立区块链网络并在其上部署分散的 ...

  9. 区块链开发语言python_区块链开发中经常使用的编程语言有哪些

    我们目前正处于一个新兴行业--区块链的发展中.区块链技术在很大程度上还处于萌芽阶段,然而,这种颠覆性的技术已经成功地席卷了全球,并经历了近年来前所未有的繁荣. 许多资金充足的项目现在都渴望构建自己的区 ...

  10. 技术员如何开发一个DAPP区块链应用(以宠物商店为例)

    1. 文章摘要 [本文目标] 通过逐步的指导和截图举证,一步步带领一个技术新手完成一个宠物商店DAPP应用的开发和部署. [环境前置条件] 参考<第一课 如何在WINDOWS环境下搭建以太坊开发 ...

最新文章

  1. HDU Problem 2062 Bone Collector【01背包】
  2. boost::mp11::mp_fold相关用法的测试程序
  3. Find All Numbers Disappeared in an Array
  4. python需要的环境_python运行环境是什么
  5. 读书笔记2013第5本:《拖延心理学》
  6. PAT 1150 Travelling Salesman Problem(25 分)- 甲级
  7. CSS:transform
  8. Atitit 自然语言处理原理与实现 attilax总结
  9. java json转map_Java 把json对象转成map键值对的方法
  10. n维椭球体积公式_初中物理公式总结(表格整理版)
  11. ps怎么抠地图线路_这些图片用PS怎么抠?ps抠图入门及PS抠图常用的7种方法(附详细步骤)...
  12. 编译原理学习基本概念汇总
  13. 键盘键码keyCode对照表
  14. Java Swing实现仿微信PC客户端程序 SOCKET 即时通信系统
  15. python中import 模块的路径问题
  16. 查询大数据各组件版本
  17. 2548. 大胖子走迷宫 (时间bfs)
  18. 【设计模式从青铜到王者】第二篇:UML类图与面向对象编程
  19. 命令行基础技巧挂载并访问光盘设备
  20. 二级计算机考试准考证打印入口

热门文章

  1. 百度迁徙爬虫工具:Baidu_migration_crawler
  2. 使用花生壳将内网服务发布到外网
  3. 深入浅出mysql数据开发_深入浅出MySQL数据库开发、优化与管理维护 PDF扫描版[513KB]...
  4. 哈理工OJ 1391 Orz odd(规律【没证出来】)
  5. MySQL客户端工具的选择
  6. 第五十二篇 仿真电路简单说明multisim12 函数发生器 示波器
  7. java课程设计员工信息管理系统,javaweb课程设计之员工信息管理系统
  8. 数独问题流程图_数独求解算法
  9. 极域九法——小白看得懂的退出极域电子教室教程
  10. 李宏毅:1 天搞懂深度学习,我总结了 300 页 PPT(附思维导图)