pyhton第四周小測

2021-09-24 04:47:30 字數 4554 閱讀 2815

1.記錄日誌裝飾器

建立乙個裝飾器, 功能實現函式執行時自動產生日誌記錄。 日誌格式如下:

程式執行時間 主機短名 程式名稱: 函式[%s]執行結果為[%s]

產生的日誌檔案並不直接顯示在螢幕上, 而是儲存在 file.log 檔案中

import time

import os

import sys

def add_log(fun):

def warpper(*args,**kwargs):

start_time = time.time()

result= fun()

end_time = time.time()

#獲取程式執行時間

run_time =start_time - end_time

#主機短名

hostname = os.uname().nodename.split('.')[0]

#程式名稱

process_full_name = sys.ar**[0]

process_name = os.path.split(process_full_name)[-1]

#函式[%s]執行結果[%s]

info = '函式[%s]執行結果[%s]' %(fun.__name__,result)

#整合要顯示的日誌資訊

log_mess = ''.join([run_time,hostname,process_name,info])

#將日誌資訊儲存到檔案file.log檔案中

with open('file.log','w') as f:

f.write(log_mess)

return result

return warpper

@add_log

def fun():

print('這是程式執行的結果')

fun()

已知 itchat 可以獲取好友的資訊, 此處統計好友的省份分布;

獲取分布好友最多的 5 個省份;

將省份分布的數量基於 pyecharts 模組以條形圖的方式展示;

附加需求: 將每個省份的好友備註名(remarkname)存入依次存入對應省份的文

件中;e.g.

檔案: 陝西省.txt

檔案: 山東省.txt

將上述 編寫的**封裝為模組, 並實現模組的製作與發布;

#encoding:utf-8

import itchat

import sys

from pyecharts import bar

itchat.auto_login(hotreload=true)

#獲取好友列表

myfriends = itchat.get_friends(update=true)[:]

#建立乙個字典用來儲存好友所在省份的以及有多少好友在該省份

prov_dict = {}

for info in myfriends[1:]:

prov = info['province']

if prov not in prov_dict.keys():

prov_dict[prov] =1

elif prov in prov_dict.keys():

prov_dict[prov] +=1

#刪除key值為空字元的鍵值,空字元代表好友沒有填寫省份資訊

del prov_dict['']

#獲取排名前五位的省份

prov_dict_top5 = sorted(prov_dict.items(),key =lambda x:x[1],reverse=true)[0:5]

#把每個省份的好友備註名一次存入對應身份的檔案中

for item in prov_dict_top5:

for info in myfriends[1:]:

if item[0] in info.values():

name = info['remarkname']

with open('%s.txt' %item[0],'a+',encoding="utf-8") as f:

f.writelines(name+'\n')

print(prov_dict_top5)

prov_list =

count_list =

for i in prov_dict_top5:

#將省份分布數量以條形圖的方式展示

bar.add('省份',[prov_list[0],prov_list[1],prov_list[2],prov_list[3],prov_list[4]],[count_list[0],count_list[1],count_list[2],count_list[3],count_list[4]])

#bar.add('省份',[i[0] for i in prov_dict_top5],[i[0] for i in prov_dict_top5])

bar.render('./provpic.html')

3. leetcode 字串練習題目: : 比較版本號

思路:當兩個版本號長度不一致時,補全較短的版本號,然後再逐個數字進行比較

class solution:

def compareversion(self, version1: str, version2: str) -> int:

list_version1 = version1.split('.')

list_version2 = version2.split('.')

version1_len = len(list_version1)

version2_len = len(list_version2)

num = max(version1_len,version2_len)

num1= abs(version1_len-version2_len)

for i in range(num1):

if version1_len>version2_len:

elif version1_len(int(list_version2[i])):

return 1

else:

return -1

else:

return 0

4. 斐波那契數列的裝飾器練習: : 實現快取記憶體遞迴

裝飾器 1 : 新增快取記憶體的裝飾器 num_cache

如果第一次計算 f(5) = f(4) + f(3) = 5

第二次計算 f(6) = f(5) + f(4)

顯然 f(5)已經計算過了, f(4)也已經計算了, 我們可否新增乙個裝飾器, 專門用

來儲存 費波那契數列已經計算過的快取, 後期計算時, 判斷快取中是否已經計算過了, 如果計算過,直接用快取中的計算結果費波那契數列已經計算過的快取, 後期計算時, 判斷快取中是否已經計算過了, 如果計算過,直接用快取中的計算結果. 如果沒有計算過, 則開始計算並將計算的結果儲存在快取中如果沒有計算過, 則開始計算並將計算的結果儲存在快取中。

裝飾器 2 : 程式執行計時器的裝飾器 timeit

該裝飾器用來測試有無快取記憶體求斐波那契數列, 它們兩者執行的時間效率高低.

"""

題目:斐波那契數列的裝飾器練習:實現快取記憶體遞迴

"""import time

#快取器

def num_cache(fun):

dict_cache = {}

def warpper1(*args):

if args not in dict_cache:

dict_cache[args] = fun(*args)

return dict_cache[args]

return warpper1

#時間def timeit(fun):

def warpper2(*args,**kwargs):

start_time = time.time()

result = fun(*args,**kwargs)

end_time = time.time()

print("程式執行時間為:%f" % (end_time - start_time))

return result

return warpper2

@num_cache

@timeit

def fibo(n):

if n<=2:

return 1

else:

return (fibo(n-1) + fibo(n-2))

while 1 :

while true:

n = int(input('enter your number:'))

if n == 'quit':

break

else:

print("斐波那契數列第n項為:", fibo(n))

小程式(第四周)

include include void main int max 20 2 scanf d a 資料組數 if a 0 for i 0 i0 j max i 0 num i 0 while num i z max i 0 max i 1 num i z z 0 for i 0 i這道題的輸入輸出樣...

軟測第四周作業 wordcount 優化

psp2.1 psp階段 預估耗時 分鐘 實際耗時 分鐘 planning 計畫30 20 estimate 估計這個任務需要多少時間 3020 development 開發470 550 analysis 需求分析 包括學習新技術 3020 design spec 生成設計文件 2020 desi...

第四周作業

第四周實驗作業 1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 1.1求自然對數e的近似值 include using namespace std int main cout 1.2求圓周率 的近似值 include using name...