python进阶--月考三

这篇具有很好参考价值的文章主要介绍了python进阶--月考三。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(一)装饰器

创建一个decorator.py的文件用来写2个装饰器 一个统计函数运行时间,一个记录函数的日志
(15分)
具体要求:
1)装饰器要求做到通用,可以装饰定长,不定长各种参数的函数.(4分)
2)装饰器可以正常实现功能。(4分)
3)创建文件first_aunser.py 导入 decorator.py中写好的装饰器,编写函数并装饰,函数功能自定义 函数需抛出异常,(4分)
4)时间装饰器打印函数运行时间 日志装饰器把函数运行中的信息写入本地txt文件。(3分)

import time
from functools import wraps
def get_time(fn):
    @wraps(fn)  #保护函数名不被改掉
    def inner(*args,**kwargs):
        start= time.time()
                #show()
        str1 = fn(*args,**kwargs)  #str1里存的是返回值
        end = time.time()
        print(f'函数执行时间是:{end-start}')
        return str1
    return inner

def loggin(fn):
    @wraps(fn)  #保护函数名不被改掉
    def inner(*args,**kwargs):
        str1= fn(*args,**kwargs)  #str1也是被装饰函数的返回值
        with open('日志.txt','a') as f:
            f.write(f'{str1}')
        return str1
    return inner

first_aunser.py

from  decorator import get_time,loggin

@get_time  #装饰器
@loggin  #装饰器
def show(): #函数 函数名 show  无参
    try:
         return 'hello'
    except BaseException as e:
        # print(e)
        return e
        #没有return

if __name__ == '__main__':
    show()

(二)创建名为express.py文件,编写以下推导式

# 1)求100以内所有除以3余数 为1,2,3,5,8,9 的数   (2分)
l1 = [i for i in range(100) if i%3 in [1,2,3,5,8,9]]
print(l1)
# 2)求100以内所有能被3整除的数的立方(2分)
l2 = [i**3 for i in range(100) if i%3==0]
print(l2)
# 3)取出列表list1=['aaa','test','monging',’like’]中长度大于3的数据(2分)
list1=['aaa','test','monging','like']
l3 = [i for i in list1 if len(i)>3]
print(l3)
# 4)List2= ['i','want','to','sleep','goodbey']  去除列表中包含 ‘e’ 且长度大于3的数据(2分)
list2= ['i','want','to','sleep','goodbey']
l4 = [i for i in list2 if i.count('e')==0 or len(i)<=3]
print(l4)
# 5)计算出1-10之间,11-20之间的数据组成的元祖列表(2分)
l5 = [(a,b) for a in range(1,10) for b in range(11,20)]
print(l5)
# 6)List3 = [[‘test’, ‘sleep’, ‘good’], [‘computer’,‘os’,‘threading’], [‘process’,‘queue’]] 取出列表中长度大于3且包含 ‘e’的元素(2分)
list3 = [['test', 'sleep', 'good'], ['computer','os','threading'], ['process','queue']]
l6 = [j for i in list3 for j in i if j.count('e') and len(j)>3]
print(l6)
# 7)List4=['T', 'D', 'K',],list5=['t', 'd', 'K',]把2个列表的元素相+组成一个新的列表(2分)
list4=['T', 'D', 'K',]
list5=['t', 'd', 'K',]
l7 = [f'{list4[i]}{list5[i]}' for i in range(3)]
print(l7)
# 8)Dict1 = {'name':‘david’,'age': 34, 'money': 7, 'score': 30} 把字典的key,value互换(2分)
Dict1 = {'name':'david','age':34,'money':7,'score':30}
d8 = {k:v for v,k in Dict1.items()}
print(d8)
# 9)Set1 = ['test’','computer','hight','hand','queue',threading] 用集合推导式统计字符串的长度 (2分)
Set1 = ['test','computer','hight','hand','queue','threading']
d9 = {len(k) for k in Set1}
print(d9)
# 10)List5= [[‘testpip’, ‘sleep’, ‘good’], [‘computer’,‘os’,‘threading’], [‘processp’,‘queue’]],取出列表中长度大于5且包含2个以上 p的元素 包含2个(2分)
List5= [['testpip', 'sleep', 'good'], ['computer','os','threading'], ['processp','queue']]
l10 = [j for i in List5 for j in i if len(j)>5 and j.count('p')>=2]
print(l10)
# 11)List7= ["{‘name’:’david’,‘age’:20}", “[20,30,40,50]”]将列表中的数据转换成正常格式(2分)
List7= ["{'name':'david','age':20}", "[20,30,40,50]"]
l11 = [eval(i) for i in List7]
print(l11)
# 12)List8=['陈百彤','王老大','孙晓红',‘王彤彤’]取出列表中包含彤的元素(3分)
List8=['陈百彤','王老大','孙晓红','王彤彤']
l12 = [i for i in List8 if i.count('彤')]
print(l12)

(三)创建一个process_study.py 编写一个多进程程序

具体要求:
1)开启4个进程 ,用循环的方式
2)进程 平均分配任务 计算1-1000能被2和3整除的数据
3)每个进程的结果以列表的格式放入队列中
4)把每个进程的结果写入到txt文件中
5)读取txt文件最后输出结果以 [[进程1的数据],[ 进程2的数据],[ 进程3的数据]] 格式

import multiprocessing

def get_num1(start,end,que):  #重复使用
    #1-250  #250-500  #500-750  #750-1000
    # print(start,end)
    listnum = []
    for i in range(start,end):
        if i%2 == 0 and i%3 == 0:
            listnum.append(i)
    que.put(listnum)  #把列表放到队列


if __name__ == '__main__':

    que = multiprocessing.Queue()
    list1 = [1,251,501,751]  #开始
    list2 = [251,501,751,1001]  #结束
    listmax = []
    for i in range(4):  #0-3
        pro1 = multiprocessing.Process(target=get_num1,args=(list1[i],list2[i],que))
        pro1.start()
        pro1.join()

    #队列里就有内容,4个列表
    while not que.empty():
        listmax.append(que.get())

    with open('进程.txt','a') as f:
        f.write(f'{listmax}')
    with open('进程.txt','r') as f:
        str1 = f.read()
    print(str1)


(四)创建一个thread_study.py 编写一个多线程程序

具体要求:
1)做一个要是用户名统计的程序,随机生成3000个8位数用户名包含大小写字母
2)把生成的用户名去重后放入队列中。 列表变集合
3)程序至少启动5个线程平均分配处理数据。
4)子线程分别统计用户名中每个字符出现的次数。
5)把每个线程的结果存入到txt文件中
6)读取txt文件,最后以字典格式输出结果[{线程1的id:[{}{}{}{}{}{}…600个字典]},{ {线程2的id:[结果]}……]。

import random
import string
import threading
from queue import Queue

#show属于线程
def show():
    thread_list = []  #600个字典
    dict2 = {}
    for i in range(600):
        str1 = que.get()
        # BntBUcWD  {'B':2,'n':1}  str1 = 张成磊磊   j =张  成   磊    磊    {张:1,成:1,磊:2}
        dict1 = {j:str1.count(j) for j in str1}  #str1是字符串  j是字母
        thread_list.append(dict1)  #列表里放字典
    # dict2[键] = 值    给字典赋值添加键值
    dict2[threading.currentThread().name] = thread_list
    last_list.append(dict2)


if __name__ == '__main__':
    set2 = set()  #集合,集合无序去重   列表有序支持重复
    que = Queue() #队列(线程)
    last_list = []

    for i in range(3000):
        str_num = ''.join(random.choices(string.ascii_letters,k=8))
        set2.add(str_num)  #实现去重
    for i in set2:  #i是字符串
        que.put(i)

    for i in range(5):
        thread1 = threading.Thread(target=show)
        thread1.start()
        thread1.join()

    with open('线程.txt', 'new') as f:
        f.write(f'{last_list}')

    with open('线程.txt','r') as f:
        print(f.read())

    # print(last_list)



(五)根据需求进行socket编程

具体要求:
服务端 创建一个service.py
1)以函数的格式来实现功能。
2)服务器无限循环接收客户端发过来的信息。
3)定义一个列表 ,列表中穿入一些特定字符,根据客户端发送的消息判断,r如果客户端发送的消息包含 特定字符 ,则把特定字符 替换成 ** 给用户发送过去,反之把用户发送的消息反转发送过去
4)服务器 把客户端发送的消息保存到 client.txt中
5)把客户端发送的 消息+ip+发送时间 保存到mysql数据库 表名 表结构自定义(需提供数据库截图)。
客户端 创建client.py。
1)客户端可以无限循环发送信息给服务端
2)写一个登陆装饰器 客户端只有在登陆的情况下才可以聊天。
3)客户端可以无限接受服务端发送过来的信息。
4)客户端保存服务器发送的消息到 servie.txt中。
5)当客户端发送 bey 或者exit 的时候 退出’

import socket
import threading


def msg(client):
    # 2.聊天
    while True:
        str1 = client.recv(1024).decode()
        print(str1)
        if str1 == 'bye' or str1 == 'exit':
            break

        #存文件
        #存数据库

        #过滤  循环敏 判断字符串  替换字符串
        count = 0  #统计敏感词的数量
        for i in str_list:
            if i in str1:  #hello
                str1 = str1.replace(i,'**')
                count +=1
        if count == 0:  #没有敏感词
            client.send(str1[::-1].encode())
        else:   #有敏感词
            client.send(str1.encode())



if __name__ == '__main__':
    #1.创建服务器
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server.bind(('127.0.0.1',9009))
    server.listen(128)
    str_list = ['aa','boy']
    while True:
        client,ip = server.accept()

        thred1 = threading.Thread(target=msg,args=(client,))
        thred1.start()



客户端文章来源地址https://www.toymoban.com/news/detail-442153.html

import socket, threading
from functools import wraps

login = True  # 登录

def check_login(fn):  # msg
    @wraps(fn)
    def inner(*args, **kwargs):
        if login:   #判断  日志  统计时间
            fn(*args, **kwargs)  # msg()聊天
        else:
            print('请先登录')

    return inner


@check_login
def msg():
    while True:
        str1 = input('输入内容:')
        client.send(str1.encode())
        if str1 == 'bye' or str1 == 'exit':
            break

        str2 = client.recv(1024).decode()
        print(str2)
        # 存文件


if __name__ == '__main__':
    # 1.创建客户端
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('127.0.0.1', 9009))

    # 2.聊天
    thred1 = threading.Thread(target=msg)
    thred1.start()

到了这里,关于python进阶--月考三的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • quarkus依赖注入之八:装饰器(Decorator)

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇是《quarkus依赖注入》系列的第八篇,目标是掌握quarkus实现的一个CDI特性:装饰器(Decorator) 提到装饰器,熟悉设计模式的读者应该会想到装饰器模式,个人觉得下面这幅图很好的解释了装饰器

    2024年02月14日
    浏览(43)
  • 设计模式-6--装饰者模式(Decorator Pattern)

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不修改现有对象的情况下,动态地将新功能附加到对象上。这种模式通过创建一个包装类,即装饰者,来包含原始对象,并在其上添加额外的行为或功能。这样,你可以在运行时选择不同的装饰者组合来实现不

    2024年02月10日
    浏览(52)
  • .NET 设计模式—装饰器模式(Decorator Pattern)

    简介 装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不改变对象接口的前提下,动态地将新行为附加到对象上。这种模式是通过创建一个包装(或装饰)对象,将要被装饰的对象包裹起来,从而实现对原有对象功能的增强和扩展。 角色 Component(组件): 定

    2024年04月09日
    浏览(52)
  • 设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码

    别名:包装模式(Wrapper Pattern) 类型:结构型模式。 目的:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责额外功能。 给对象添加新功能时,并不是在对象类中直接添加,而是在装饰器类中添加。 在装饰类中添加新功能,你可以增强原先对象的方法,也可

    2024年02月06日
    浏览(52)
  • 【Python】【进阶篇】14、Django创建第一个项目

    在上一章中,我们完成了开发环境的搭建工作。 本章我们将学习如何创建 Django 项目以及 Django 项目的初始化,我们将创建一个名为 BookStore 的 Django 项目,用此项目来讲解 Django 框架的部分知识,通过这个项目我们将一起打开 Django 世界的大门。 1) BookStore项目创建 我们创建一

    2024年02月02日
    浏览(54)
  • (二)结构型模式:5、装饰器模式(Decorator Pattern)(C++实例)

    目录 1、装饰器模式(Decorator Pattern)含义 2、装饰器模式的UML图学习 3、装饰器模式的应用场景 4、装饰器模式的优缺点 5、C++实现装饰器模式的简单实例 1、装饰器模式(Decorator Pattern)含义 装饰模式(Decorator),动态地给一个对象添加一些额外地职责,就增加功能来说,装

    2024年02月12日
    浏览(42)
  • 面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?

    面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们? 在TypeScript中,装饰器( Decorators )是一种用于增强代码功能的特殊类型声明。装饰器提供了一种在类、方法、属性等代码元素上注释或修改的方式,使得我们可以通过装饰器来扩展、修改或监视代码的

    2024年02月15日
    浏览(62)
  • 《golang设计模式》第二部分·结构型模式-04-装饰器模式(Decorator)

    装饰器(Decorator)通过包装(不是继承)的方式向目标对象中动态地添加或删除功能。 Component(抽象组件):定义了原始对象的接口,装饰器也会实现这个接口。 Concrete Component(具体组件):原始对象,以后装饰器会装饰它。 Decorator(抽象装饰器):关联/聚合了抽象组件,

    2024年02月09日
    浏览(51)
  • 【ECMAScript6_6】async 函数、Class、Module、异步遍历器、ArrayBuffer、Decorator装饰器

    1、async 函数 async 函数是什么?一句话,它就是 Generator 函数的语法糖。async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。 async函数自带执行器,只要调用了asyncReadFile函数,它就会自动执行,输出最后结果。不像 Generator 函数,需要调用next方法

    2024年02月16日
    浏览(43)
  • 【设计模式-05】Facade门面Mediator调停者 | Decorator装饰器 | Chain Of Responsibility责任链

    一般是系统内部相互交错,比如 消息中间件(MQ) 就是这种设计模式,对各个功能或系统之间进行解耦。 业务场景:论坛或者博客发表帖子或者评论,对敏感词过滤处理。使用责任链的模式进行过滤处理。 把变化的进行封装处理 核心代码实现 GitHub - jxaufang168/Design-Patterns: 设计

    2024年01月19日
    浏览(111)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包