python进阶--月考二

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

(一)装饰器

具体要求:
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','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)


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

python进阶--月考二

(四)创建文件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()
        #找全部  满足  +数量 【内容】
        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文件做完服务端用来接收客户端发送的消息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

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

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','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模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • GB 9706.1-2020 医用电气设备第1部分:基本安全和基本性能的通用要求-1

    这是份什么文件 这是一份中华人民共和国国家标准,具体为GB9706.1—2020,标准适用于医用电气设备,并规定了医用电气设备基本安全和基本性能的通用要求。主要涵盖了医疗电器设备与患者接触的各种要求,包括电气安全、机械防护、防护辐射危险、控制器和仪表的准确性和

    2024年02月07日
    浏览(31)
  • Hive实战:分科汇总求月考平均分

    在这个实战中,我们使用了Hive框架来处理学生的月考成绩数据。首先,我们准备了三个文本文件,分别包含了语文、数学和英语的月考成绩数据。这些数据被上传到HDFS的指定目录。 接着,我们启动了Hive Metastore服务,并通过Hive客户端连接到Hive。在Hive中,我们创建了一个分

    2024年02月03日
    浏览(34)
  • 甲、乙机之间采用方式 1 双向串行通信,具体要求如下: (1)甲机的 k1 按键可通过串行口控制乙机的 LEDI 点亮、LED2 灭,甲机的 k2 按键控制 乙机的 LED1

    (1)甲机的 k1 按键可通过串行口控制乙机的 LEDI 点亮、LED2 灭,甲机的 k2 按键控制乙机的 LED1 灭、LED2 点亮,甲机的 k3 按键控制乙机的 LED1和 LED2 全亮。 (2)乙机的 K4 按键可控制串行口向甲机发送 k4按键接下的次数,并显示在甲机 P0 口的数码管上。 1.程序的核心思想 本程

    2024年02月08日
    浏览(35)
  • python中的装饰器(基础装饰器)

    1. 高阶函数 在python中, 如果一个函数的参数是另外一个或几个函数,那么这个函数就是高阶函数 ,如下 上面的函数fun2就是一个高阶函数,因为它的参数是一个函数fun1。 2. 闭包 在python中, 闭包是一个函数,它延伸了变量的作用域,使得在定义变量的作用域失效后,该变量

    2023年04月24日
    浏览(30)
  • python 单例模式,装饰类,装饰函数

    知乎 python 实现单例模式的两种方式 stack overflow 装饰函数 vs 装饰类 medium Do we even need a class to realize singleton? 单例模式大家肯定不陌生了,在读reference的两篇blog时突然发现用python实现单例模式的很多好玩之处。 用类实现单例模式是各种语言比较通用的方式。在python中的实现就

    2024年02月16日
    浏览(31)
  • 【Java 进阶篇】Java Request 获取请求参数的通用方式详解

    在Java Web开发中,获取HTTP请求的参数是一项基本任务。请求参数可以包含在URL中,也可以包含在请求体中,例如表单提交时的参数。在Java中,可以使用 HttpServletRequest 对象来获取HTTP请求的参数。本文将详细解释如何使用Java获取HTTP请求的参数,包括通用的方式以及示例代码。

    2024年02月05日
    浏览(37)
  • 系统学习Python——装饰器:类装饰器-[初探类装饰器和元类]

    分类目录:《系统学习Python》总目录 函数装饰器是如此有用,以至于Python2.X和Python3.X都扩展了这一模式,允许装饰器应用于类和函数。简而言之,类装饰器类似于函数装饰器,但它们是在一条 class 语句的末尾运行,并把一个类名重新绑定到一个可调用对象。同样,它们可以

    2024年02月19日
    浏览(30)
  • 系统学习Python——装饰器:函数装饰器-[添加装饰器参数:基础知识]

    分类目录:《系统学习Python》总目录 前面文章介绍的计时器装饰器有效运行,但是如果它可配置性更强的话,就会更好一一一例如提供一个输出标签并且可以打开或关闭跟踪消息,这些在一个多用途工具中可能很有用。装饰器参数在这里派上了用场:对它们适当编写后,我们

    2024年02月22日
    浏览(32)
  • 【Java基础教程】(四十五)IO篇 · 中:转换流、内存流和打印流(探索装饰设计模式与PrintStream类的进阶),文件操作案例实践、字符编码问题~

    掌握内存操作流、转换流、打印流的使用; 掌握文件复制操作; 掌握字符的主要编码类型以及乱码问题产生的原因; 虽然字节流与字符流表示两种不同的数据流操作,但是这两种流彼此间是可以实现互相转换的,而要实现这样的转换可以通过 InputStreamReader 、 OutputStreamWrit

    2024年02月16日
    浏览(32)
  • Python小知识 - Python装饰器

    Python装饰器 在Python中,装饰器是一个特殊的函数,可以将其他函数包装在装饰器函数中,并且将被包装的函数作为参数传递给装饰器函数。 使用装饰器的好处是可以自动在被包装的函数前后执行一些额外的代码,比如在函数执行前后打印日志,或者在函数执行前后计算函数

    2024年02月09日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包