python记账app开发_Python之区块链简单记账本实现
原標題: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
():
(
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之区块链简单记账本实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言进阶深度学习记录】十六 静态库与
- 下一篇: 川大锦城c语言期末考试答案,四川大学《计