(一)裝飾器
具體要求:
1)該裝飾器要求做到通用,可以裝飾定長,不定長各種參數的函數.(4分)
2)如果被裝飾的函數拋出異常,則記錄函數名,異常信息 到文件error_log.txt。(4分)
3)裝飾器可以正確計算函數的運行時間。(3分)
4)創(chuàng)建文件power_fun.py 導入 decory.py中寫好的裝飾器,編寫函數并裝飾, 如果被裝飾函數正常執(zhí)行沒有異常,則記錄調用成功,并記錄被調用函數的函數名,參數個數,到指定路徑的文件中。(4分)
import time
from functools import wraps
def take_rime(fn):
@wraps(fn)
def inner(*args, **kwargs):
try:
start = time.time()
fn(*args, **kwargs)
end = time.time()
print(f'運行時間:{end-start}')
except BaseException as e:
#e就是報錯信息
with open('error_log.txt','a') as f:
f.write(f'{e}')
else:
with open('日志.txt','a') as f:
f.write(f'調用成功,{fn.__name__},{len(args)+len(kwargs)}')
return inner
power_fun.py
#從 decor文件中 導入 裝飾器
from decor import take_rime
@take_rime
def show(a,b):
print(1+'hello')
if __name__ == '__main__':
show(1,2)
(二)創(chuàng)建名為express.py文件,編寫以下推導式(25分)
# 1)求60以內所有能被3和2同時整除的數 (2分)
l1=[i for i in range(60) if i%2==0 and i%3==0]
print(l1)
# 2)求60以內所有能被2整除的數的平方(2分)
l2=[i**2 for i in range(60) if i%2==0]
print(l2)
# 3.已知列表n=['黃三','黃大','李凱','王一博' ] 編寫一個推導式,取出所有姓黃的人名(2分)
n=['黃三','黃大','李凱','王一博' ]
l3=[i for i in n if i.startswith('黃')]
print(l3)
# 4.info= ['i','is','a','good','boy','exception']統(tǒng)計列表每個元素的長度,保存成字典的格式(2分)
info= ['i','is','a','good','boy','exception']
d4={k:len(k) for k in info}
print(d4)
# 5)求(a,b)其中a是0-10之間的偶數,b是0-10之間的偶數組成的元祖列表(2分)
l5=[(a,b) for a in range(11) if a%2==0 for b in range(11) if b%2==0]
print(l5)
# 6.Num_list = [[10, 12, 13], [14,15, 16], [17, 18, 19]] 把列表中所有偶數取出來組成新列表(2分)
Num_list = [[10, 12, 13], [14,15, 16], [17, 18, 19]]
l6=[i for j in Num_list for i in j if i%2==0]
print(l6)
# 7.List1=['a', 'b', 'c',] list2=['A', 'B', 'C',]用列表推導式輸出新列表['aA', 'bB', 'cC'](2分)
List1=['a', 'b', 'c',]
list2=['A', 'B', 'C',]
l7=[f'{List1[i]}{list2[i]}' for i in range(3)]
print(l7)
# 8.Info_dict = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} 把字典的key,value互換(2分)
Info_dict = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
d8={k:v for v,k in Info_dict.items()}
print(d8)
# 9.strings = ['a','is','with','if','file','exception']用集合推導式,創(chuàng)建字符串長度的集合(2分)
strings = ['a','is','with','if','file','exception']
s9={len(i) for i in strings}
print(s9)
# 10.,用列表推導式取出列表中帶有兩個以上含字母e的姓名,組成新的列表(2分)
names = [['david','testeae','effcomecte','aAndrew','tWesley','hsteven','Gcoe'], ['Balice','kill','Banaan','Tendy','cennifer','Dsherry','Eva']]
l10=[j for i in names for j in i if j.count('e')>2]
print(l10)
# 11.通過列表推導式完成下面數據類型轉換。 將 轉換為以下格式: li1 = [{‘a’: 11, ‘b’: 2}, [11, 22, 33, 44]](2分)
ls11 = ["{'a':11,'b':2}", "[11,22,33,44]"]
l11=[eval(i) for i in ls11]
print(l11)
# 12.已知列表 編寫一個推導式,取出所有以凱結尾的人名(3分)
n12=['黃凱','黃大','李凱','王一博']
l12=[i for i in n12 if i.endswith('凱')]
print(l12)
(三)創(chuàng)建名為process_test.py的文件,計算1-3000之間的水仙花數
具體要求:
1)編寫多進程程序,開啟3個進程
2)三個進程分別計算1-1000,1000-2000,2000-3000之間的水仙花數
3)每個進程打印當前進程的id和父進程的id,并打印當前進程的計算結果。
4)把三個進程的計算結果匯總到一個列表并輸出
import multiprocessing,os
def show1(start,end,que):
for i in range(start,end):
if i>=100 and i<=999:
b = i//100%10
s = i//10%10
g = i%10
if b**3 + s**3 +g**3==i:
print(f'父進程:{os.getppid()},子進程:{os.getpid()},水仙花數為:{i}')
que.put(i)
if i>=1000 and i<=9999:
q = i//1000%10
b = i//100%10
s = i//10%10
g = i%10
if q**4+b**4+s**4+g**4==i:
print(f'父進程:{os.getppid()},子進程:{os.getpid()},水仙花數為:{i}')
que.put(i)
if __name__ == '__main__':
que = multiprocessing.Queue()
l1 = [2,1001,2001]
for i in range(3):
p1 = multiprocessing.Process(target=show1,args=(l1[i],l1[i]+1000,que))
p1.start()
p1.join()
l2 = []
while not que.empty():
l2.append(que.get())
print(l2)
(四)創(chuàng)建文件my_th.py,編寫多線程程序
具體要求:
1)主線程產生2000個6位驗證碼,驗證碼有大小寫字母和數字組成。
2)主線程把生成的隨機驗證碼放入一個隊列。
3)啟動5個子線程。
4)每個子線程分析驗證碼,用正則匹配驗證碼,把符合的驗證碼放到列表中。
5)如果隊列中的驗證碼匹配完成,則退出當前子線程
6)最終打印出符合規(guī)則的驗證碼的個數和驗證碼的列表。
import threading,random,string,re
from queue import Queue
l1 = []
def show(que):
for i in range(400):
str1 = que.get()
#找全部 滿足 +數量 【內容】
if re.findall('[0-9]+[a-z]+[A-Z]+',str1):
l1.append(str1)
if __name__ == '__main__':
que = Queue()
for i in range(2000):
num = ''.join(random.choices(string.digits+string.ascii_letters,k=6))
que.put(num)
for i in range(5):
t1 = threading.Thread(target=show,args=(que,))
t1.start()
print(f'驗證碼個數:{len(l1)},驗證碼分別為:{l1}')
(五)根據需求進行socket編程
具體要求:
服務端
1)新建一個py文件做完服務端用來接收客戶端發(fā)送的消息server.py,。
2)服務器無限循環(huán)接收客戶端發(fā)過來的信息。 accept()客戶端 revc(1024)
3)客戶端連接服務端,則輸出“連接已建立‘
4)讀取包含敏感字符的sensitive.txt文件,把所有敏感字符以列表的方式存儲
5)根據列表進行過濾,如果消息包含銘感字,則輸出消息包含敏感字,然后發(fā)回給客戶端 您發(fā)送的消息包含敏感字,請重新輸入。反之發(fā)送隨機6位字符給客戶端 send()
6)把用戶發(fā)送的原始消息+ip id保存到mysql數據庫中 數據庫 表結構自行定義。
客戶端
1)新建一個py文件client.py 作為客戶端。
2)客戶端無限循環(huán)發(fā)送信息給服務端。
3)客戶端接受服務端發(fā)送過來的信息。
4)客戶端收到服務器發(fā)過來的響應,輸出到終端,并把服務端返回的信息記錄到my_clent.txt中。
5)客戶端輸入exit的時候,向服務器發(fā)送我要退出了,然后退出程序。文章來源:http://www.zghlxwxcb.cn/news/detail-441565.html
import random
import socket
import string
import threading
#函數:收發(fā)消息(多收多發(fā))
def msg(client):
#可以和每個人說多句話
while True:
#1.循環(huán)收消息
#2.判斷有沒有敏感詞 (有-告訴他有重新輸 沒有-6位隨機)
str1 = client.recv(1024).decode()
if str1 == '我要退出了':
break
#這里存聊天記錄
#for敏感詞 ifstr1 replace(舊,新)
count = 0 #1
for i in list_str:
if i in str1:
str1 = str1.replace(i,'**') #替換
count +=1
if count == 0: #沒有敏感詞
#有敏感詞
# client.send('您發(fā)送的消息包含敏感字,請重新輸入'.encode())
client.send(str1.encode())
else:
print('消息包含敏感字')
client.send('您發(fā)送的消息包含敏感字,請重新輸入'.encode())
# client.send(str1[::-1].encode())
# client.send(''.join(random.choices(string.ascii_letters,k=6)).encode())
if __name__ == '__main__':
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('127.0.0.1',9009))
server.listen(128)
#讀取敏感詞
with open('sensitive.txt','r') as f:
list_str = f.read().split('\n')
while True:
#多人
client,ip = server.accept()
print(f'連接已建立{ip}')
thread1 = threading.Thread(target=msg,args=(client,))
thread1.start() # 聊天不加join
客戶端文章來源地址http://www.zghlxwxcb.cn/news/detail-441565.html
import socket
import threading
#收發(fā)消息(多收多發(fā))
def msg():
while True:
# 發(fā)消息
str1 = input('輸入消息:')
if str1 == 'exit':
client.send('我要退出了'.encode())
break
else:
client.send(str1.encode())
# 收消息
str2 = client.recv(1024).decode()
print(str2)
with open('my_clent.txt','a') as f:
f.write(f'{str2}\n')
if __name__ == '__main__':
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.1',9009))
thread1 = threading.Thread(target=msg)
thread1.start() #聊天不加join
到了這里,關于python進階--月考二的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!