日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/10 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

():

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之区块链简单记账本实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。