20193306 综合实践《python程序设计》实验报告

20193306 2021-2022-2 《Python程序设计》综合实践报告

课程:《Python程序设计》
班级: 1933
姓名: 于子涵
学号:20193306
实验教师:王志强
实验日期:2022年5月31日
必修/选修: 公选课

1.实验内容

在微信电脑端完成自动回复自定义话,识别固定关键语句,具有关键句自动回复、回复间隔设置和默认回复功能。

2. 实验过程及结果

完整代码
import pyautogui
import pyperclip
import time
import random
import cv2.cv2 as cv
from uiautomation import WindowControl

tasklist = [
    {"type":"单击图片","content":"red1.png"},
    {"type":"输入文字","content":"确实""h""收到"},
    {"type":"单击图片","content":"send.png"},
    {"type":"单击图片","content":"manofscience.png"}
]
def mClick(img):
    location = pyautogui.locateCenterOnScreen(img,confidence=0.9)
    if location is not None:
        pyautogui.click(location.x,location.y,clicks=1,interval=0.2,duration=0.2,button="left")
        return True
    else:
        return False

def dTask(task):
    wx = WindowControl(Name="微信")
    if task["type"] == "单击图片" :
        img = task["content"]
        return mClick(img)
    elif task["type"] == "输入文字":
        msg = wx.ListControl(Name="消息").GetChildren()[-1].Name
        text = task["content"].split("h")
        time.sleep(random.randint(0, 2))
        if "收到请回复" in msg:
            pyperclip.copy(text[1])
        else:
            pyperclip.copy(text[0])
        pyautogui.hotkey('ctrl','v')
        return True

while True:
    i = 0
    while i < len(tasklist):
        if(dTask(tasklist[i])):
            i += 1

        else:
            print("监听中...")
实验结果

image

image

3. 实验过程中遇到的问题和解决方案

  • 问题1:如何读取对方的说话内容再去区分回复
  • 问题1解决方案:引入了新的库,基于windows的ui自动化框架:your automation
  • 问题2:不能持续和人对话,发一回之后由于没有再显示识别图像也就不满足回复条件
  • 问题2解决方案:创造再次回复对话的条件,就是每回复一次及时退出
  • 问题3:回复快,不具有观赏性,也容易造成消息冗杂
  • 问题3解决方案:增加休眠时间

其他(感悟、思考等)

最初选择这一实践内容的时候就是突然间想到的,而且好像网上也可以找到很多相关词条的内容,但是当我按照网上大部分的资料却发现由于微信这一软件的特殊设计,网上讲的最多的itchat和机器人可以说是不可用的了,至少研究了一段时间是四处撞墙没有进展。终于找到不依赖于机器人和虚拟客户端接口的文章后,其实实验中仍有很多不尽如意的地方:在设计之初是想区分群聊私聊进行回复的,但是查找的内容仍然对我来说不合适,中间也绕了很多弯路,没有合理解决掉。在此基础上群聊@到自动回复也没能实现。不过在本次实验中仍然有很多收获,我也感受到python的极强的应用性。

参考资料

全课总结与感想

回顾整个python课程内容,从python环境设置然后到基本类型、基本语法、基本运算,和C语言相比相似不过更加便利,包括之后的作业还有课上的视频python的代码量都相对精简很多。其中,这一部分我最大的收获是在于python的IDLE以及其他方法的调试,特别是IDLE,在老师演示过程中直观方便,非常便于理解单句或者较短的一部分。
之后就学习了流程控制语句:循环、判断语句,到这为止学习的内容与顺序和C语言相同,基本上除去格式的不同(还是,比C语言要干脆一些)。
两个语言的不同内容我认为是在序列这一部分开始:列表、元组、字典、集合四种,互相存在区别和相同点,比如内容可重复的有列表、元组、字典,集合的内容不可重复,而元组、列表有序,字典、集合无序,保存、访问的方式就有不同,等等。在实验中也都有用到,虽然不是代码中的主要部分,但是作为一些操作的“收纳”,确实起到很好的整理整合作用。
之后的正则表达式,虽然第一回听到这个名词,但其实在一些命令行操作中常常使用,python中老师在课上演示到很多正则表达式的用处,让我了解了更具体地正则表达式使用与符号,也加深了印象。
函数一章,老师用演员、角色的例子介绍实参和形参,帮助我更容易记忆、理解实参、形参,函数的创建与调用同样是帮助我回顾了这么一点印象。
虽然不是在做和C语言的对比总结,只是作为两种相当的语言,会有联系。而python是面向对象语言,进而在这一概念上又有类和对象的概念:对象是具体的事物,类则是具有相同属性的对象的集合,(类=属性+方法)由这样的结构又引出最重要的面向对象的三要素应用:封装、继承、多态。
同节课还讲到了异常处理的内容增加了处理问题的一种思路。
在实验三中遇到了令我很头疼的socket编程,在这次实验中,结合了socket编程、文件处理、加密技术,促进了对这三项内容的理解,包括代码应构成的结构的理解。
python最有名的当属爬虫了,爬虫资源丰富,爬的内容也多种多样,不通过实践是不容易有所掌握。
总结起来,我对python现在的感受就不会拆解成一份份的部分,以它的丰富广泛的实用度促进我要不丢掉对python的学习,如果可以很轻松的编出相似的原理或结构的程序,(比如爬虫爬的很熟练,)想必可以有很大的快感和便利。感谢老师的教诲,我可能还没有入门,出于兴趣也会之后练习学习的。
posted @ 2022-05-31 23:42  codeic  阅读(210)  评论(0编辑  收藏  举报