python进阶--月考二

news2024/11/24 14:31:45

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


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xormplus是xorm的增强版,为xorm提供类似ibatis的配置文件及动态SQL支持

简介 xorm是一个简单而强大的Go语言ORM库&#xff0c;通过它可以使数据库操作非常简便。本库是基于原版xorm的定制增强版本&#xff0c;为xorm提供类似ibatis的配置文件及动态SQL支持&#xff0c;支持AcitveRecord操作。 github地址:https://github.com/armingli/xorm //安装…

荷兰国旗问题与快速排序

实现&#xff1a; 当arr[i]小于等于num时&#xff0c;arr[i]和小于等于num区域下一个数进行交换&#xff0c;小于等于区域右扩一个位置&#xff0c;指针 i 指向下一个 当arr[i]大于num时&#xff0c;指针 i 指向下一个 指针 i 越界时完成 升级版本&#xff1a;将小于、等于、…

存在comsumer group且存在消费行为,但AdminClient获取不到消费offset值

AdminClient 中的listConsumerGroupOffsets获取不到consumergroup; 网上查找资料说&#xff1a; listConsumerGroupOffsets() 请求返回的消费位移信息未及时更新,仍是稍早时刻的状态。 由于 listConsumerGroupOffsets() 请求需要从 Broker 获取最新的位移信息,如果响应结果的更…

ABAP SAT使用说明

SAT简介 SAT是SAP提供的用来替代SE30的程序性能优化分析工具( runtime analysis)&#xff0c;功能比SE30更加强大。 创建SAT变式-设置SAT运行属性&#xff0c;默认为default&#xff0c;可以参照创建一个自己的变式。 SAT变式说明 Size Limits&#xff1a; 设置文件最大容量…

【LeetCode: 279. 完全平方数 | 暴力递归=>记忆化搜索=>动态规划 | 背包模型】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Goby 漏洞更新 |商混ERP系统 DictionaryEdit.aspx 页面存在SQL注入

漏洞名称&#xff1a;商混ERP系统 DictionaryEdit.aspx 页面存在SQL注入 English Name&#xff1a;SQL injection exists on Lotus ERP DictionaryEdit.aspx pag CVSS core: 8.5 影响资产数&#xff1a;616 漏洞描述&#xff1a; 杭州荷花软件有限公司开发的商混ERP系统。…

开发板和虚拟机socket报错“connect error: No route to host”

学习socket编程时&#xff0c;将服务器程序运行在开发板上&#xff0c;将客户端应用程序运行在 虚拟机Ubuntu16.04 系统&#xff0c;服务器可以正常开启&#xff0c; 但客户端连接时&#xff0c; 报错“connect error: No route to host” 1、网上大多是以下情况&#xff1a; …

易智编译EaseEditing:计算机顶会不一定比SCI期刊更权威!

计算机SCI期刊和学术会议都是评估学术研究水平和影响力的重要指标&#xff0c;但在不同领域、不同学科、不同评价指标下可能会有不同的权威性。 在计算机科学领域&#xff0c;传统上认为顶级学术会议的影响力和权威性更高。 因为计算机科学发展较快&#xff0c;研究领域广泛&a…

【Linux】8. 环境变量

1. 环境变量的引入 先描述一个现象&#xff0c;我们在执行二进制可执行程序的时候&#xff0c;是需要找到其所在位置的(程序要运行必须先加载到内存&#xff0c;是因为冯诺依曼体系结构规定CPU只能从内存中读取数据)&#xff0c;所以这也就是为什么我们在运行前带上./的原因&a…

洛谷P5717-三角形分类

洛谷P5717-三角形分类 题目 这道题更像是初中题&#xff0c;但是怎么能完整的按照题目的意思来解决呢&#xff0c;说实话这个题卡了我有一会儿&#xff0c;要做一次性做出这个题&#xff0c;我觉得需要搞清楚if-if 和if-else if-else if&#xff0c;试想这两个的区别是什么&am…

ChatGPT有意识吗?

​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; ChatGPT是一个计算机程序&#xff0c;它没有意识。它只是根据预设的算法和规则来处理输入和输出。虽然它可以模拟人类的对话&#xff0c;但它没有自己的思想或感觉。它只是根据程序设…

ROS 下 激光扫描仪 YDLidar-G4 使用

环境配置&#xff1a; ubuntu20.04 LTS ROS noetic 编程工具&#xff1a;vs code&#xff0c;远程通过ssh访问 扫描仪&#xff1a;YDLidar-G4 YDLidar驱动&#xff1a; YDLidar SDK YDLidar ROS 功能包 1 . YDLidar-SDK通信协议 雷达扫描输出的数据以十六进制格式输出到通信…

Linux文本之sed流编辑器

一、sed的相关知识及其工作流程 1&#xff09;sed编辑器的介绍 sed是一种流编辑器&#xff0c;它一次处理一行内容。处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”&#xff08;pattern space&#xff09;&#xff0c;接着用sed命令处理缓…

使用HDFS底层文件进行HBase跨集群数据迁移

目录 一、概述 二、环境信息 三、HBCK2下载和编译 四、具体操作步骤 4.1 数据同步 4.2 添加元数据 4.3 重新分配region 一、概述 客户集群机房迁移&#xff0c;我们部署的集群也要完成跨集群迁移hbase 表&#xff0c;这里选择迁移Hadoop底层数据来实现hbase的表迁移。 …

Plant Simulation 模型保存历史记录

Plant Simulation 建模是一个长时间的过程&#xff0c;所以做好模型保存历史记录很重要&#xff0c;这次分享一个OOTB&#xff08;开盒即用/系统自带&#xff09;的记录保存历史记录的功能。 文中截图于 Plant Simulation 16.0.5 目录 1.功能设置与说明2.使用场景3.总结 1.功能…

Selenium自动化测试中的PageObject模式

PageObject模式简介 众所周知&#xff0c;UI页面元素常常是不稳定的&#xff0c;在使用Selenium编写WebUI自动化测试用例时&#xff0c;随着测试脚本的增加&#xff0c;维护和更新这些元素便成为一个令人头疼的问题。 在普通模式下&#xff0c;脚本直接定位并操作元素&#xf…

链表中的经典问题

一、反转链表 反转一个单链表:一种解决方案是按原始顺序迭代结点&#xff0c;并将它们逐个移动到列表的头部。 方法1:迭代 C struct ListNode* reverseList(struct ListNode* head) {struct ListNode* prev NULL;struct ListNode* curr head;while (curr) {struct ListN…

字节跳动软件测试面试记:二面被按地上血虐,所幸Offer已到手

在互联网做了几年之后&#xff0c;去大厂“镀镀金”是大部分人的首选。大厂不仅待遇高、福利好&#xff0c;更重要的是&#xff0c;它是对你专业能力的背书&#xff0c;大厂工作背景多少会给你的简历增加几分竞争力。 但说实话&#xff0c;想进大厂还真没那么容易。最近面试字…

Linux中与“系统网络状态”相关的内核数据结构

六、系统网络状态相关的数据结构 6.1 ifconf \linux-2.6.32.63\include\linux\if.h /* Structure used in SIOCGIFCONF request. Used to retrieve interfaceconfiguration for machine (useful for programs which must know allnetworks accessible). */ struct ifcon…

腾讯云与中电金信发布联合核心方案

5月11日&#xff0c;以“聚力革新&#xff0c;行稳致远”为主题的 “腾讯金融云国产化战略峰会”在北京举办&#xff0c;来自金融业、科技侧、研究机构的专家学者同聚一堂&#xff0c;共同探讨银行核心下移方法论以及国产化转型实践等话题。会议期间&#xff0c;中电金信副总经…