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

歡迎訪問 生活随笔!

生活随笔

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

python

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

發(fā)布時間:2025/3/15 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python之区块链简单记账本实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在上一篇《Python之區(qū)塊鏈入門》中講述了區(qū)塊鏈的基礎知識,并用Python實現(xiàn)了區(qū)塊和區(qū)塊鏈的結構。在本篇中,將基于上面的內容實現(xiàn)一個簡單的記賬本功能。

記賬本的功能如下:

  • 實現(xiàn)基本的收支記錄;
  • 計算當前余額;
  • 對收支情況做簡單統(tǒng)計分析。
  • 賬單記錄的格式如下:

    日期|描述|金額

    下面開始一步步實現(xiàn)上述功能。

    一、定義收支記錄

    在上一篇中區(qū)塊的內容是簡單的文本,這里實現(xiàn)將基于Block實現(xiàn)一個支持收支記錄格式的類,代碼如下:

    In [36]:

    from datetime import datetimeclass 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)'''獲取金額數(shù)量'''def get_amount(self):amount = 0if self.data:amount = int(self.data.split('|')[2])return amountdef get_content(self):content = ''if self.data:content = self.data.split('|')[1]return contentdef __repr__(self):return 'Bill: {}>'.format(self.data)

    In [37]:

    # 創(chuàng)建記錄AccountBill('測試', 100)

    Out[37]:

    Bill: 2017-07-30 10:46:23|測試|100>

    二、計算當前余額

    上面已經(jīng)定義了收支記錄,接下來在BlockChain基礎上定義一個方法用來計算當前余額。代碼如下:

    In [91]:

    from collections import OrderedDictclass AccountBook(BlockChain):def __init__(self):self.head = None # 指向最新的一個區(qū)塊self.blocks = OrderedDict() # 包含所有區(qū)塊的一個字典'''添加記錄'''def add_block(self, new_bill):new_bill.mine()super(AccountBook, self).add_block(new_bill)'''計算當前余額'''def balance(self):balance = 0if self.blocks:for k, v in self.blocks.items():balance += v['block'].get_amount()return balancedef __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]:

    # 創(chuàng)建幾筆記錄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 inlineimport matplotlib import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽# 初始化數(shù)據(jù) 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() 作者:Walker Python愛好者社區(qū)專欄作者 授權原創(chuàng)發(fā)布,請勿轉載,謝謝。

    出處:Python之區(qū)塊鏈簡單記賬本實現(xiàn)


    總結

    以上是生活随笔為你收集整理的Python之区块链简单记账本实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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