中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------07 - 浩海泛舟的文章 - 知乎 https://zhuanlan.zhihu.com/p/51771041

面向套路编程(上)

泛舟n天没更新,终于把这篇琢磨出来了.

在泛舟的零基础入门系列里,开篇就指明了编程就是一个 数据输入>>>方法计算>>>输出结果 这个恒久不变的套路.或者可以装一点,叫道生一,一生二,二生三,三生万物.所有的编程,都是这样一个连环套中套.小套大再更大套大一直下去.

而回到我们的正题,就是我上上一篇的代码,可以算是面向过程的代码,直接描述流程,基本不能重用,重复的特别多.

而接下来做的代码优化,就是要优化成面向对象的代码.我习惯叫面向套路的代码,这里,也就是面向套路的编程.

看下面流程图,就是整体程序的流程,也就是真个程序的套路:

上面的代码,就是整个主程序的代码.

根据消息,判断来自谁,判读超时,读取任务记录表,根据任务记录表的步骤,读取步骤对应的方法.每一条消息,都是这个套路.就完成了一个来访登记程序的主要套路.为什么任务记录,任务时间这些不写在这个主方法,或者叫住套路里面,因为这个套路每条信息都会重新更新一次,如果写在里面,就根本不可能做到步骤记录.

再看这个住套路里面套了两个小一级的套路,可以理解成里面包含了两个组件.一个是 方法_超时判断,一个是方法_步骤处理.如果主套路是第一层,那么这里就是第二层.

超时判断这里,没有套到其他方法,所以这里就再没有下一层了.

方法_步骤处理,这里很明显就是整个程序的重点部分.而其中最重点的就是这个:

根据任务记录,读取步骤对应的信息类型,检测信息类型是否吻合,然后重新构造方法名称.再调用 eval函数,这个函数厉害,就是可以根据字符串调用名称相同的函数.就是这个方法,可以动态调用其他方法.在这里,就是可以动态调用其他套路.

根据我们实际情况和流程设计,步骤一共六部,也就是6套方法套路.我就不具体说,看下图.

整个程序总共六层套路.

其实一般使用并没有那么复杂,泛舟的经验就是,爱怎么写怎么写,不管黑猫白猫,捉到老鼠的就是好猫.能帮泛舟完成任务,节省时间的,就是好程序.但是总得有点追求,毕竟泛舟写在网上供所有人阅读的嘛.最后贴上泛舟优化后的程序代码.下一篇将继续优化代码,继续套路之旅.

感谢各位的阅读,望勿喷.

# -*- coding: utf-8 -*-
"""
Created on Tue Dec  4 10:19:35 2018
模块 itchat ,中文测试
@author: 浩海泛舟
"""import time as 包_时间
import itchat as 包_微信机器人
import 身份证识别 as 包_身份证识别 #import 包名不能是中文
import pandas as 包_科学计算
from pandas.core.frame import DataFrame as 包_制表def 方法_更新excel记录(数据):错误代码 = 0   try:#读取excel文档电子表格1 = './excel/访客登记表.xlsx'数据表1 = 包_科学计算.read_excel(电子表格1, sheet_name=None)['Sheet1']#数据 = [['张一','sxxx0089','面试','2018-11-30 14:35']]数据表 = []数据表.append(数据)数据表2 = 包_制表(数据表)数据表2.columns = ['姓名','身份证号码','来访目的','来访时间']#合并两个表数据列 = [数据表1,数据表2]数据表3 = 包_科学计算.concat(数据列,sort=False) #要加后面的 sort=False ,不然程序提示错误 数据表3.to_excel(电子表格1,index = False)  except:错误代码 = 1      return 错误代码def 方法_图片检测(消息):信息列表 = []回复信息 = ''    if 消息['Type'] != 'Text':图片名称 = 消息['FileName']图片路径 = './pic/%s'%图片名称消息['Text'](图片路径)图片 = 包_身份证识别.方法_获取图片码(图片路径)#print(图片)try:姓名,性别,民族,出生日期,地址,身份证号码 = 包_身份证识别.方法_获取身份证信息(图片)回复信息 = '姓名:%s \n性别:%s \n民族:%s \n出生日期:%s \n地址:%s \n身份证号码:%s \n请确认身份证信息是否正确 \n请回复 是或否'%(姓名,性别,民族,出生日期,地址,身份证号码)信息列表 = [姓名,性别,民族,出生日期,地址,身份证号码]return 信息列表,回复信息except:回复信息 ='图片处理失败,请发送正确的身份证图片,或者选择更清晰的身份证图片发送!'return 信息列表,回复信息else:       return 信息列表,回复信息def 方法_回复信息(回复内容,回复对象):回复 = 包_微信机器人.send(回复内容,回复对象)print(回复['BaseResponse']['ErrMsg'])def 方法_超时判断(消息):global 任务记录global 任务时间消息时间 = 消息['CreateTime']if 0 < (消息时间-任务时间) < 301:  #判读时间差,是不是5分钟之内.returnelse:任务记录 = '步骤0'returndef 方法_步骤0(消息):global 任务记录global 任务时间if 消息['Text'] == '来访登记':        任务记录 = '步骤2'任务时间 = 消息['CreateTime']       方法_回复信息(步骤_回复信息_字典['步骤1'],消息['FromUserName'])else:方法_回复信息(步骤_回复信息_字典['步骤0'],消息['FromUserName'])returndef 方法_步骤1(消息):方法_步骤0(消息)returndef 方法_步骤2(消息):global 任务记录global 任务时间global 身份证信息临时表global 步骤_回复信息_字典信息列表,回复信息 = 方法_图片检测(消息)身份证信息临时表 = 信息列表[:]任务记录 = '步骤3'任务时间 = 消息['CreateTime']步骤_回复信息_字典['步骤2'] = 回复信息方法_回复信息(回复信息,消息['FromUserName'])def 方法_步骤3(消息):global 任务记录global 任务时间global 步骤_回复信息_字典global 访客信息记录表if 消息['Text'] in ['是','否']:if 消息['Text'] == '是':回复信息 = '请输入来访目的'任务记录 = '步骤4'任务时间 = 消息['CreateTime']步骤_回复信息_字典['步骤3'] = 回复信息访客信息记录表 = [身份证信息临时表[0],身份证信息临时表[-1]]方法_回复信息(回复信息,消息['FromUserName'])else:回复信息 = '请重新发送清晰身份证图片'任务记录 = '步骤2'任务时间 = 消息['CreateTime']步骤_回复信息_字典['步骤3'] = 回复信息方法_回复信息(回复信息,消息['FromUserName'])else:回复信息 = 步骤_回复信息_字典['步骤2']方法_回复信息(回复信息,消息['FromUserName'])def 方法_步骤4(消息):global 任务记录global 任务时间global 来访目的global 步骤_回复信息_字典回复信息 = '请确认来访目的是否正确,请输入 是或否 '任务记录 = '步骤5'任务时间 = 消息['CreateTime']步骤_回复信息_字典['步骤4'] = 回复信息来访目的 = 消息['Text']方法_回复信息(回复信息,消息['FromUserName'])def 方法_步骤5(消息):global 任务记录global 任务时间global 来访目的global 访客信息记录表global 步骤_回复信息_字典if 消息['Text'] in ['是','否']:        if 消息['Text'] == '是':回复信息 = '正在写入登记信息'            步骤_回复信息_字典['步骤5'] = 回复信息方法_回复信息(回复信息,消息['FromUserName'])来访时间 = 包_时间.strftime("%Y-%m-%d %H:%M",包_时间.localtime())访客信息记录表[2] = 来访目的访客信息记录表[3] = 来访时间写入文件 = 方法_更新excel记录(访客信息记录表)if 写入文件 == 0:任务记录 = '步骤0'回复信息 = '登记完成,谢谢!'步骤_回复信息_字典['步骤5'] = 回复信息方法_回复信息(回复信息,消息['FromUserName'])else :任务记录 = '步骤6'回复信息 = 'excel表出现问题,可能excel表被打开或者表格被移除,请检查!已经处理好问题请输入:是;重新开始处理登录程序,请输入:否.'步骤_回复信息_字典['步骤5'] = 回复信息方法_回复信息(回复信息,消息['FromUserName'])else:任务时间 = 消息['CreateTime']回复信息 = '请重新发送来访目的'任务记录 = '步骤4'方法_回复信息(回复信息,消息['FromUserName'])                            else:回复信息 = 步骤_回复信息_字典['步骤4']方法_回复信息(回复信息,消息['FromUserName'])def 方法_步骤6(消息):global 任务记录global 步骤_回复信息_字典global 访客信息记录表if 消息['Text'] == '是':#访客信息记录表 = 访客信息记录表[:2]方法_步骤5(消息)else:任务记录 = '步骤0'回复信息 = 步骤_回复信息_字典[任务记录]方法_回复信息(回复信息,消息['FromUserName'])def 方法_步骤处理(消息):global 任务记录global 任务时间global 步骤_信息类型_字典global 步骤_回复信息_字典if 消息['Type'] == 步骤_信息类型_字典[任务记录]:方法名称 = '方法_' + 任务记录eval(方法名称)(消息)else:if 任务记录 == '步骤0':方法_回复信息(步骤_回复信息_字典[任务记录],消息['FromUserName'])else:上一步骤 = '步骤' +  str(int(任务记录[2:])-1) 方法_回复信息(步骤_回复信息_字典[上一步骤],消息['FromUserName'])步骤_信息类型_字典 = {'步骤0':'Text','步骤1':'Text','步骤2':'Picture','步骤3':'Text','步骤4':'Text','步骤5':'Text','步骤6':'Text'}步骤_回复信息_字典 ={'步骤0':'上一次操超时或没有对应的关键字,您是需要登记来访信息吗?请重新输入关键字:来访登记','步骤1':'请给我发送清晰的身份证图片,以便提取身份证信息!','步骤2':'Picture','步骤3':'Text','步骤4':'Text','步骤5':'Text','步骤6':'Text'}#步骤任务说明 = ['步骤名称','检测消息类型','任务类型','关键字','处理方法','回复信息']包_微信机器人.auto_login(hotReload=True)  # itchat.auto_login(hotReload=True) 推出程序后暂存登陆状态,即一段时间不用扫码。#获取公司微信号机器码,用于后面作判断
朋友列表 = 包_微信机器人.search_friends(name = '公司微信号')
公司微信机器码 = 朋友列表[0]['UserName']
#print(朋友列表)#创建任务记录表
任务记录 = '步骤0'
任务时间 = int(包_时间.time())
身份证信息临时表 = []
来访目的 = ''
访客信息记录表 = []#注册信息类型,作用是当微信收到文本信息,或者图片信息时,执行下面的程序.
@包_微信机器人.msg_register([包_微信机器人.content.TEXT,包_微信机器人.content.PICTURE])
def 方法_消息处理(消息):#判读是否公司微信号if str(消息['FromUserName']) == 公司微信机器码:print('判断成功!')#判断时间方法_超时判断(消息)#根据步骤处理消息方法_步骤处理(消息)else:print('不是公司账号,不处理!')if __name__ == '__main__':包_微信机器人.auto_login()包_时间.sleep(1)包_微信机器人.send("文件助手你好哦", toUserName="filehelper")包_微信机器人.run()

中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------07相关推荐

  1. 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------05

    中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------05 - 浩海泛舟的文章 - 知乎 https://zhuanlan.zhihu.com/p/51276692 ...

  2. 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障---08

    中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障---08 - 浩海泛舟的文章 - 知乎 https://zhuanlan.zhihu.com/p/51902838 面向 ...

  3. 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------06

    中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------06 - 浩海泛舟的文章 - 知乎 https://zhuanlan.zhihu.com/p/51382282 ...

  4. 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------04

    中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------04 - 浩海泛舟的文章 - 知乎 https://zhuanlan.zhihu.com/p/51184689 ...

  5. 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------02

    接着上一篇的思路,那么实现机器人登记,有个重点是要自动识别身份证,有什么办法呢? 下载名片和身份证识别类的app. 借助大公司提供的api接口进行识别. 自己做人工智能识别. 先说方法3,github ...

  6. 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------03

    接着上一篇的思路,本应该是要设计机器人的任务流程,输入关键字,然后判断再回复.但是在测试原来的 itchat 程序是,发现竟然出错了.泛舟纳闷难道程序也有保质期?经过一番排查,竟然还真是有保质期,微信 ...

  7. [合辑]最精致的python访客登记系统实例项目,微信机器人不再只当人工智障

    原作者为知乎号浩海泛舟 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------01 中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障- ...

  8. 基于SSM开发的校园访客登记系统 JAVA

    10044基于SSM开发的校园访客登记系统 技术 Spring + SpringMVC + Mybatis 工具 eclipse + tomact + mysql + jdk 功能详情 前台功能 后台 ...

  9. 怎样选择适合您的访客登记系统

    如何才能选择适合您的访客系统?这是所有用户的重要需求.建议您从两个方面去考虑,一是硬件设备也就是说的访客一体机,另一方面是软件系统,然后综合评估,决定您想要的产品. 随着访客机的逐步普及,利用该机器来 ...

最新文章

  1. java技术培训之File类中常用的构造方法
  2. 不去参加团建k歌,第二天被降薪降职
  3. 始于阿里,回归社区:阿里8个项目进入CNCF云原生全景图
  4. 一文看懂地平线如何再造摩尔定律| 地平线大牛讲堂
  5. 网络编程 数据报是什么?TCP、UDP数据报结构
  6. python面向对象作业_python面向对象编程作业
  7. OPENCV回调函数
  8. 收藏 | 一文读懂深度学习中的各种卷积
  9. 8.0魔兽服务器维护时间,魔兽世界8.0大米开放时间一览_wow8.0大秘境开启时间介绍_3DM网游...
  10. 《SQL学习指南》读书笔记四——优雅和粗鲁
  11. Qt公有槽和私有槽的区别
  12. 【读书笔记《Android游戏编程之从零开始》】12.游戏开发基础(Canvas 画布)
  13. [C++] printf pitfall
  14. Obi - Advanced Rope Simulation 绳索插件学习文档
  15. 模仿“选择游戏角色的页面”
  16. python神经网络训练效果差_为什么我的神经网络验证精度比我的训练精度高,并且两者都变得恒定? - python...
  17. 电商中spu和sku是什么?怎么去设计表结构?
  18. python3:urllib/urllib2
  19. 找字符串中出现次数最多的字符
  20. 电子元器件图片、名称、符号,超全面+唯样商城

热门文章

  1. 快速接入小爱音箱,操作电脑动动嘴
  2. 大学“电路分析基础”试题合集第一章
  3. 菜鸟教程之工具使用——国际化资源文件开发凶器MultiProperties
  4. 信号完整性研究系列--什么是地弹
  5. 秒懂集成商,分销商和代理商的区别
  6. 电阻的主要作用及应用电路
  7. 组合模式的应用之绘制基本图形和复合图形对象
  8. PHP后端美化,PHPCMS V9后台模板美化 PHPCMS后台美化模版 - 下载 - 搜珍网
  9. python网易云音乐下载打包exe文件,Windows可运行
  10. Vue Baidu Map 实现Vue版本地图轨迹回放(App端)