20223305 高赫彬 2023-2024-2 《Python程序设计》实验四报告

20223305高赫彬 2024-05-31 23:57:34

课程:《Python程序设计》
班级: 2233
姓名: 高赫彬
学号:20223305
实验教师:王志强
实验日期:2024年5月15日
必修/选修: 公选课

1.实验目的:

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
1、编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
2、利用公开数据集,开展图像分类、恶意软件检测等
3、利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
4、爬取天气数据,实现自动化微信提醒
5、利用爬虫,实现自动化下载网站视频、文件等。
6、编写小游戏:坦克大战、贪吃蛇、扫雷等等

2.实验内容:

设计的是一款功能较为简易的CPS检测器。采用的是pygame模块。

3.实验过程及结果:

此小程序设计的思路为:有三个界面,分别是开始界面,测试界面,结算界面;测试CPS是通过每秒点击鼠标次数实现的,故采用pygame中的clock模块配合变量自增计时;
同时鼠标点击按钮使用按钮的碰撞箱与鼠标重合与否和鼠标是否点下时间双重判定。
检测过程中,鼠标点击检测采用了前后状态判别。当前一时刻状态为0,后一时刻状态为1时才能判定为按下一次。
于是写出的代码如下:

import pygame
import sys
import random

def background():
    screen.fill((0,0,0))
    screen.blit(back,(0,0))

def startfont():
    screen.blit(font.render('welcome to the cps detector!',1,(255,255,255)),(100,50))
    screen.blit(font.render('click on the diamond block to begin!',1,(255,255,255)),(200,100))
    screen.blit(db,((wid-db_w)/2,(hig-db_h)/2))

def detecting(m_sta_p,m_sta_n,score,tim):
    m_sta_p = m_sta_n
    screen.blit(font.render('now click as fast as you can!',1,(255,255,255)),(wid/2-200,hig/4))
    if(event.type == pygame.MOUSEBUTTONDOWN):
        m_sta_n = 1
    else:
        m_sta_n = 0
    if(m_sta_p == 0 and m_sta_n == 1):
        score = score + 1
        screen.blit(font.render('click!',1,(255,255,255)),(random.randint(0,wid),random.randint(0,hig)))
    screen.blit(font.render('your score:'+str(score),1,(255,255,255)),(wid/2-200,hig/4+100))
    tim = tim + 1
    screen.blit(font.render('time left:'+str("{:.3f}".format(5-tim/1000)),1,(255,255,255)),(wid/2-200,hig*3/4))
    return (m_sta_p,m_sta_n,score,tim)
    
def saa(score):
    screen.blit(font.render('you have clicked '+str(score)+' times in 5 seconds!',1,(255,255,255)),(wid/2-300,hig/3))
    screen.blit(font.render('your cps is: '+str(score/5),1,(255,255,255)),(wid/2-200,hig/2))
    screen.blit(font.render('click the grassblock to return to the title',1,(255,255,255)),(100,540))
    screen.blit(gb,(1080-db_w/2,540-db_h/2))
    
pygame.init()
pygame.font.init()
size = wid , hig = 1280,640
font = pygame.font.SysFont("Minecraft",50)
clock =pygame.time.Clock()
screen=pygame.display.set_mode(size)
back = pygame.image.load("back1.png")
back = pygame.transform.scale(back,size)
db = pygame.image.load("diamond_block.png")
db_size = db_w , db_h = pygame.Surface.get_size(db)
db_pos = db.get_rect(center = (wid/2,hig/2))
gb = pygame.image.load("grass_block.png")
gb = pygame.transform.scale(gb,db_size)
gb_w , gb_h = pygame.Surface.get_size(gb)
gb_pos = gb.get_rect(center = (1080,540))
score = 0
sta1 , end1=0,0
m_sta_n,m_sta_p=0,0
tim = 0
while True:
    clock.tick(1000)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    background()
    if(sta1 == 0 and end1 == 0):
        startfont()
        m_pos = pygame.mouse.get_pos()
        if(db_pos.collidepoint(*m_pos)):
            if event.type == pygame.MOUSEBUTTONDOWN:
                sta1 = 1
    elif(sta1 == 1 and end1 == 0):
        m_sta_p,m_sta_n,score,tim = detecting(m_sta_p,m_sta_n,score,tim)
        if(tim >= 5000):
            end1 = 1
    elif(sta1 == 1 and end1 == 1):
        saa(score)
        m_pos = pygame.mouse.get_pos()
        if(gb_pos.collidepoint(*m_pos)):
            if event.type == pygame.MOUSEBUTTONDOWN:
                sta1 , end1 = 0,0
                m_sta_p,m_sta_n,score,tim = 0,0,0,0
        
    pygame.display.flip()

最后得到的结果是这样的:

4.实验遇到的问题:

  • q1:图片导入显示不存在
  • a1:检查了好久之后才发现,vscode终端默认运行文件夹为打开的文件夹,因此必须在终端中输入进入文件夹的指令才能够使用。
  • q2:开关使用失灵
  • a2:后发现,是开关写错了

5.实验感想:

从这个实验同样能够看出python与c程序中存在的不同。如&&不等于&,事实上这一点在c语言中也是同样的。c语言中的&&在Python中对应为and。
python让我又一次感到数字与代码的庞大。每一个网站,每一张图片,每一个游戏,背后都是无数的数据,无数的代码。切身感受到了自我创造的快乐。

6.课程总结:

作为一门面向对象的编程,python较c语言也许更为浅显易懂,但二者仍存在许多共同点。python从最基本的变量,到关键字,到列表元组字典集合,再到函数模块,乃至爬虫等技术,无一不有着巨大的运用空间。真的是“人生苦短,我用python”了。四个实验更是一步一个台阶,循序渐进地让我看到了数字世界的魅力。只要想,每个人都可以拥有一个属于自己的网站,成为互联网中的一部分,那该是多么美好啊:D
这门课的课堂诙谐有趣,我个人认为是一门不可或缺的好课。唯一的缺点感觉在于人太多了,电源没电。事实上我很喜欢这种理论与实践相结合的课堂。谢谢老师,谢谢python。

...全文
308 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文系统研究了开关频率大于谐振频率(fs>fr)工况下,移相混合控制LLC谐振变换器在低压增益区域的工作特性,深入分析其在变频与移相结合控制模式下的调制机理、工作模态划分及损耗分布规律。通过Simulink平台构建高保真仿真模型,对变换器在不同负载和输入条件下的电压增益、转换效率、关键器件电压电流应力等性能指标进行了全面仿真验证,重点探讨了其在低增益区间的软开关实现能力与效率优化潜力,旨在提升LLC变换器在宽范围输入输出应用中的动态响应与能源转换效率。; 适合人群:从事电力电子变换器设计、高频电源开发及相关领域的高校研究生、科研院所研究人员及企业研发工程师,要求具备扎实的电路理论基础、电力电子技术知识以及一定的Simulink仿真能力。; 使用场景及目标:①深入理解LLC谐振变换器在fs>fr条件下采用移相混合控制的内在工作机理与模态转换过程;②掌握利用Simulink搭建复杂谐振变换器精确仿真模型的方法与技巧;③分析并优化低压增益区的增益特性与损耗构成,为设计高效率、高功率密度的软开关电源提供理论依据和数据支持; 阅读建议:建议读者结合文中所述仿真模型,亲自复现仿真过程,重点观察不同控制参数(如移相比、开关频率)对电压增益曲线和关键波形的影响,并对比传统变频控制策略,深入探究混合控制在拓宽调压范围、提升轻载效率方面的优势,从而深化对现代高效谐振电源设计的理解。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化问题;②掌握双层优化建模方法与粒子群算法在复杂电力系统问题中的应用技巧;③为实际工程中分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。

110

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用Python!
python3.11 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧