python进阶--月考二

python进阶--月考二

  • (一)装饰器
  • (二)创建名为express.py文件,编写以下推导式(25分)
  • (三)创建名为process_test.py的文件,计算1-3000之间的水仙花数
  • (四)创建文件my_th.py,编写多线程程序
  • (五)根据需求进行socket编程

(一)装饰器

具体要求:
1)该装饰器要求做到通用,可以装饰定长,不定长各种参数的函数.(4分)
2)如果被装饰的函数抛出异常,则记录函数名,异常信息 到文件error_log.txt。(4分)
3)装饰器可以正确计算函数的运行时间。(3分)
4)创建文件power_fun.py 导入 decory.py中写好的装饰器,编写函数并装饰, 如果被装饰函数正常执行没有异常,则记录调用成功,并记录被调用函数的函数名,参数个数,到指定路径的文件中。(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','new') as f:
                f.write(f'{e}')
        else:
            with open('日志.txt','new') 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)


(二)创建名为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']统计列表每个元素的长度,保存成字典的格式(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']用集合推导式,创建字符串长度的集合(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)

(三)创建名为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)

在这里插入图片描述

(四)创建文件my_th.py,编写多线程程序

具体要求:
1)主线程产生2000个6位验证码,验证码有大小写字母和数字组成。
2)主线程把生成的随机验证码放入一个队列。
3)启动5个子线程。
4)每个子线程分析验证码,用正则匹配验证码,把符合的验证码放到列表中。
5)如果队列中的验证码匹配完成,则退出当前子线程
6)最终打印出符合规则的验证码的个数和验证码的列表。

import threading,random,string,re
from queue import Queue
l1 = []
def show(que):
    for i in range(400):
        str1 = que.get(i)
        if re.match('^[0-9]+[a-zA-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文件做完服务端用来接收客户端发送的消息server.py,。
2)服务器无限循环接收客户端发过来的信息。 accept()客户端 revc(1024)
3)客户端连接服务端,则输出“连接已建立‘
4)读取包含敏感字符的sensitive.txt文件,把所有敏感字符以列表的方式存储
5)根据列表进行过滤,如果消息包含铭感字,则输出消息包含敏感字,然后发回给客户端 您发送的消息包含敏感字,请重新输入。反之发送随机6位字符给客户端 send()
6)把用户发送的原始消息+ip id保存到mysql数据库中 数据库 表结构自行定义。
客户端
1)新建一个py文件client.py 作为客户端。
2)客户端无限循环发送信息给服务端。
3)客户端接受服务端发送过来的信息。
4)客户端收到服务器发过来的响应,输出到终端,并把服务端返回的信息记录到my_clent.txt中。
5)客户端输入exit的时候,向服务器发送我要退出了,然后退出程序。

import random
import socket
import string
import threading

#函数:收发消息(多收多发)
def msg(client):
    #可以和每个人说多句话
    while True:
        #1.循环收消息
        #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('您发送的消息包含敏感字,请重新输入'.encode())
            client.send(str1.encode())
        else:
            print('消息包含敏感字')
            client.send('您发送的消息包含敏感字,请重新输入'.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

客户端

import socket
import threading

#收发消息(多收多发)
def msg():
    while True:
        # 发消息
        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','new') 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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/19255.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT MD4 MD5 Sha1等几种加密方式

QT MD4 MD5 Sha1等几种加密方式 [1] QT MD4 MD5 Sha1等几种加密方式[2] qt MD5 和AES 加密一 、MD5 加密二、AES 加密和解密 [3] QT中sqlite数据库数据加密/混淆---MD5/SHA1/SHA2/SHA3&#xff08;1&#xff09;创建一个加密对象&#xff08;2&#xff09;放入要加密的数据&…

目前可用的ChatGPT网站

本文意在整理可用gpt-3.5、gpt-4.0等网站。 本文主要是方便自己翻阅&#xff0c;如对您也有所帮助&#xff0c;不胜荣幸~ 文章目录 chatgpt.qdymys.cngpttalkchatgpt-cn.cobing.comchat机器人wuguokai.cn总结 chatgpt.qdymys.cn 网址&#xff1a;https://chatgpt.qdymys.cn/限…

SpringCloud —— eureka

目录 1.认识微服务 1.0.学习目标 1.1.单体架构 1.2.分布式架构 1.3.微服务 1.4.SpringCloud 1.5.总结 2.服务拆分和远程调用 2.1.服务拆分原则 2.2.服务拆分示例 2.2.1.导入Sql语句 2.2.2.导入demo工程 2.3.实现远程调用案例 2.3.1.案例需求&#xff1a; 2.3.2.注…

mysql进阶-查询优化-慢查询日志

文章目录 一、什么是慢查询日志二、慢查询日志能干什么2.1 性能分析和优化2.2 诊断和排查问题2.3 数据分析和探索 三、慢查询日志实战3.1 永久开启开启慢查询日志3.2 临时开启慢查询日志3.4 常用命令 四、如何分析慢查询日志五、优化慢查询语句五、总结 一、什么是慢查询日志 …

观察者设计模式(Observer Design Pattern)[论点:概念、组成角色、相关图示、示例代码、框架中的运用、适用场景]

文章目录 概念组成角色相关图示示例代码框架中的运用适用场景 概念 观察者设计模式&#xff08;Observer Design Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种对象间的一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象&#xff0c;当…

SpringBoot 配置文件

前言&#xff1a; 本篇主要介绍两种配置文件格式&#xff0c;分别为properties与yml(yaml)。 需要注意的是&#xff1a; 两个配置文件从功能上来讲是可以同时存在的&#xff0c;但是企业中通常会规定使用某一种格式的配置文件。如果同一个配置出现在两种格式的配置文件中的话&a…

微波方向有哪些SCI期刊推荐? - 易智编译EaseEditing

微波方向的SCI期刊推荐包括&#xff1a; IEEE Transactions on Microwave Theory and Technology&#xff1a; 该期刊是电磁场与微波技术领域的著名期刊&#xff0c;被世界上许多研究机构和大学广泛引用。 IEEE Transactions on Antennas and Propagation&#xff1a; 该期刊…

English Learning - L3 作业打卡 Lesson1 Day5 2023.5.9 周二

English Learning - L3 作业打卡 Lesson1 Day5 2023.5.9 周二 引言&#x1f349;句1: Fast loud music is popular with many people .成分划分爆破语调 &#x1f349;句2: They may say the music is red hot, especially the kind called Dixieland jazz.成分划分爆破语调 &a…

AI孙燕姿项目实现

最近在b站刷到很多关于ai孙笑川唱的歌曲&#xff0c;加上最近大火的ai孙燕姿&#xff0c; 这下“冷门歌手”整成热门歌手了 于是写下一篇文章&#xff0c; 如何实现属于的ai歌手。 注意滥用ai&#xff0c;侵犯他人的名誉是要承担法律责任的 下面是一些所需的文件链接&#xff…

低代码信创开发核心技术(一):基于Vue.js的描述依赖渲染DDR实现模型驱动的组件

前言 随着数字化转型的不断发展&#xff0c;低代码开发平台已成为企业快速建立自己的应用程序的首选方案。然而&#xff0c;实现这样一个平台需要具备高效、灵活和可定制化的能力。这正是基于描述依赖渲染&#xff08;Description dependency rendering&#xff09;所实现的。…

C语言CRC-16 XMODEM格式校验函数

C语言CRC-16 XMODEM格式校验函数 CRC-16校验产生2个字节长度的数据校验码&#xff0c;通过计算得到的校验码和获得的校验码比较&#xff0c;用于验证获得的数据的正确性。基本的CRC-16校验算法实现&#xff0c;参考&#xff1a; C语言标准CRC-16校验函数。 不同应用规范通过对…

三分钟阿里云服务器u1通用算力型性能、使用限制及费用说明

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xff0c…

C/C++每日一练(20230512) 成绩打印、补齐数组、水仙花数

目录 1. 成绩打印 ※ 2. 按要求补齐数组 &#x1f31f;&#x1f31f;&#x1f31f; 3. 水仙花数 ※ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 成绩打印 一个班有10个同学&am…

隐语v0.8.2版本更新,首次发布TEEU

隐语v0.8.2版本更新&#x1f31f; 应用层 机器学习&#xff1a; - MPC 纵向 LR &#xff08;SSRegression&#xff09;新增 Policy SGD 优化器和 Early Stopping 支持&#xff0c;减少调参成本&#xff0c;加快收敛速度&#xff1b; - WOE 分箱进行了若干优化&#xff0c;性…

本地搭建wamp服务器并内网穿透实现无公网IP远程访问

文章目录 前言1.Wamp服务器搭建1.1 Wamp下载和安装1.2 Wamp网页测试 2. Cpolar内网穿透的安装和注册2.1 本地网页发布2.2 Cpolar云端设置2.3 Cpolar本地设置 3. 公网访问测试4. 结语 转载自cpolar极点云的文章&#xff1a;无公网IP&#xff1f;教你在外远程访问本地Wamp服务器「…

前端CSS学习(三)

1、盒子模型 盒子的概念1、页面中的每一个标签&#xff0c;都可看做是一 个“盒子” &#xff0c;通过盒子的视角更方便的进行布局2、浏览器在渲染 (显示)网页时&#xff0c;会将网页中的元素看做是一个个的矩形区域&#xff0c;我们也形象的称之为盒子CSS中规定每个盒子分别由…

Postman安装及入门接口测试使用步骤

前言 在软件测试行业中&#xff0c;作为一款比jemter更便捷更好用的软件测试工具&#xff0c;postman以其便捷灵活性首当其冲&#xff0c;成为当今测试行业领域使用较广泛的主流系统软件接口测试工具。今天Darren洋为大家讲解postman这款软件测试工具的下载安装及入门接口测试步…

Linux权限 - 概念与管理 | 文件权限的修改与转让 【详解】

目录 Linux权限 Linux权限的概念 Linux权限的基础操作 (1).实现用户账号的切换 (2).仅提升当前指令的权限 Linux权限管理 1、文件访问者的分类&#xff08;人&#xff09; 2、文件类型和访问权限&#xff08;事物属性&#xff09; 3、文件权限值的表示方法 4、文件访…

刷题刷题。

自然数拆分 利用step记录组合情况&#xff0c;只用sum不能判断组合情况 1.选择dfs原因&#xff1a;产生排列组合&#xff0c;和为7&#xff0c;step为8&#xff0c;其中7个空位&#xff0c;第8个step为输出&#xff1b; 参量的设置sum&#xff0c;step (进入下一层&#xff09;…

ThingsBoard教程(四十):规则节点解析 计算增量节点 Calculate delta

本篇文章介绍一个ThingsBoard 规则引擎中的一个节点,Calculate delta Calculate delta 计算增量 该节点可以在规则中获取上一次遥测的值,以此可以实现二次遥测的差。比如一个设备,一天上传一次数据,如果你要对比今天和昨天的数据,并将两者数据差保存到数据库,就能够使用…